When developing modern applications, a replica set configuration is essential to simulate production environments that leverage MongoDB’s high availability and redundancy. In this article, I’ll share two approaches:
Deploying a MongoDB Replica Set Using Docker Desktop
Running a MongoDB Replica Set Natively on Windows Without Docker Desktop
Each method has its merits depending on your environment and constraints.
- Deploying a MongoDB Replica Set with Docker Desktop Docker is a great way to quickly spin up isolated environments. In this section, we’ll create a replica set using a custom Docker network and a Docker Compose file.
Step 1: Create a Docker Network
First, create an external Docker network that all MongoDB containers will share. Open your terminal and run:
docker network create mongo-cluster
Step 2: Prepare the docker-compose.yml File
Create a docker-compose.yml file with the following configuration. This file defines three services — one primary and two secondaries. Each service is configured to run with the replica set parameter ( — replSet rs0) and bind to all IP addresses:
version: ‘3.8’
services:
mongo-primary:
image: mongo:latest
container_name: mongo-primary
restart: always
command: mongod — replSet rs0 — bind_ip_all
ports:
- 27017:27017
volumes:
- E:/Program Files/MongoDB/primary/data:/data/db
networks:
- mongo-cluster
mongo-secondary1:
image: mongo:latest
container_name: mongo-secondary1
restart: always
command: mongod — replSet rs0 — bind_ip_all
ports:
- 27018:27017
volumes:
- E:/Program Files/MongoDB/secondary1/data:/data/db
networks:
- mongo-cluster
mongo-secondary2:
image: mongo:latest
container_name: mongo-secondary2
restart: always
command: mongod — replSet rs0 — bind_ip_all
ports:
- 27019:27017
volumes:
- E:/Program Files/MongoDB/secondary2/data:/data/db
networks:
- mongo-cluster
networks:
mongo-cluster:
external: true
Note: Adjust the volume paths (E:/Program Files/MongoDB/…) to your local directories as needed.
Step 3: Start the Containers
In the directory containing your docker-compose.yml file, execute:
docker-compose up -d
This command starts the three containers in detached mode.
Step 4: Initialize the Replica Set
Connect to the Primary Container:
Run the following command to open an interactive Mongo shell (mongosh) session inside the primary container:
docker exec -it mongo-primary mongosh
Initiate the Replica Set:
Within the shell, execute:
rs.initiate({_id: “rs0”,members: [{ _id: 0, host: “host.docker.internal:27017”},{ _id: 1, host: “host.docker.internal:27018” },{ _id: 2, host: “host.docker.internal:27019” }]});
Verify the Setup:
Run:
rs.status();
This command shows the status of your replica set. After the verification Run:
Exit
And go to step 5.
Step 5: Verify Data Persistence
Check your Docker volumes to ensure data is being persisted:
docker volume ls
Connection String
Connect your application using the following connection string:
mongodb://host.docker.internal:27017,host.docker.internal:27018,host.docker.internal:27019/?replicaSet=rs0
Tip: If host.docker.internal fails to resolve on Windows, add the following entry to your hosts file:
127.0.0.1 host.docker.internal
- Running a MongoDB Replica Set Natively on Windows (Without Docker Desktop) If you prefer or need to run MongoDB directly on Windows without containerization, follow these steps.
Step 1: Download and Install mongosh
Make sure you have mongosh installed. This shell will help you manage and interact with your replica set.
Step 2: Configure MongoDB via mongod.cfg
Prepare separate configuration files for each MongoDB instance. Below is an example configuration (mongod.cfg) for one node:
`
`
mongod.conf
Where and how to store data.
storage:
dbPath: C:\Program Files\MongoDB\Server\7.0\data
Where to write logging data.
systemLog:
destination: file
logAppend: true
path: C:\Program Files\MongoDB\Server\7.0\log\mongod.log
Network interfaces
net:
port: 27017
bindIp: 127.0.0.1
Replica set configuration
replication:
replSetName: “rs0”`
`
Note: Create a similar configuration file for each MongoDB instance, ensuring that the port numbers and data directories are unique (e.g., 27017, 27018, 27019).
Step 3: Start the MongoDB Instances
Run each MongoDB server instance as an administrator. You can launch them manually using a command prompt or create a batch file. For example, to run the instance on port 27017, execute:
“C:\Program Files\MongoDB\Server\7.1\bin\mongod” — config “C:\Program Files\MongoDB\Server\7.1\bin\mongod.cfg”
For convenience, you can create a .bat file with the following content:
`
@echo off
start “MongoDB 7.1” “C:\Program Files\MongoDB\Server\7.1\bin\mongod” — config “C:\Program Files\MongoDB\Server\7.1\bin\mongod.cfg”
start “MongoDB 7.2” “C:\Program Files\MongoDB\Server\7.2\bin\mongod” — config “C:\Program Files\MongoDB\Server\7.2\bin\mongod.cfg”
`
*Run the batch file as an administrator.
*
Step 4: Manually Initiate the Replica Set
Launch the Primary Instance:
If not already running, start the primary node with:
mongod — port 27017 — dbpath “C:\Program Files\MongoDB\Server\7.0\data” — replSet rs0
Connect with mongosh:
Open mongosh as an administrator and execute:
`
rs.initiate({_id: “rs0”,members: [{ _id: 0, host: “127.0.0.1:27017” },{ _id: 1,host: “127.0.0.1:27018” },{ _id: 2, host: “127.0.0.1:27019” }]});
`
Step 5: Optionally Install as Windows Services
For an even smoother development experience, you can install each MongoDB instance as a Windows service. Run the following commands as an administrator:
`
“C:\Program Files\MongoDB\Server\7.1\bin\mongod.exe” — config “C:\Program Files\MongoDB\Server\7.1\bin\mongod.cfg” — install — serviceName “MongoDB7.1”
“C:\Program Files\MongoDB\Server\7.2\bin\mongod.exe” — config “C:\Program Files\MongoDB\Server\7.2\bin\mongod.cfg” — install — serviceName “MongoDB7.2”
`
Then, register the services with:
`
sc.exe create “MongoDB7.1” binPath= “\”C:\Program Files\MongoDB\Server\7.1\bin\mongod.exe\” — service — config=\”C:\Program Files\MongoDB\Server\7.1\bin\mongod.cfg\”” DisplayName= “MongoDB 7.1” start= auto
sc.exe create “MongoDB7.2” binPath= “\”C:\Program Files\MongoDB\Server\7.2\bin\mongod.exe\” — service — config=\”C:\Program Files\MongoDB\Server\7.2\bin\mongod.cfg\”” DisplayName= “MongoDB 7.2” start= auto
`
Finally, start the services:
`
net start MongoDB7.1
net start MongoDB7.2
`
Note: Running MongoDB as a Windows service may present some challenges; evaluate this option based on your project needs.
Conclusion
Both methods enable you to run a MongoDB replica set locally for testing and development:
Docker Desktop: Provides an isolated, containerized environment that closely mirrors cloud deployments. It’s quick to set up and perfect for multi-node configurations without polluting your host system.
Native Windows Setup: Offers a more traditional approach, especially when containerization is not an option. This method uses configuration files, command-line instructions, and optional Windows service installation.
By understanding and leveraging these approaches, you can develop and test applications that depend on MongoDB’s replica set features with confidence.
Happy coding!
Top comments (0)