mongoDB 带有keyfile 认证的复制集添加仲裁

2019-09-27  本文已影响0人  tglmm

环境:

server port role
10.0.3.107 27017 m0 (PRIMARY)
10.0.3.107 28017 ma (SECONDARY)
10.0.3.109 27017 m1 (ARBITER)

已经配置的主从关系m0,m1并且带有密钥认证需要添加一个仲裁器,问题在于新建的仲裁器不会同步主节点数据,也就是不会同步已经创建的数据库认证信息
实现高可用性,如果条件允许,最好的方案是将仲裁器放到另外的网络环境,或者服务器中

docker run -d --restart=always -p 28017:27017 \
-v /home/tglmm/mongo-key-file:/mongo-key-file \
-v /data/db/ma:/data/db \
 --name ma  mongo:4.1.4 \
/bin/bash -c 'mongod --port 27017 --keyFile /mongo-key-file/keyfile --replSet rs0 --bind_ip 0.0.0.0'

进入当前主节点所在的mongo shell
docker exec -i 640ed49c16cd mongo \
--host 10.0.3.107 \
--username xxx --password 'xxx' \
--authenticationDatabase 'xxx' \
--port 27017
rs.add('10.0.3.107:28017')    //先将其添加为一个辅助节点,等待一段时间会进行数据的全量复制
rs.status()
    "members" : [
        {
            "_id" : 0,
            "name" : "10.0.3.107:28017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 4988,
            "optime" : {
                "ts" : Timestamp(1569575425, 1),
                "t" : NumberLong(2)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1569575425, 1),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2019-09-27T09:10:25Z"),
            "optimeDurableDate" : ISODate("2019-09-27T09:10:25Z"),
            "lastHeartbeat" : ISODate("2019-09-27T09:10:30.930Z"),
            "lastHeartbeatRecv" : ISODate("2019-09-27T09:10:31.248Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "10.0.3.107:27017",
            "syncSourceHost" : "10.0.3.107:27017",
            "syncSourceId" : 1,
            "infoMessage" : "",
            "configVersion" : 2
查看到起状态为 :SECONDARY,并从主节点同步数据库
等待一段时间基本同步完成
rs.remove('10.0.3.107:28017')
rs.status()   10.0.3.107:28017//查看已经被踢出
rs.addArb('10.0.3.107:28017')   //将其添加为复制集的仲裁节点
rs.conf()  //查看状态

待上面操作结束模拟主节点故障,查看辅助节点stateStr值

上一篇 下一篇

猜你喜欢

热点阅读