MongoDB 副本集(2)

主节点操作

# 主节点操作 [root@fymongodb001 tmp]# mongo MongoDB shell version v4.0.8 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("77f60167-1d37-4796-bf2a-60cfdc4b0526") } MongoDB server version: 4.0.8 > use admin # 切换到 admin 数据库 switched to db admin # 初始化副本集,副本集名称为 fymongodb ,第一个成员为自己本身。 > rs.initiate({_id:'fymongodb',members: [{ _id: 0 , host: "fymongodb001:27017"}]}) { "ok" : 1 } fymongodb:SECONDARY> # 接着回车,直到显示这个节点为Primary主节点 fymongodb:PRIMARY> # 接着添加 次节点 fymongodb002 # 添加次节点 fymongodb:PRIMARY> rs.add('fymongodb002:27017') { "ok" : 1, "operationTime" : Timestamp(1555663440, 1), "$clusterTime" : { "clusterTime" : Timestamp(1555663440, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } # 添加仲裁节点 fymongodb:PRIMARY> rs.addArb("fymongodb003:27017") { "ok" : 1, "operationTime" : Timestamp(1555663631, 1), "$clusterTime" : { "clusterTime" : Timestamp(1555663631, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } # 查看当前配置 fymongodb:PRIMARY> rs.conf() { "_id" : "fymongodb", "version" : 3, "protocolVersion" : NumberLong(1), "writeConcernMajorityJournalDefault" : true, "members" : [ { "_id" : 0, "host" : "fymongodb001:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "fymongodb002:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "fymongodb003:27017", "arbiterOnly" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "catchUpTakeoverDelayMillis" : 30000, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("5cb98534cd9d16ff3f4fffdc") } } # rs.status() 查看各个节点的身份

当我们完成上面的操作的时,我们主节点更改的数据已经是会自动同步到次节点的。

次节点操作

fymongodb002次节点(Secondary)设置允许读写操作。

[root@fymongodb002 ~]# mongo MongoDB shell version v4.0.8 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("f353edd5-d79a-4947-9844-7f9bde98a949") } MongoDB server version: 4.0.8 fymongodb:SECONDARY> fymongodb:SECONDARY> show dbs; # 我们发现无法读写 2019-04-19T17:04:40.852+0800 E QUERY [js] Error: listDatabases failed:{ "operationTime" : Timestamp(1555664675, 1), "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435, "codeName" : "NotMasterNoSlaveOk", "$clusterTime" : { "clusterTime" : Timestamp(1555664675, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } : fymongodb:SECONDARY> rs.slaveOk() # 允许 次节点 进行读取 fymongodb:SECONDARY> show dbs; # 我们就可以查看到次节点的数据了。 admin 0.000GB config 0.000GB djx 0.000GB local 0.000GB fymongodb:SECONDARY> use djx; switched to db djx fymongodb:SECONDARY> show collections; # 从主节点同步过来的数据。 djx lsp 数据同步测试

测试数据的同步,我们在主节点创建一个集合test 并添加一条数据 'age':38 ,我们可以看到次节点也同步了该数据。

MongoDB 副本集

故障模拟测试

测试一

模拟主节点 fymongodb001 宕机了,然后查看次节点 fymongodb002 是否会被选举成为主节点。

MongoDB 副本集

我们可以看到 fymongodb002 选举为主节点.

测试二

当 fymongodb002 选举为主节点后,fymongodb001 恢复了,fymongodb001 会作为次节点加入。

MongoDB 副本集

测试三

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5b57ab8d4f4723c3236b77c4f930147a.html