数据库开发者社区 > 正文

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复制集windows server部署,以及将线上单节点转化成复制集所踩的坑
安装完成后我们需要启动三个mongod的服务来做为复制集的三个节点,我们可以直接打开cmd,使用mongod来根据不同的配置启动服务。例如:参考如下四张图,由于我安装的磁盘足够存放mongodb的数据,所以我将数据放在data文件中,三个节点的配置文件放在config文件中,三个节点mongod的服务日志放在log中。
48 0
mongodb复制集节点替换实践
注意:大家首先要明白你的需求是什么,然后对照做一些处理,下面是我的一些替换经验。 #### 需求 这是我原来挂载节点时的配置 ```bash config = { "_id" : "rs0", "members": [ { "_id" : 0, "host" : "127.0.0.1:27017" }, { "_id" : 1, "host" : "127.0.0.1:27018" }, { "_id" : 2, "host" : "127.0.0.1:27019" } ] } ``` 现在我需要将节点替换成下面
33 0
MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题
MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用性。
130 0
MongoDB系列-复制集(Replica Set)应用部署(生产、测试、开发环境)
通过在不同的计算机上托管mongod实例来尽可能多地保持成员之间的分离。将虚拟机用于生产部署时,应将每个mongod实例放置在由冗余电源电路和冗余网络路径提供服务的单独主机服务器上,而且尽可能的将副本集的每个成员部署到自己的计算机绑定到标准的MongoDB端口27017。
255 0
MongoDB系列-在复制集(replication)以及分片(Shard)中创建索引
在使用MongoDB时,在创建索引会涉及到在复制集(replication)以及分片(Shard)中创建,为了最大限度地减少构建索引的影响,在副本和分片中创建索引,使用滚动索引构建过程。
277 0
『MongoDB』MongoDB高可用部署架构——复制集篇(Replica Set)
读完这篇文章里你能收获到 1. MongoDB是如何通过复制集实现高可用的 2. 主节点宕机后如何通过选举做到故障恢复 3. 在复制集中常见的可调整参数有哪些 4. 在Linux原生环境搭建MongoDB复制集 5. 在Winodws环境搭建MongoDB复制集
367 0
【MongoDB训练营】第三课:复制集使用及原理介绍 答疑汇总
【MongoDB训练营】第三课:复制集使用及原理介绍 答疑汇总
406 0
MongoDB分片到复制集改造实践
背景 生产线上使用 MongoDB Sharidng 的场景非常多,但由于业务初期评估不到位或者业务发展不符合预期,为了管理起来更方便,可能需要将 Sharding 改造为 复制集。   我就针对生产级业务环境需求提供最小影响服务将分片改造为复制集(含减分片场景)的解决方案。
1193 0
MongoDB · 引擎特性 · 复制集原理
复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。
1470 0
MongoDB 3.4 - 复制集、鉴权、主从同步以及读写分离
许久没更新了。带来centos7下MongoDB3.4的复制集、鉴权、主从同步和读写分离方案。 转载请注明出处:http://blog.lzoro.com BiuBiu 老惯例之碎碎念。
1209 0
数据库领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。
+关注
张友东(林青)
阿里云高级技术专家
文章
问答
视频
相关电子书
更多
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多
相关镜像