mongodb单节点改副本集模式
前一阵将三节点的副本集改成了单节点,但后面业务代码出现问题:无法使用事务,因为事务只有在副本集上能用,单节点无法使用,故需要改回副本集模式,而我目前仅有一台服务器,所以考虑在一台服务器上通过容器部署三节点副本集
version: "3.8"
services:mongo1:image: mongo:5.0.31container_name: mongo1ports:- 27017:27017volumes:- mongo2:/data/db # 复用你原来的数据command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]mongo2:image: mongo:5.0.31container_name: mongo2ports:- 27018:27017volumes:- mongo2_data2:/data/dbcommand: ["mongod", "--replSet", "rs0", "--bind_ip_all"]mongo3:image: mongo:5.0.31container_name: mongo3ports:- 27019:27017volumes:- mongo2_data3:/data/dbcommand: ["mongod", "--replSet", "rs0", "--bind_ip_all"]volumes:mongo2: # 原来的数据卷mongo2_data2:mongo2_data3:
这里需要注意,docker volume mongo2是保存有数据的volume,所以你需要把它指定为主节点
>>> docker exec -it mongo1 mongosh
cfg = {_id: "rs0",members: [{ _id: 0, host: "10.6.212.87:27017", priority: 2 },{ _id: 1, host: "10.6.212.87:27018", priority: 1 },{ _id: 2, host: "10.6.212.87:27019", priority: 0 }]
}
rs.reconfig(cfg, { force: true })
还有就是启动mongo时,如果加上“–auth”参数,会报如下错误
Attaching to mongo1, mongo2, mongo3
mongo2 | BadValue: security.keyFile is required when authorization is enabled with replica sets
mongo2 | try 'mongod --help' for more information
mongo1 | BadValue: security.keyFile is required when authorization is enabled with replica sets
mongo1 | try 'mongod --help' for more information
mongo3 | BadValue: security.keyFile is required when authorization is enabled with replica sets
mongo3 | try 'mongod --help' for more information
mongo2 exited with code 2
mongo1 exited with code 2
mongo3 exited with code 2
解决起来有一些麻烦,所以我就干脆把–auth参数去掉了,但会存在安全风险。
还要注意,mongodb比较吃内存,所以在单服务器上要注意内存,不然会被docker停掉。