mongodb docker-compose 搭建主从 3 个节点
1 生成keyFile
1 command执行命令时需要指定 --keyFile跟 --replSet两个属性。
keyFile是为了添加复制集时的验证处理,拥有同样的keyFile文件的节点才可以被添加到复制集中。
2 生成keyFile:
openssl rand -base64 756 > keyfile
chmod 400 keyfile
权限设置为400就可以,设置太大了会出现permission too open错误。
还有另外值的注意的是该keyfile文件的所属用户不正确会出现:bad file错误。解决:
sudo chown 999 keyfile
其他:
keyfile文件中至少需要有6个字符,里面的内容可以是任意的。如果keyfile文件中只有一个key,则直接写一个字符串就可以,如:
123456
如果有多个需要用单引号括起来或者使用破折号:
‘123456’
‘asdfgh’
-123456
-asdfgh
2 启动 3 个 mongodb容器
docker-compose 配置文件:
mongo1
version: '3.5'
services:
mongo1:
container_name: mongo1
image: mongo:5.0.3-focal
restart: always
ports:
- '8001:27017'
environment:
TZ: Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: aaa
MONGO_INITDB_ROOT_PASSWORD: 123456aaa78
volumes:
- ./mongo1:/data/db
# filekey文件映射
- /home/ubuntu/wl_project/apt_app_service/deploy/go_run/mongo_key_file:/data/mongo_key_file
command: mongod --keyFile /data/mongo_key_file/keyfile --replSet rs
mongo2
version: '3.5'
services:
mongo2:
container_name: mongo2
image: mongo:5.0.3-focal
restart: always
ports:
- '8002:27017'
environment:
TZ: Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 12345678
volumes:
- ./mongo2:/data/db
- /home/ubuntu/wl_project/apt_app_service/deploy/go_run/mongo_key_file:/data/mongo_key_file
command: mongod --keyFile /data/mongo_key_file/keyfile --replSet rs
mongo3
version: '3.5'
services:
mongo3:
container_name: mongo3
image: mongo:5.0.3-focal
restart: always
ports:
- '8003:27017'
environment:
TZ: Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 12345678
volumes:
- ./mongo3:/data/db
- /home/ubuntu/wl_project/apt_app_service/deploy/go_run/mongo_key_file:/data/mongo_key_file
command: mongod --keyFile /data/mongo_key_file/keyfile --replSet rs
3 初始化集群
# 进入其中一个容器:
docker exec -it 容器名称 bash
# 登陆mongodb
mongo -u root
# 创建集群 rs
rs.initiate({_id:'rs',members:[{_id:0,host:'172.31.3.1:8001'},{_id:1,host:'172.31.3.1:8002'},{_id:2,host:'172.31.3.1:8003'}]})
出现的问题
1 初始化集群:no replset config has been received
解决:replSet 与初始化命令中的集群id不一致,注意:重启 docker-compose 好像并不能更新修改后的docker-compose 文件,应该先down,再start
2 指定 mongodb 账号,密码,必须有 keyfile文件。
3 从节点执行命令,发现报错:
uncaught exception: Error: listDatabases failed:{
解决:
限制执行命令:
临时生效:rs.secondaryOk()
永久生效:echo 'rs.secondaryOk()' > /root/.mongorc.js
参考链接:https://www.modb.pro/db/230190
参考链接:https://blog.csdn.net/a765717/article/details/120000965
参考链接:https://blog.csdn.net/qq_36949713/article/details/107066236