介绍:通过单个服务器部署的伪集群,采用不同的端口号模拟正式环境的多个节点,借助docker-compose快速搭建环境。
一. 三节点副本集(一主一从一仲裁)
172.16.7.108:27018 主节点
172.16.7.108:27019 从节点
172.16.7.108:27020 仲裁节点
二. 搭建流程
- 生成mongodb.key
openssl rand -base64 756 -out mongodb.key
- 编写docker-compose.yml
version: '3.1'
services:
mongodb-primary:
image: mongo:5.0
restart: always
container_name: mongodb-primary
privileged: true #开启权限
volumes:
- ./data/primary/db:/data/db
- ./data/primary/configdb:/data/configdb
- ./mongodb.key:/data/mongodb.key
ports:
- 27018:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
command: mongod --replSet mongos --keyFile /data/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /data/mongodb.key
chown 999:999 /data/mongodb.key
exec docker-entrypoint.sh $$@
mongodb-secondary:
image: mongo:5.0
restart: always
container_name: mongodb-secondary
privileged: true #开启权限
volumes:
- ./data/secondary/db:/data/db
- ./data/secondary/configdb:/data/configdb
- ./mongodb.key:/data/mongodb.key
ports:
- 27019:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
command: mongod --replSet mongos --keyFile /data/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /data/mongodb.key
chown 999:999 /data/mongodb.key
exec docker-entrypoint.sh $$@
mongodb-arbiter:
image: mongo:5.0
restart: always
container_name: mongodb-arbiter
privileged: true
volumes:
- ./data/arbiter/db:/data/db
- ./data/arbiter/configdb:/data/configdb
- ./mongodb.key:/data/mongodb.key
ports:
- 27020:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
command: mongod --replSet mongos --keyFile /data/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /data/mongodb.key
chown 999:999 /data/mongodb.key
exec docker-entrypoint.sh $$@
- 修改容器配置
启动并进入容器:docker exec -it mongodb-primary /bin/bash
(1)初始化mongo集群
mongo -u root -p 123456
rs.initiate({_id:"mongos",members:[{_id:0,host:"172.16.7.108:27018"},{_id:1,host:"172.16.7.108:27019"},{_id:2,host:"172.16.7.108:27020",arbiterOnly:true}]})
(2)开启备机可读
rs.secondaryOk()
(3)增加mongodb-primary权重
config = rs.conf()
config.members[0].priority=2
(4)配置生效
rs.reconfig(config)
(5)查看配置
rs.conf()
(6)退出容器
三. 测试
使用Studio 3T 连接集群
查看节点情况