MongoDB管理:如何优雅的重启复制集?-阿里云开发者社区

开发者社区> 张友东(林青)> 正文

MongoDB管理:如何优雅的重启复制集?

简介: 啊!你还不了解MongoDB复制集?先看这里科普一下 复制集的成员启动后,会选举出一个Primary,Primary需要得到大多数成员的投票。所有的写入操作都必须向Primary发起,通过oplog将写操作同步到Secondary。 在复制集运行的过程中,难免会遇到需要重启节点的场景,比如复
+关注继续查看

啊!你还不了解MongoDB复制集?先看这里科普一下


复制集的成员启动后,会选举出一个Primary,Primary需要得到大多数成员的投票。所有的写入操作都必须向Primary发起,通过oplog将写操作同步到Secondary。


在复制集运行的过程中,难免会遇到需要重启节点的场景,比如复制集版本升级、节点维护等,在重启节点的过程中,建议不要直接shutdown Primary,这样可能导致已经写入primary但未同步到secondary的数据丢失,过程类似如下:


  1. shutdown Primary (shutdown会等待Secondary oplog追到10s以内)
  2. Primary退出后,剩余的节点选举出一个新的Primary(复制集只包含1或2节点例外)
  3. Primary重新启动,因为当前复制集已经有了新的Primary,这个Primary将以Secondary的角色运行。
  4. 从新的Primary同步的过程中,发现自己有无效的oplog,会先进行rollback。(rollback的数据只要不超过300M是可以找回的)


如果想不丢数据重启复制集,更优雅的打开方式应该是这样的

  1. 逐个重启复制集里所有的Secondary节点
  2. 对Primary发送stepDown命令,等待primary降级为Secondary
  3. 重启降级后的Primary

注意:如果Secondary的同步一直追不上Primary,步骤2可能会失败,这时应该重试步骤2直到stepDown成功;步骤2也可以通过调用replSetReconfig命令,来调整节点优先级来实现,让Secondary拥有更高的优先级,然后等待Primary降级为Secondary。


从上述分析可以看出,复制集里Primary、Secondary节点角色切换是很正常的事情,所以连接复制集一定不要直连Primary,否则在节点角色切换时不能正确容错,服务高可用无法保证。


另外,要想保证数据的高可靠,除了在运维上加强,在开发层面也可以做些工作,比如重要的数据写入通过WriteConcern: {w: "majority"}
来保证写入到大多数节点才向客户端确认。

参考资料

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MongoDB · 引擎特性 · 复制集原理
复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。
1263 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.2. 订阅
31.2. 订阅 31.2.1. 复制槽管理 订阅是逻辑复制的下游端。定义订阅的节点被称为 订阅者。 订阅定义了与另一个数据库的连接以及它想要订阅的一组发布(一个或多个)。 订阅者数据库的行为与任何其他PostgreSQL实例的行为相同, 并且可以通过定义自己的发布来用作其他数据库的发布者。
1250 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.4. 限制
31.4. 限制 逻辑复制目前有以下限制或缺少的功能。 这些可能会在未来的版本中解决。 不复制数据库模式和DDL命令。初始模式可以使用pg_dump --schema-only 手动复制。后续的模式更改需要手动保持同步。
1027 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.5. 架构
31.5. 架构 31.5.1. 初始快照 逻辑复制首先复制发布者数据库上的数据快照。一旦完成, 发布者的变化就会实时发送给订阅者。订阅者按照发布者提交的顺序应用数据, 以确保任何单个订阅中的发布的事务一致性。
1095 0
Animo.js :一款管理 CSS 动画的强大的小工具
  Animo.js 是一个功能强大的小工具,用于管理 CSS 动画。它的特色功能包括像堆栈动画,创建跨浏览器的模糊,设置动画完成的回调等等。Animo 还包括惊人的 animate.css,为您提供了近60个美丽的动画,还加入了一些辅助动画到库中。
876 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.6. 监控
31.6. 监控 由于逻辑复制基于与物理流式复制 类似的体系结构,因此发布节点上的监视与物理复制主节点的监视类似 (请参见第 26.2.5.2 节)。 有关订阅的监控信息可以在pg_stat_subscription 中看到。
992 0
MongoDB管理工具曝远程代码执行漏洞
本文讲的是MongoDB管理工具曝远程代码执行漏洞,MongoDB,IT界主流非关系型数据库(NoSQL)平台之一,是基于表的关系型数据库的流行替代物。
1379 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制_26.5. 热备
26.5. 热备 26.5.1. 用户概览 26.5.2. 处理查询冲突 26.5.3. 管理员概览 26.5.4. 热备参数参考 26.5.5. 警告 术语热备用来描述服务器处于归档恢复或后备模式时连接到服务器并运行只读查询的能力。
1299 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.1. 发布
31.1. 发布 可以在任何物理复制主机上定义发布。 定义发布的节点称为发布者。 发布是从一个表或一组表中生成的一组更改,也可能被描述为更改集或复制集。 每个发布只存在于一个数据库中。 发布与模式不同,不影响表格的访问方式。
864 0
+关注
张友东(林青)
阿里云高级技术专家
105
文章
18
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载