目录
使用Docker部署MongoDB副本集
mongodb从4.0开始支持事务,最近在使用mongodb的过程中,发现在单节点状态下,无法支持事务,只有配置了副本集才支持事务,故留下搭建MongoDB单机三节点副本集的记录。
1. 创建目录
mkdir -p /apps/mongo-rs/{data01,data02,data03,key,backup}
2. 创建密钥
cd /apps/mongo-rs
openssl rand -base64 756 > key/mongo-rs.key
chmod 400 key/mongo-rs.key
chown polkitd:input key/mongo-rs.key
3. 创建mongodb三节点
docker run --name mongo-rs01 -p 30010:27017 -v /apps/mongo-rs/data01:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all
docker run --name mongo-rs02 -p 30011:27017 -v /apps/mongo-rs/data02:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all
docker run --name mongo-rs03 -p 30012:27017 -v /apps/mongo-rs/data03:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all
创建了三个mongodb节点,并指定使用相同密钥文件
4. 配置副本集
docker exec -it mongo-rs01 bash
mongo
use admin
db.auth("admin","PWD2020")
var config={
_id:"mongo-rs",
members:[
{_id:0,host:"192.168.1.201:30010"},
{_id:1,host:"192.168.1.201:30011"},
{_id:2,host:"192.168.1.201:30012",arbiterOnly:true}
]};
rs.initiate(config)
rs.status()
arbiterOnly:true 表示该节点为仲裁节点,只负责投票,不负责存储数据
执行rs.initiate()方法,初始化副本集,同时执行该方法的节点为主节点
rs.status()可查看副本集节点状态
5. 验证数据同步
在主节点插入数据
use test
db.test.insert({name:"mongo rs test"})
在从节点查询数据
docker exec -it mongo-rs02 bash
mongo
use admin
db.auth("admin","PWD2020")
db.getMongo().setSlaveOk()
use test
db.test.find()
以上完成副本集的搭建
6. 附:其它操作
6.1 备份数据
docker exec -it mongo-rs01 bash
mongodump -d test-u admin -p PWD2020 --authenticationDatabase=admin -o /data/backup
6.2 恢复数据
docker exec -it mongo-rs01 bash
mongorestore -d test -u admin -p PWD2020 --authenticationDatabase=admin --dir /data/backup/test
6.3 创建用户
docker exec -it mongo-rs01 bash
mongo
use admin
db.auth("admin","PWD2020");
use test
db.createUser({ user: 'test', pwd: 'test2020', roles: [ { role: "readWrite", db: "test" } ] });