Mongodb的副本集部署

以下文档主要用于在单机上使用Docker-compose部署Mongodb副本集测试使用,

生产环境不建议使用单机部署副本集, 除了浪费机器资源外没有任何意义,但是如果用来练手还是可以的


实现有目标:

Mongodb容器清单:
mongo1: 本机IP地址:37017
mongo2: 本机IP地址:37027
mongo3: 本机IP地址:37037


准备配置文件
  1. Mongodb的主配置文件
    ​​​三台机器的配置是一样的、Mongodb的优化大家可以根据自己的需求进行配置​

systemLog: 
quiet: false
path: /data/logs/mongod.log
logRotate: "rename"
destination: file

processManagement:
fork: false
pidFilePath: "/data/logs/mongod.pid"
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 0.0.0.0
security:
keyFile: "/etc/mongodb/keyFile"
clusterAuthMode: keyFile
authorization: enabled
storage:
dbPath: /data
journal:
enabled: true
directoryPerDB: true
operationProfiling:
mode: slowOp
slowOpThresholdMs: 500
slowOpSampleRate: 1.0
replication:
replSetName: "RS1"

  1. docker-compose的YML 配置文件

version: "3" 
services:
mongo1:
container_name: mongo1
image: mongo
restart: always
ports:
- 37017:27017
volumes:
- ./mongodb-1/data:/data/db
- ./mongodb-1/logs:/data/logs
- ./mongodb-1/conf/:/etc/mongodb/
- ./mongodb-1/data/configdb:/data/configdb
- /etc/localtime:/etc/localtime
command: mongod --dbpath /data/db --config /etc/mongodb/mongodb.conf
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: Mongo2023Db

mongo2:
container_name: mongo2
image: mongo
restart: always
ports:
- 37027:27017
volumes:
- ./mongodb-2/conf/:/etc/mongodb/
- ./mongodb-2/logs:/data/logs
- ./mongodb-2/data/:/data/db
- ./mongodb-2/data/configdb:/data/configdb
- /etc/localtime:/etc/localtime
command: mongod --dbpath /data/db --config /etc/mongodb/mongodb.conf
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: Mongo2023Db

mongo3:
container_name: mongo3
image: mongo
restart: always
ports:
- 37037:27017
volumes:
- ./mongodb-3/conf/:/etc/mongodb/
- ./mongodb-3/data:/data/db
- ./mongodb-3/data/configdb:/data/configdb
- ./mongodb-3/logs:/data/logs
- /etc/localtime:/etc/localtime
command: mongod --dbpath /data/db --config /etc/mongodb/mongodb.conf
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: Mongo2023Db

部署流程
  1. 生成集群认证密钥

cd /opt/deploy/mongodb/
openssl rand -base64 756 > keyFile
chmod 400 keyFile

  1. 创建对应的文件夹并配置相应的权限
mkdir -pv mongodb-{1,2,3}/{conf,data}
chown 999 mongodb* #需要注意容器内的镜像使用的uid和gid是否为这个
cp keyFile mongodb-1/conf/
cp keyFile mongodb-2/conf/
cp keyFile mongodb-3/conf/
chmod 400 mongodb-{1,2,3}/conf/keyFile
  1. 启动docker-compose

# docker-compose up -d 
[+] Running 4/4
⠿ Network mongodb_default Created 0.0s
⠿ Container mongo1 Started 0.8s
⠿ Container mongo2 Started 0.8s
⠿ Container mongo3 Started 0.8s

# docker ps -a 可以查看启动是正常
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1499ecd7a347 mongo "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:37037->27017/tcp mongo3
4f28c8090c8b mongo "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:37027->27017/tcp mongo2
3964bf4ba09b mongo "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:37017->27017/tcp mongo1

  1. 进入mongodb机器并创建相应的集群和添加节点操作
mongo
use admin
db.auth('root','sfMongo2023Db')
rs.initiate({_id:"RS1", members: [{_id:0, host: "192.168.39.86:37017"}]})
rs.add(192.168.39.86:37027)
rs.add(192.168.39.86:37037)
  1. 测试是正常
rs.status()