docker mongo 副本集配置(1)

1.生成证书

非docker环境 (当前目录在data)

 cd  /data/

mkdir core
cd core
//生成keyfile
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
mongod.conf中添加(注意json的格式)

1 security:
2    keyFile: "/data/core/mongodb-keyfile"
3 replication:
4    replSetName: rs

将mongodb-keyfile复制到其他mongo服务器
执行

chmod 600 mongodb-keyfile

如果是docker 还需要执行

chown 999 mongodb-keyfile

2.运行mongo  docker

docker run --name mongo -p 27017:27017 --restart=always -v /etc/localtime:/etc/localtime:ro -v /data/mongo:/data/db -v /data/core/mongodb-keyfile:/opt/mongodb-keyfile -d mongo:4.0.3 --smallfiles --keyFile=/opt/mongodb-keyfile --replSet "rs"
 
 --smallfiles 开启验证
 --keyFile 设置统一的key

3、登录mongoDB

1 执行命令如下
2 rs.initiate( {_id : "rs0",members: [{ _id: 0, host: "172.17.0.2:27017" },{ _id: 1, host: "172.17.0.3:27017" },{ _id: 2, host: "172.17.0.4:27017" }]})
3 可以使用 {_id:0,host:‘127.0.0.1:10002‘,priority:1} 指定主节点(多个节点 priority越高的 会成为主节点)4 _id:复制集的名称。必须与启动 mongod 的 --replSet 一致5 members:成员配置文件的列表。6 members[n]._id:用来识别成员的 id 不可以重复7 members[n].host:成员对应的 host:port 第四步中得到的ip

4、使用rs.status();查看集群状态

5、从库默认没有读写权限

需要进入从库的mongoDB执行rs.slaveOk();或者db.getMongo().setSlaveOk();
但是但是但是!!!
只有当次生效!只有当次生效!只有当次生效!
如果需要永久生效 可以依次执如下命令
find / -name .mongorc.js
vim /home/sea/.mongorc.js
添加内容
rs.slaveOk();

强制更换主节点办法
http://www.mongoing.com/docs/tutorial/force-member-to-be-primary.html

注:
在搭建过程中,遇到一个问题
当将两个从节点停掉之后 在主使用rs.stepDown(120)将现有主节点切换为从节点 导致主节点丢失,该情况下 可以将停掉的一个从节点重启,此时主节点会自动选出,一位复制集的规则是必须有两台可用的数据库,才能够自动选举主从节点。
另:本篇未涉及投票节点,感兴趣的可自行搜索相关文档即可
多讲一句:本篇为4.0.3版本,4.0版本以下的相关命令 可能会失效! //经测试,个人操作原因,需要在执行 rs.reconfig();时添加"protocolVersion" : 1    比如这样:rs.reconfig( {_id : "rs0", "protocolVersion" : 1, members: [{ _id: 0, host: "192.168.1.64:27017",priority:2 },{ _id: 1, host: "192.168.1.50:27017" },{ _id: 2, host: "192.168.1.51:27017" }]})  如果需要非主节点执行需要添加{ "force": true } 例如 rs.reconfig(cfg, { "force": true })
 

相关推荐