mongodb复制集节点替换实践

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 注意:大家首先要明白你的需求是什么,然后对照做一些处理,下面是我的一些替换经验。#### 需求这是我原来挂载节点时的配置```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
目录
相关文章
|
9月前
|
NoSQL MongoDB
MongoDB-复制集搭建
在安装目录下新建 data/conf/log 3个文件夹,在conf文件夹下新建 mongo.config,在mongo.config中配置如下内容:
61 0
|
5天前
|
NoSQL Java MongoDB
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
【5月更文挑战第11天】本文介绍了如何将非关系型数据库MongoDB与Spring Boot框架集成,以实现高效灵活的数据管理。Spring Boot简化了Spring应用的构建和部署,MongoDB则以其对灵活数据结构的处理能力受到青睐。集成步骤包括:添加MongoDB依赖、配置连接信息、创建数据访问对象(DAO)以及进行数据操作。通过这种方式,开发者可以充分利用两者优势,应对各种数据需求。在实际应用中,结合微服务架构等技术,可以构建高性能、可扩展的系统。掌握MongoDB与Spring Boot集成对于提升开发效率和项目质量至关重要,未来有望在更多领域得到广泛应用。
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
|
5天前
|
NoSQL 安全 MongoDB
【MongoDB 专栏】MongoDB 的安全性考虑与实践
【5月更文挑战第11天】在数字化时代,MongoDB的数据安全至关重要。面临网络攻击、内部威胁、数据泄露和未授权访问等风险,我们需要重视MongoDB的安全性。关键措施包括身份验证和授权、数据加密、网络安全、备份和恢复、安全审计及正确配置。实践中应启用身份验证,配置访问控制,加密敏感数据,加强网络安全,并定期备份和审计。保持软件更新,结合业务需求制定安全策略,以确保数据的保密性、完整性和可用性。
【MongoDB 专栏】MongoDB 的安全性考虑与实践
|
5天前
|
监控 NoSQL 安全
【MongoDB 专栏】MongoDB 的复制集:高可用性配置
【5月更文挑战第10天】MongoDB的复制集是实现数据高可用性的重要机制,由主节点和次节点构成,主节点处理写操作,次节点同步数据确保一致。在主节点故障时,次节点自动提升接替,保证服务不间断。通过复制集,可实现数据保护、持续服务,适用于关键业务系统和数据备份。配置时需关注网络稳定性、节点性能和数据一致性。案例显示,复制集能有效保障服务高可用,防止数据丢失和业务中断,是现代数据库管理的关键工具。在数据驱动的世界,复制集为高可用性提供了坚实保障。
【MongoDB 专栏】MongoDB 的复制集:高可用性配置
|
5天前
|
监控 NoSQL 容灾
MongoDB复制集原理:高可用性与数据一致性的保障
【4月更文挑战第30天】MongoDB复制集提供高可用性和数据一致性,通过在多个服务器间复制数据。复制集包含主节点和从节点,写操作在主节点执行,然后异步复制到从节点。优势包括故障切换、数据冗余、负载均衡和容灾备份。当主节点故障,其他节点会选举新主节点,确保服务连续性。配置复制集涉及规划节点、配置复制集、初始化和监控维护。复制集是实现数据库可靠性的核心。
|
5天前
|
NoSQL MongoDB 数据库
|
5天前
|
NoSQL 搜索推荐 算法
【MongoDB】MongoDB在推荐系统中的实践应用
【4月更文挑战第1天】【MongoDB】MongoDB在推荐系统中的实践应用
|
5天前
|
NoSQL Linux MongoDB
centos7搭建MongoDB以及MongoDB复制集
centos7搭建MongoDB以及MongoDB复制集
61 0
|
9月前
|
数据库
MongoDB-复制集投票节点
?> 投票节点就是不保存任何数据, 只参与投票的节点
51 0
|
6月前
|
监控 NoSQL MongoDB
轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools
mtools是一个基于Python实现的MongoDB工具集,旨在提供一系列功能,包括MongoDB日志分析、报表生成以及简易的数据库安装等。它由MongoDB原生的工程师单独发起并进行开源维护。mtools包含了一些常用的组件,如mlaunch、mlogfilter、mplotqueries和mlogvis等,可以帮助我们更方便地启动和创建MongoDB数据库。
130 1