部署 mongodb replica set
1. 环境
- mongodb 6.0
- docker
2. 步骤
- 创建用于副本集认证的keyfile
# 创建文件
openssl rand -base64 756 > mongodb.key
# 修改文件权限
chown 999:999 mongodb.key
chmod 400 mongodb.key
- 创建mongodb配置文件
replication:
replSetName: rs0
security:
# 先禁用认证
# authorization: enabled
keyFile: /etc/mongodb.key
net:
bindIpAll: true
# 修改文件权限
chown 999:999 mongodb.conf
chmod 400 mongodb.conf
- 部署mongodb
由于只是测试所以不映射数据库文件
docker run -d --name rs01 -p 17017:27017 -v $(pwd)/mongodb.conf:/etc/mongodb.conf -v $(pwd)/mongodb.key:/etc/mongodb.key mongo:6.0.3 --config /etc/mongodb.conf
docker run -d --name rs02 -p 27017:27017 -v $(pwd)/mongodb.conf:/etc/mongodb.conf -v $(pwd)/mongodb.key:/etc/mongodb.key mongo:6.0.3 --config /etc/mongodb.conf
docker run -d --name rs03 -p 37017:27017 -v $(pwd)/mongodb.conf:/etc/mongodb.conf -v $(pwd)/mongodb.key:/etc/mongodb.key mongo:6.0.3 --config /etc/mongodb.conf
- 初始化副本集
# 进入容器
docker exec -it rs01 /bin/bash
# 连接mongo
mongosh
# 使用admin
use admin
# 初始化集群,host建议用域名,而非ip。
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "www.whyfate.com:17017" },
{ _id: 1, host: "www.whyfate.com:27017" },
{ _id: 2, host: "www.whyfate.com:37017" }
]
})
# 创建管理员
db.createUser(
{
user: "whyfate",
pwd: passwordPrompt(),
roles: [ { role: "root", db: "admin" } ]
}
)
这里偷懒用了root用户,正式环境参考mongodb角色大全。
5. 修改配置文件,启用认证,重启程序。
6. 连接字符串
mongodb://whyfate:123456@www.whyfate.com:17017,www.whyfate.com:27017,www.whyfate.com:37017/test?replicaSet=rs0&authSource=admin