资讯专栏INFORMATION COLUMN

UCloud MongoDB副本集手动切换主节点技巧

star.gao / 1748人阅读

1、需求与现有副本集情况介绍

背景:业务侧针对MongoDB副本集的一个Secondary节点B进行了改配操作,由于改配后的B节点,配置高,性能好,业务想以最短的时间,最小的代价把B节点提升为Primary主节点。

现有MongoDB 5节点副本集集群采用UCloud云数据库,节点信息如下:即节点A:192.168.0.182 Primary节点;B:192.168.0.240 Secondary节点;C:192.168.0.217 Secondary节点;D:192.168.0.60;E:192.168.0.145 arbiter节点。

2-22100113511Y94.png

2、配置调整

(1)查看当前副本集角色

</>复制代码

  1. udb-a0r3omr444m:PRIMARYrs.status()
  2. {
  3. "set" : "udb-a0r3omr444m",
  4. "date" : ISODate("2022-10-01T05:53:11.213Z"),
  5. "myState" : 1,
  6. "term" : NumberLong(1),
  7. "syncingTo" : "",
  8. "syncSourceHost" : "",
  9. "syncSourceId" : -1,
  10. "heartbeatIntervalMillis" : NumberLong(2000),
  11. "optimes" : {
  12. "lastCommittedOpTime" : {
  13. "ts" : Timestamp(16646035831),
  14. "t" : NumberLong(1)
  15. },
  16. "readConcernMajorityOpTime" : {
  17. "ts" : Timestamp(16646035831),
  18. "t" : NumberLong(1)
  19. },
  20. "appliedOpTime" : {
  21. "ts" : Timestamp(16646035831),
  22. "t" : NumberLong(1)
  23. },
  24. "durableOpTime" : {
  25. "ts" : Timestamp(16646035831),
  26. "t" : NumberLong(1)
  27. }
  28. },
  29. "lastStableCheckpointTimestamp" : Timestamp(16646035431),
  30. "members" : [
  31. {
  32. "_id" : 0,
  33. "name" : "192.168.0.182:27017",
  34. "health" : 1,
  35. "state" : 1,
  36. "stateStr" : "PRIMARY",
  37. "uptime" : 786,
  38. "optime" : {
  39. "ts" : Timestamp(16646035831),
  40. "t" : NumberLong(1)
  41. },
  42. "optimeDate" : ISODate("2022-10-01T05:53:03Z"),
  43. "syncingTo" : "",
  44. "syncSourceHost" : "",
  45. "syncSourceId" : -1,
  46. "infoMessage" : "",
  47. "electionTime" : Timestamp(16646028212),
  48. "electionDate" : ISODate("2022-10-01T05:40:21Z"),
  49. "configVersion" : 5,
  50. "self" : true,
  51. "lastHeartbeatMessage" : ""
  52. },
  53. {
  54. "_id" : 1,
  55. "name" : "192.168.0.240:27017",
  56. "health" : 1,
  57. "state" : 2,
  58. "stateStr" : "SECONDARY",
  59. "uptime" : 729,
  60. "optime" : {
  61. "ts" : Timestamp(16646035831),
  62. "t" : NumberLong(1)
  63. },
  64. "optimeDurable" : {
  65. "ts" : Timestamp(16646035831),
  66. "t" : NumberLong(1)
  67. },
  68. "optimeDate" : ISODate("2022-10-01T05:53:03Z"),
  69. "optimeDurableDate" : ISODate("2022-10-01T05:53:03Z"),
  70. "lastHeartbeat" : ISODate("2022-10-01T05:53:09.400Z"),
  71. "lastHeartbeatRecv" : ISODate("2022-10-01T05:53:09.907Z"),
  72. "pingMs" : NumberLong(0),
  73. "lastHeartbeatMessage" : "",
  74. "syncingTo" : "192.168.0.182:27017",
  75. "syncSourceHost" : "192.168.0.182:27017",
  76. "syncSourceId" : 0,
  77. "infoMessage" : "",
  78. "configVersion" : 5
  79. },
  80. {
  81. "_id" : 2,
  82. "name" : "192.168.0.145:27017",
  83. "health" : 1,
  84. "state" : 7,
  85. "stateStr" : "ARBITER",
  86. "uptime" : 724,
  87. "lastHeartbeat" : ISODate("2022-10-01T05:53:09.384Z"),
  88. "lastHeartbeatRecv" : ISODate("2022-10-01T05:53:09.410Z"),
  89. "pingMs" : NumberLong(0),
  90. "lastHeartbeatMessage" : "",
  91. "syncingTo" : "",
  92. "syncSourceHost" : "",
  93. "syncSourceId" : -1,
  94. "infoMessage" : "",
  95. "configVersion" : 5
  96. },
  97. {
  98. "_id" : 3,
  99. "name" : "192.168.0.217:27017",
  100. "health" : 1,
  101. "state" : 2,
  102. "stateStr" : "SECONDARY",
  103. "uptime" : 686,
  104. "optime" : {
  105. "ts" : Timestamp(16646035831),
  106. "t" : NumberLong(1)
  107. },
  108. "optimeDurable" : {
  109. "ts" : Timestamp(16646035831),
  110. "t" : NumberLong(1)
  111. },
  112. "optimeDate" : ISODate("2022-10-01T05:53:03Z"),
  113. "optimeDurableDate" : ISODate("2022-10-01T05:53:03Z"),
  114. "lastHeartbeat" : ISODate("2022-10-01T05:53:09.379Z"),
  115. "lastHeartbeatRecv" : ISODate("2022-10-01T05:53:09.910Z"),
  116. "pingMs" : NumberLong(0),
  117. "lastHeartbeatMessage" : "",
  118. "syncingTo" : "192.168.0.182:27017",
  119. "syncSourceHost" : "192.168.0.182:27017",
  120. "syncSourceId" : 0,
  121. "infoMessage" : "",
  122. "configVersion" : 5
  123. },
  124. {
  125. "_id" : 4,
  126. "name" : "192.168.0.60:27017",
  127. "health" : 1,
  128. "state" : 2,
  129. "stateStr" : "SECONDARY",
  130. "uptime" : 685,
  131. "optime" : {
  132. "ts" : Timestamp(16646035831),
  133. "t" : NumberLong(1)
  134. },
  135. "optimeDurable" : {
  136. "ts" : Timestamp(16646035831),
  137. "t" : NumberLong(1)
  138. },
  139. "optimeDate" : ISODate("2022-10-01T05:53:03Z"),
  140. "optimeDurableDate" : ISODate("2022-10-01T05:53:03Z"),
  141. "lastHeartbeat" : ISODate("2022-10-01T05:53:09.408Z"),
  142. "lastHeartbeatRecv" : ISODate("2022-10-01T05:53:09.956Z"),
  143. "pingMs" : NumberLong(0),
  144. "lastHeartbeatMessage" : "",
  145. "syncingTo" : "192.168.0.240:27017",
  146. "syncSourceHost" : "192.168.0.240:27017",
  147. "syncSourceId" : 1,
  148. "infoMessage" : "",
  149. "configVersion" : 5
  150. }
  151. ],
  152. "ok" : 1,
  153. "operationTime" : Timestamp(16646035831),
  154. "$clusterTime" : {
  155. "clusterTime" : Timestamp(16646035831),
  156. "signature" : {
  157. "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
  158. "keyId" : NumberLong(0)
  159. }
  160. }
  161. }

(2)C节点冻结120s

</>复制代码

  1. [root@blogs-v2 ~]# mongo 192.168.0.217:27017/admin -u root -p
  2. MongoDB shell version v4.0.27
  3. Enter password: 
  4. connecting to: mongodb://192.168.0.217:27017/admin?gssapiServiceName=mongodb
  5. Implicit session: session { "id" : UUID("b0714374-1a2a-41f5-9592-9a5ee8f18c2d") }
  6. MongoDB server version: 4.0.3
  7. udb-a0r3omr444m:SECONDARY>
  8. udb-a0r3omr444m:SECONDARYrs.freeze(120)         # C节点冻结120s
  9. {
  10. "ok" : 1,
  11. "operationTime" : Timestamp(16646038831),
  12. "$clusterTime" : {
  13. "clusterTime" : Timestamp(16646038831),
  14. "signature" : {
  15. "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
  16. "keyId" : NumberLong(0)
  17. }
  18. }
  19. }

(3)D节点冻结120s

</>复制代码

  1. [root@blogs-v2 ~]# mongo 192.168.0.60:27017/admin -u root -p
  2. MongoDB shell version v4.0.27
  3. Enter password: 
  4. connecting to: mongodb://192.168.0.60:27017/admin?gssapiServiceName=mongodb
  5. Implicit session: session { "id" : UUID("184f5eff-bfa9-4db9-87ab-54911a6897ff") }
  6. MongoDB server version: 4.0.3
  7. udb-a0r3omr444m:SECONDARY> 
  8. udb-a0r3omr444m:SECONDARYrs.freeze(120)         # D节点冻结120s
  9. {
  10. "ok" : 1,
  11. "operationTime" : Timestamp(16646038831),
  12. "$clusterTime" : {
  13. "clusterTime" : Timestamp(16646038831),
  14. "signature" : {
  15. "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
  16. "keyId" : NumberLong(0)
  17. }
  18. }
  19. }

(4)A节点降级120s

</>复制代码

  1. [root@blogs-v2 ~]# mongo 192.168.0.182:27017/admin -u root -p
  2. MongoDB shell version v4.0.27
  3. Enter password: 
  4. connecting to: mongodb://192.168.0.182:27017/admin?gssapiServiceName=mongodb
  5. Implicit session: session { "id" : UUID("cf937160-092d-4073-8788-562e7b928d50") }
  6. MongoDB server version: 4.0.3
  7. udb-a0r3omr444m:PRIMARY> 
  8. udb-a0r3omr444m:PRIMARYrs.stepDown(120)                 # 降级当前主节点,120s内不参与选举
  9. 2022-10-01T13:57:13.566+0800 I NETWORK  [js] DBClientConnection failed to receive message from 192.168.0.182:27017 - HostUnreachableConnection closed by peer
  10. 2022-10-01T13:57:13.566+0800 E QUERY    [js] Error: error doing query: failed: network error while attempting to run command 'replSetStepDown' on host '192.168.0.182:27017'  :
  11. DB.prototype.runCommand@src/mongo/shell/db.js:170:1
  12. DB.prototype.adminCommand@src/mongo/shell/db.js:187:1
  13. rs.stepDown@src/mongo/shell/utils.js:1505:12
  14. @(shell):1:1
  15. 2022-10-01T13:57:13.568+0800 I NETWORK  [js] trying reconnect to 192.168.0.182:27017 failed
  16. 2022-10-01T13:57:13.572+0800 I NETWORK  [js] reconnect 192.168.0.182:27017 ok

(5)查看B节点选举情况

</>复制代码

  1. [root@blogs-v2 ~]# mongo 192.168.0.240:27017/admin -u root -p
  2. MongoDB shell version v4.0.27
  3. Enter password: 
  4. connecting to: mongodb://192.168.0.240:27017/admin?gssapiServiceName=mongodb
  5. Implicit session: session { "id" : UUID("3416021c-089e-4927-9c60-775a9a692b22") }
  6. MongoDB server version: 4.0.3
  7. udb-a0r3omr444m:PRIMARY>

注:可以看出此时B节点已经是Primary节点了,选举非常迅速!!!

(6)查看控制台集群属性

2-22100114055La.png

注:至此,MongoDB副本集节点切换完毕。

作者:UStarGao
链接:https://www.starcto.com/mongodb/310.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127859.html

相关文章

  • 【云数据库 MySQL UDB】什么是UDB?产品功能,规格版本和使用限制

    摘要:版本目前支持和,用户可以根据需求选择相应的云数据库版本。硬盘云数据库的硬盘大小。云数据库提供自动备份和手动备份两种方式,防止数据丢失,避免误操作带来的风险。日志日志是用于记录云数据库操作事件的记录文件。什么是云数据库MongoDB?云数据库简介: 云数据库MongoDB是基于成熟云计算技术的高可用、高性能的数据库服务,完全兼容MongoDB 协议,支持灵活部署,除副本集实例架构外,云数据库...

    Tecode 评论0 收藏0
  • 深入浅出MongoDB 复制

    摘要:申明本文由笔者首发于深入浅出复制中文社区深入浅出复制由于自己开了,所以将之前比较好的文章挪过来便于大家浏览。新增由于网络问题导致失败重试机制。 申明 本文由笔者首发于InfoQ:《深入浅出MongoDB复制》MongoDB中文社区:《深入浅出MongoDB复制》 由于自己开了blog,所以将之前比较好的文章挪过来便于大家浏览。 综述 笔者最近在生产环境中遇到许多复制相关问题,查阅网上资...

    Jacendfeng 评论0 收藏0
  • UCloud MongoDB 如何应对高考填志愿的上亿流量高峰

    摘要:优志愿张海鹏宋体背景宋体每年月下旬到月下旬期间是高考填志愿的高峰期,也是优志愿后端面临大流量高并发请求的业务高峰期。对于优志愿读多写少的场景及其业务高峰期,用户可以按需增删节点,更好地实现读取性能的扩展。 随着用户规模的增长,数据库的压力也在成倍增加。面对大流量、高并发,UCloud MongoDB 做到了高效,并展现出了更好的性能体验。 —— 优志愿 CTO 张海鹏 背景...

    cppprimer 评论0 收藏0
  • mongoDB运维篇③】replication set复制

    摘要:投票节点仅仅在选举中进行投票。如下图所示从节点无法升职为主节点的情况其他概念从节点还有集中特殊的设置情况,不同的设置有不同的需求优先级为设置,那么该结点将不能成为主节点,但是其数据仍是与主节点保持一致的而且应用程序也可以进行读操作。 介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoD...

    史占广 评论0 收藏0

发表评论

0条评论

star.gao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<