mongodb复制集节点替换实践

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 注意:大家首先要明白你的需求是什么,然后对照做一些处理,下面是我的一些替换经验。#### 需求这是我原来挂载节点时的配置```bashconfig = { "_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" } ]}```现在我需要将节点替换成下面

注意:大家首先要明白你的需求是什么,然后对照做一些处理,下面是我的一些替换经验。

需求

这是我原来挂载节点时的配置

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" }
    ]
}

现在我需要将节点替换成下面

config = {
    "_id" : "rs0",
    "members": [
        { "_id" : 0, "host" : "192.168.1.53:27017" },
        { "_id" : 1, "host" : "192.168.1.53:27018" },
        { "_id" : 2, "host" : "192.168.1.53:27019" }
    ]
}

别问我为什么替换,都是坑,给你我的这一篇文章参考:mongodb踩坑:复制集(尤其是单台服务器多个mongo服务的)服务节点挂载问题

首先我们看一下官网上复制集选举主节点的一段描述,记住这段描述,接下来有用(已经将英文翻译成了中文):

如果复制集是由三个节点组成的,且三个节点均可投票,只要其中两个节点能够互相沟通那么复制集就能选举出新的主节点。如果有两个节点不可用了,那么剩下的节点将为 从节点 ,因为它不能与复制集中多数节点进行沟通。 如果两个从节点不可用了,剩下的 主节点 将降职为从节点。

首先我们来看一下官方的更新方法:

我们可以通过下列命令来将复制集的 members[0]节点的主机名修改为 mongo2.example.net :

cfg = rs.conf()
cfg.members[0].host = "mongo2.example.net"
rs.reconfig(cfg)

注意:上面操作是在主节点primary下执行的,从节点执行会报没权限的错误。

按照此操作了以后结果却不尽如人意!报了下面的错误:

{
    "ok" : 0.0,
    "errmsg" : "Either all host names in a replica set configuration must be localhost references, or none must be; found 2 out of 3",
    "code" : 103,
    "codeName" : "NewReplicaSetConfigurationIncompatible"
}
问答解疑

1、其实在这之前少了一些东西,只有在当前复制集rs0只有主节点时才能执行上面的操作,如何只有一个主节点呢?

答:当然是将从节点从复制集中删除。

2、那删除是否要关闭从节点的mongo服务呢?

答:我们来关一下试试,关了另外两个后,再到连接上刚才的主节点mongo服务。咦!怎么刚才的主节点变成从节点了。是不是想起什么来了,刚才记那段描述是什么来着!如果两个从节点不可用了,剩下的主节点将降职为从节点,哈哈中招了!所以不要急着关掉mongo服务,为什么我想到要关掉服务呢!同样是官网中移除复制集节点这个文档下面处理方法第一条 1.关闭我们想要移除的 mongod 实例,可以通过在 mongo 的窗口中执行 db.shutdownServer() 来关闭。所以由此可以想一下你在读官方文档的时候一定要遵循开头的注意,明白你的需求,然后有针对性的解决问题。

正确的步骤

注意:不需要去关闭从节点的服务
1、删除集群其它非主节点(27017目前是主节点)

rs.remove('127.0.0.1:27018')
rs.remove('127.0.0.1:27019')

2、更改主节点的host

conf=rs.conf()
conf.members[0].host='192.168.1.53:27017'
rs.reconfig(conf)

3、添加集群另外的两个子节点

rs.add({_id:1,host:'192.168.1.53:27018',priority:1})
rs.add({_id:2,host:'192.168.1.53:27019',priority:1})

是不是很简单,但是请注意,如果你的主节点有很多数据,然后新挂上的从节点是一个新的mongo服务,则会进行数据同步,这时候你的新挂上的的节点的状态是STARTUP2,当数据同步完成,正式成为复制集的一部分时才会显示SECONDARY,这个状态可以用

rs.status()

命令查看,信息显示在members下的stateStr。

扩展

如果我们是线上的数据没有办法一下子停止节点的使用,这时就需要继续挂载多个mongo节点,然后等待数据同步。在数据同步结束后再将原来不需要的节点移除。

如果帮助了你,希望可以点赞、评论,你的点赞与评论是我最大的创作动力!

在这里插入图片描述

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
4月前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
94 4
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
19天前
|
存储 NoSQL MongoDB
【赵渝强老师】部署MongoDB复制集
本文介绍了如何在单个节点上搭建MongoDB复制集环境,通过监听不同端口实现多节点配置。详细步骤包括创建数据目录、编辑配置文件、启动节点、初始化复制集、查看状态以及测试主从库的读写操作。文中还提供了视频讲解和代码示例,帮助读者更好地理解和操作。
|
19天前
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB复制集的体系架构
MongoDB的复制集是一种集群技术,由一个Primary节点和多个Secondary节点组成,实现数据的高可用性。Primary节点处理写入请求,Secondary节点同步数据。当Primary节点故障时,Secondary节点可通过选举成为新的Primary节点。视频讲解和示意图详见正文。
|
4月前
|
C# UED 开发者
WPF与性能优化:掌握这些核心技巧,让你的应用从卡顿到丝滑,彻底告别延迟,实现响应速度质的飞跃——从布局到动画全面剖析与实例演示
【8月更文挑战第31天】本文通过对比优化前后的方法,详细探讨了提升WPF应用响应速度的策略。文章首先分析了常见的性能瓶颈,如复杂的XAML布局、耗时的事件处理、不当的数据绑定及繁重的动画效果。接着,通过具体示例展示了如何简化XAML结构、使用后台线程处理事件、调整数据绑定设置以及利用DirectX优化动画,从而有效提升应用性能。通过这些优化措施,WPF应用将更加流畅,用户体验也将得到显著改善。
252 1
|
4月前
|
监控 NoSQL 大数据
【MongoDB复制集瓶颈】高频大数据写入引发的灾难,如何破局?
【8月更文挑战第24天】在MongoDB复制集中,主节点处理所有写请求,从节点通过复制保持数据一致性。但在大量高频数据插入场景中,会出现数据延迟增加、系统资源过度消耗、复制队列积压及从节点性能不足等问题,影响集群性能与稳定性。本文分析这些问题,并提出包括优化写入操作、调整写入关注级别、采用分片技术、提升从节点性能以及持续监控调优在内的解决方案,以确保MongoDB复制集高效稳定运行。
86 2
|
4月前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
85 0
|
7月前
|
NoSQL Java MongoDB
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
【5月更文挑战第11天】本文介绍了如何将非关系型数据库MongoDB与Spring Boot框架集成,以实现高效灵活的数据管理。Spring Boot简化了Spring应用的构建和部署,MongoDB则以其对灵活数据结构的处理能力受到青睐。集成步骤包括:添加MongoDB依赖、配置连接信息、创建数据访问对象(DAO)以及进行数据操作。通过这种方式,开发者可以充分利用两者优势,应对各种数据需求。在实际应用中,结合微服务架构等技术,可以构建高性能、可扩展的系统。掌握MongoDB与Spring Boot集成对于提升开发效率和项目质量至关重要,未来有望在更多领域得到广泛应用。
241 3
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
|
6月前
|
存储 NoSQL 数据处理
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
322 1