Recently, I came across a problem with mongodb replica set where I was not able to connect to replicaSet using the replicaSet url. Probably many of you have already overcome this problem. But for some reason, I could not find a solution that exactly worked for me. In the process, I managed to find a solution that worked for me. Documenting here if it helps anyone else. I was using docker to setup the cluster. The steps to setup a mongodb replicaSet are quite straight forward
- Setup 3 mongo servers. (primary, secondary and the arbiter). In this docker setup, 3 containers are running an instance of mongo server each.
version: "3.8"
services:
mongo-1-2:
container_name: "mongo-1-2"
image: mongo:5.0
ports:
- "27022:27022"
command: mongod --replSet rs1 --port 27022 --bind_ip_all
restart: always
networks:
- mongors-network
mongo-1-3:
container_name: "mongo-1-3"
image: mongo:5.0
ports:
- "27023:27023"
command: mongod --replSet rs1 --port 27023 --bind_ip_all
restart: always
networks:
- mongors-network
mongo-1-1:
container_name: "mongo-1-1"
image: mongo:5.0
ports:
- "27021:27021"
command: mongod --replSet rs1 --port 27021 --bind_ip_all
links:
- mongo-1-2:mongo-1-2
- mongo-1-3:mongo-1-3
restart: always
networks:
- mongors-network
mongo-rs1-setup:
container_name: "mongo-rs1-setup"
image: mongo:5.0
depends_on:
- "mongo-1-1"
- "mongo-1-2"
- "mongo-1-3"
links:
- mongo-1-1:mongo-1-1
- mongo-1-2:mongo-1-2
- mongo-1-3:mongo-1-3
volumes:
- ./scripts:/scripts
environment:
- MONGO1=mongo-1-1
- MONGO2=mongo-1-2
- MONGO3=mongo-1-3
- RS=rs1
entrypoint: ["/scripts/cluster-setup.sh"]
networks:
mongors-network:
driver: bridge
2. Run rs.initiate
with your replicaset config. I am running that through a bash script here. This script runs inside docker on the same mongo servers container network
#!/bin/bash
mongodb1=host.docker.internal
mongodb2=host.docker.internal
mongodb3=host.docker.internal
port1=27021
port2=27022
port3=27023
echo ${mongodb1}:${port1}
echo ${mongodb2}:${port2}
echo ${mongodb3}:${port3}
port=${PORT:-27017}
echo "Waiting for startup.."
until mongosh --host…