当前位置:Gxlcms > 数据库问题 > MongoDB 基础(八)复制Ⅱ—部署仲裁节点

MongoDB 基础(八)复制Ⅱ—部署仲裁节点

时间:2021-07-01 10:21:17 帮助过:4人阅读

仲裁者(Arbiter)是复制集中的一个mongodb实例,它并不保存数据。仲裁节点使用最小的资源并且不要求的硬件设备,不能将Arbiter部署在用一个数据集节点中,可以部署在其他应用服务器或者监视服务器中,也可部署在单独的虚拟机中。为了确保复制集中有奇数的投票成员(包括primary),需要添加仲裁节点做为投票,否则primary不能运行时不会自动切换primary。


一个复制集中可设置50个成员,但只有7个投票成员(包括primary),其余为非投票成员(Non-Voting Members)。非投票成员是复制集中数据的备份副本,不参与投票,但可以被投票或称为主节点。


结构如下:

技术分享


上一篇中:http://blog.csdn.net/kk185800961/article/details/45700485

配置了3个节点:

192.168.1.11:27017(primary)
192.168.1.12:27018(secondary)
192.168.1.13:27019(secondary)


当前节点情况:

  1. rs0:SECONDARY> db.isMaster()
  2. {
  3. "setName" : "rs0",
  4. "setVersion" : 12,
  5. "ismaster" : false,
  6. "secondary" : true,
  7. "hosts" : [
  8. "mongodb11.kk.net:27017",
  9. "mongodb12.kk.net:27018",
  10. "mongodb13.kk.net:27019"
  11. ],
  12. "primary" : "mongodb13.kk.net:27019",
  13. "me" : "mongodb11.kk.net:27017",
  14. "maxBsonObjectSize" : 16777216,
  15. "maxMessageSizeBytes" : 48000000,
  16. "maxWriteBatchSize" : 1000,
  17. "localTime" : ISODate("2015-05-17T10:10:02.537Z"),
  18. "maxWireVersion" : 3,
  19. "minWireVersion" : 0,
  20. "ok" : 1
  21. }

现在在primary中把节点"mongodb13.kk.net:27019" 移除:

  1. rs0:PRIMARY> rs.remove("mongodb13.kk.net:27019")
  2. rs0:PRIMARY> rs.conf()
  1. [root@mongodb13 ~]# vi /etc/mongod.conf
  2. #replSet=rs0
  3. [root@mongodb13 ~]# service mongod restart


删除后剩余2个节点如下:

192.168.1.11:27017(primary)
192.168.1.12:27018(secondary)


在192.168.1.11:27017(primary)中删除服务进程,primary并没有切换:

  1. [root@redhat11 ~]# ps -ef | grep mong
  2. mongod 4592 1 0 20:00 ? 00:00:02 /usr/bin/mongod -f /etc/mongod.conf
  3. root 4648 2580 0 20:00 pts/0 00:00:00 mongo mongodb11.kk.net:27017
  4. root 4738 2618 0 20:06 pts/1 00:00:00 grep mong
  5. [root@redhat11 ~]#
  6. [root@redhat11 ~]# kill 4592

在192.168.1.12:27018(secondary)查看结果为:

  1. rs0:SECONDARY> rs.status()
  2. {
  3. "set" : "rs0",
  4. "date" : ISODate("2015-05-17T12:02:55.595Z"),
  5. "myState" : 2,
  6. "members" : [
  7. {
  8. "_id" : 0,
  9. "name" : "mongodb11.kk.net:27017",
  10. "health" : 0,
  11. "state" : 8,
  12. "stateStr" : "(not reachable/healthy)",
  13. "uptime" : 0,
  14. "optime" : Timestamp(0, 0),
  15. "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
  16. "lastHeartbeat" : ISODate("2015-05-17T12:02:53.655Z"),
  17. "lastHeartbeatRecv" : ISODate("2015-05-17T12:02:28.462Z"),
  18. "pingMs" : 0,
  19. "lastHeartbeatMessage" : "Failed attempt to connect to mongodb11.kk.net:27017; couldn't connect to server mongodb11.kk.net:27017 (192.168.1.11), connection attempt failed",
  20. "configVersion" : -1
  21. },
  22. {
  23. "_id" : 1,
  24. "name" : "mongodb12.kk.net:27018",
  25. "health" : 1,
  26. "state" : 2,
  27. "stateStr" : "SECONDARY",
  28. "uptime" : 726,
  29. "optime" : Timestamp(1431860765, 1),
  30. "optimeDate" : ISODate("2015-05-17T11:06:05Z"),
  31. "infoMessage" : "could not find member to sync from",
  32. "configVersion" : 13,
  33. "self" : true
  34. }
  35. ],
  36. "ok" : 1
  37. }

