Skip to content

Instantly share code, notes, and snippets.

@dhavaln
Last active January 27, 2023 04:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dhavaln/dac743e1fe6bca0b72d541f153a71d60 to your computer and use it in GitHub Desktop.
Save dhavaln/dac743e1fe6bca0b72d541f153a71d60 to your computer and use it in GitHub Desktop.
MongoDB Replicaset Compose

Deploy Containers

Prepare the data directory:

sudo mkdir -p -m 777 mongo/primary
sudo chown -R 1001 mongo 
docker-compose up -d

Add this lines to /etc/hosts:

127.0.0.1 mongodb-primary
127.0.0.1 mongodb-secondary-1
127.0.0.1 mongodb-secondary-2

Connection String for Database Access

mongodb://root:password123@localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0

Log into Primary container

docker exec -it mongodb-primary mongosh

Replicaset Status/Config Check

Log into primary container

$ use admin
$ db.auth("root", "password123")
$ rs.status()
$ rs.conf()

Update Replicaset Configuration

Log into primary container

$ use admin
$ db.auth("root", "password123")

Change priority value of Primary instance to 5

$ cfg = rs.conf()
$ cfg.members[0].priority = 5
$ rs.reconfig(cfg)
version: "2"
services:
mongodb-primary:
# For linux
image: "bitnami/mongodb:6.0"
# For Mac M1
# image: "ghcr.io/zcube/bitnami-compat/mongodb:6.0.4"
container_name: mongodb-primary
hostname: mongodb-primary
networks:
default:
expose:
- 27017
ports:
- 27017:27017
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-primary
- MONGODB_REPLICA_SET_MODE=primary
- MONGODB_ROOT_PASSWORD=password123
- MONGODB_REPLICA_SET_NAME=rs0
- MONGODB_REPLICA_SET_KEY=replicasetkey123
- BITNAMI_DEBUG=true
volumes:
- "./mongo/primary:/bitnami"
mongodb-secondary-1:
# For linux
image: "bitnami/mongodb:6.0"
# For Mac M1
# image: "ghcr.io/zcube/bitnami-compat/mongodb:6.0.4"
container_name: mongodb-secondary-1
hostname: mongodb-secondary-1
depends_on:
- mongodb-primary
networks:
default:
expose:
- 27018
ports:
- 27018:27017
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-secondary-1
- MONGODB_REPLICA_SET_MODE=secondary
- MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
- MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017
- MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123
- MONGODB_REPLICA_SET_NAME=rs0
- MONGODB_REPLICA_SET_KEY=replicasetkey123
mongodb-secondary-2:
# For linux
image: "bitnami/mongodb:6.0"
# For Mac M1
# image: "ghcr.io/zcube/bitnami-compat/mongodb:6.0.4"
container_name: mongodb-secondary-2
hostname: mongodb-secondary-2
depends_on:
- mongodb-primary
networks:
default:
expose:
- 27019
ports:
- 27019:27017
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-secondary-2
- MONGODB_REPLICA_SET_MODE=secondary
- MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
- MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017
- MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123
- MONGODB_REPLICA_SET_NAME=rs0
- MONGODB_REPLICA_SET_KEY=replicasetkey123
# mongodb-arbiter:
# # For linux
# image: "bitnami/mongodb:6.0"
# # For Mac M1
# # image: "ghcr.io/zcube/bitnami-compat/mongodb:6.0.4"
# container_name: mongodb-arbiter
# hostname: mongodb-arbiter
# depends_on:
# - mongodb-primary
# networks:
# default:
# expose:
# - 27020
# ports:
# - 27020:27017
# environment:
# - MONGODB_ADVERTISED_HOSTNAME=mongodb-arbiter
# - MONGODB_REPLICA_SET_MODE=arbiter
# - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
# - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017
# - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123
# - MONGODB_REPLICA_SET_NAME=rs0
# - MONGODB_REPLICA_SET_KEY=replicasetkey123
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment