前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB 副本集运维策略

MongoDB 副本集运维策略

原创
作者头像
有态度的马甲
修改2020-01-19 18:06:29
8831
修改2020-01-19 18:06:29
举报
文章被收录于专栏:精益码农

前文传送门

  1. 解锁MongoDB replica set核心姿势
  2. MongoDB副本集自动故障转移全流程原理

“副本集不仅能帮助数据库从节点故障/网络分区中快速恢复,而且使您能够执行运维任务而不会影响高可用性。

本文聊一聊 MongoDB 副本集运维窗口期的操作策略,最大程度地减少主节点不可用的时间。

P1 滚动维护/升级

MongoDB 副本集的维护/升级通常以滚动方式执行,依次在辅助节点上执行维护,而最后执行主节点维护。

  1. 在辅助节点上停止MongoDB服务,执行运维操作
  2. 在服务器上启动MongoDB服务
  3. 等待节点的MongoDB同步到最新的Oplog(追赶)
  4. 在副本集中的其他辅助节点上重复上述操作

假定一个副本集包含mon01(主节点),mon02(辅助)mon03(辅助),滚动运维通常需要:

  1. 先后在辅助节点mon03、mon02上进行维护
  2. 将主节点mon01降级(stepDown),等待选举新主节点,比如说mon02
  3. 在以前的主节点mon01上执行维护

如果主服务器意外终止/大多数辅助节点觉得与主节点失联,则辅助节点会在丢失心跳10秒钟后要求进行选举。

P2 快速选举

主节点降级,触发快速选举

退出(stepDown)主节点可加快故障转移过程,建议使用stepDown命令退出主节点以强制触发选举,而不是关闭(shutDownServer)主数据库 (辅助节点需花时间识别主节点失联)

减少electionTimeoutMillis阈值

辅助节点认定主节点失联的默认阈值是10s, 在滚动维护期间我们可人为缩短这个阈值,加快选举。但是运维完毕,请恢复这个默认设置。

代码语言:javascript
复制
rs.isMaster().me
// mon02:27000
// rs0:PRIMARY>
// on the new primary
var conf = rs.conf()
conf.settings.electionTimeoutMillis=10000
/*
rs.reconfig(conf)
{
  "ok": 1,
  "operationTime": Timestamp(1529034252, 1),
  "$clusterTime": {
    "clusterTime": Timestamp(1529034252, 1),
    "signature": {
      "hash": BinData(0, "AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId": NumberLong(0)
    }
  }
}
*/

“10s的阈值是合适的,我们要确保集群能够忽略和忍耐网络抖动或网络延迟, 减少不必要的重选。

P3  优选新主节点

一般情况下,会根据如下因素选择 主节点

  • 低复制滞后
  • 低网络延迟

若想指定某辅助节点mon02为下一个主节点,在其他辅助节点上运行rs.freeze(60)冻结它们成为主节点的资格;当你stepDown主节点mon01时,辅助节点mon02是唯一可以选择的主节点,这将加快选举速度。

或 您可以通过给予副本集成员比其他成员更高的member [n] .priority值来使其成为主节点。

代码语言:javascript
复制
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 0.5
cfg.members[2].priority = 1

参考的运维命令:

代码语言:javascript
复制
rs.conf() 返回包含当前副本集配置的文档  
rs.sttaus() 返回副本集某成员视角收到的副本集状态 
rs.stepDown(stepDownSecs, secondaryCatchUpPeriodSecs) 指示主节点退化为辅助节点,之后合格的辅助节点会发起选举;另外并不是立即退化,等待指定时间确保有一个节点与主节点保持最新同步。
rs.freeze(seconds)  在一定时间内冻结节点成为主节点的资格
rs.reconfig(configuration, force) 重新配置现有副本集,覆盖现有副本集配置(需要连到主节点执行)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • P1 滚动维护/升级
  • P2 快速选举
    • 主节点降级,触发快速选举
    • P3  优选新主节点
    相关产品与服务
    云数据库 MongoDB
    腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档