启动192.168.1.11:27017(primary)mongod服务后,发现才自动切换:

192.168.1.11:27017(secondary)
192.168.1.12:27018(primary)


方便测试,将primary改回原来:

192.168.1.11:27017(primary)
192.168.1.12:27018(secondary)


现在将添加一个仲裁节点:192.168.1.13:27019


创建数据文件目录:

[root@mongodb13 ~]# mkdir /var/lib/mongo/arbiter
[root@mongodb13 ~]# chown mongod:mongod /var/lib/mongo/arbiter


配置参数文件:

[root@mongodb13 ~]# vi /etc/mongod.conf

  1. pidfilepath=/var/run/mongodb/mongod.pid
  2. logpath=/var/log/mongodb/mongod.log
  3. bind_ip=192.168.1.13
  4. dbpath=/var/lib/mongo/arbiter
  5. port=27019
  6. logappend=false
  7. fork=true
  8. replSet=rs0


接着重启服务:
[root@mongodb13 ~]# service mongod restart


在192.168.1.11:27017(primary)中添加仲裁节点并查看结果:

  1. rs0:PRIMARY> rs.addArb("mongodb13.kk.net:27019")
  2. rs0:PRIMARY>
  3. rs0:PRIMARY> db.isMaster()
  4. {
  5. "setName" : "rs0",
  6. "setVersion" : 16,
  7. "ismaster" : true,
  8. "secondary" : false,
  9. "hosts" : [
  10. "mongodb11.kk.net:27017",
  11. "mongodb12.kk.net:27018"
  12. ],
  13. "arbiters" : [
  14. "mongodb13.kk.net:27019"
  15. ],
  16. "primary" : "mongodb11.kk.net:27017",
  17. "me" : "mongodb11.kk.net:27017",
  18. "electionId" : ObjectId("555884dc41ecb76a9ab03676"),
  19. "maxBsonObjectSize" : 16777216,
  20. "maxMessageSizeBytes" : 48000000,
  21. "maxWriteBatchSize" : 1000,
  22. "localTime" : ISODate("2015-05-17T12:31:34.720Z"),
  23. "maxWireVersion" : 3,
  24. "minWireVersion" : 0,
  25. "ok" : 1
  26. }
  27. rs0:PRIMARY>

至此,添加完成!~


再次测试,在192.168.1.11:27017(primary)中删除服务进程:

  1. [root@redhat11 ~]# ps -ef | grep mong
  2. mongod 4771 1 0 20:08 ? 00:00:09 /usr/bin/mongod -f /etc/mongod.conf
  3. root 4827 2580 0 20:08 pts/0 00:00:00 mongo mongodb11.kk.net:27017
  4. root 5255 2618 0 20:33 pts/1 00:00:00 grep mong
  5. [root@redhat11 ~]# kill 4771


到192.168.1.12:27018(secondary)查看,primary切换为192.168.1.12 

  1. rs0:SECONDARY> db.isMaster()
  2. {
  3. "setName" : "rs0",
  4. "setVersion" : 16,
  5. "ismaster" : true,
  6. "secondary" : false,
  7. "hosts" : [
  8. "mongodb11.kk.net:27017",
  9. "mongodb12.kk.net:27018"
  10. ],
  11. "arbiters" : [
  12. "mongodb13.kk.net:27019"
  13. ],
  14. "primary" : "mongodb12.kk.net:27018",
  15. "me" : "mongodb12.kk.net:27018",
  16. "electionId" : ObjectId("555889751e2e989b81963adc"),
  17. "maxBsonObjectSize" : 16777216,
  18. "maxMessageSizeBytes" : 48000000,
  19. "maxWriteBatchSize" : 1000,
  20. "localTime" : ISODate("2015-05-17T12:32:08.745Z"),
  21. "maxWireVersion" : 3,
  22. "minWireVersion" : 0,
  23. "ok" : 1
  24. }
  25. rs0:PRIMARY>

primary能正常启动切换了!~


现在看看arbiter,连接到192.168.1.13:27019。

[root@mongodb13 ~]# mongo 192.168.1.13:27019

  1. rs0:ARBITER>
  2. rs0:ARBITER> rs.slaveOk();
  3. rs0:ARBITER> db.isMaster()

arbiter 最为仲裁者,没有数据副本存储在本地,能读取复制集的信息。 




参考:

Replication Introduction

Replica Set Elections

Replica Sets with Four or More Members

Add an Arbiter to Replica Set



MongoDB 基础(八)复制Ⅱ—部署仲裁节点

标签:

人气教程排行