mongodb副本集移除已有的节点

 

前一篇文章学习了mongodb副本集添加新节点:mongodb副本集添加新节点,接下来学习下如何移除有问题的节点,先看官方文档:https://docs.mongodb.com/manual/tutorial/remove-replica-set-member/,里面记录了比较详细的步骤,大概如下(移除之前确保业务流量已经从这个已有的节点全部迁移走了):

 

 

用rs.remove()方法移除:

  1. Shut down the mongod instance for the member you wish to remove. To shut down the instance, connect using the mongo shell and the db.shutdownServer() method.
  2. Connect to the replica set's current primary. To determine the current primary, use db.isMaster() while connected to any member of the replica set.
  3. Use rs.remove() in either of the following forms to remove the member:

    rs.remove("mongod3.example.net:27017")
    rs.remove("mongod3.example.net")

 

使用rs.reconfig()方法移除节点

在mongodb4.4之后,rs.config()也可以及时移除一个投票节点,也可以及时添加一个投票节点。

大概步骤如下:

  1. Shut down the mongod instance for the member you wish to remove. To shut down the instance, connect using the mongo shell and the db.shutdownServer() ,method.关闭mongodb服务
  2. Connect to the replica set's current primary. To determine the current primary, use db.isMaster() while connected to any member of the replica set.,连接到primary节点
  3. Issue the rs.conf() method to view the current configuration document and determine the position in the members array of the member to remove: 执行rs.conf()命泠

    {
        "_id" : "rs",
        "version" : 7,
        "members" : [
            {
                "_id" : 0,
                "host" : "mongod_A.example.net:27017"
            },
            {
                "_id" : 1,
                "host" : "mongod_B.example.net:27017"
            },
            {
                "_id" : 2,
                "host" : "mongod_C.example.net:27017"
            }
        ]
    }

     

  4. 开始操作,拿到cfg对象,移除

    cfg = rs.conf()
    cfg.members.splice(2,1)

     

  5. 加载config生效

    rs.reconfig(cfg)

     

可以看到成员2已经被移除出去了。

MongoDB 副本详细指南与 Windows 搭建 步骤 概念见教材。 一、MongoDB 节点概述 1.1 节点类型 在 MongoDB 副本架构中,节点类型决定了其在数据存储、读写处理以及群管理中的角色,各类型 节点分工明确,协同保障系统的稳定运行。 主节点(Primary):主节点是整个副本的核心,承担着写操作的唯一入口职责。当客户端发起写请 求时,只有主节点能够接收并处理这些操作,如插入新数据、更新已有记录、删除文档等。每一次写操 作完成后,主节点会将该操作详细记录到 oplog 日志中, oplog 是一个特殊的合,存储在 库里,它记录了所有的写操作历史。主节点会通过内部的通信机制,将 local 数据 oplog 中的操作同步给其他从节 点,确保副本内的数据一致性 。例如,当一个电商应用向数据库插入新的订单数据时,该操作首先由 主节点接收,记录到 oplog 后再同步给其他节点。 从节点(Secondary):从节点的主要任务是从主节点复制数据和 oplog 日志。它通过定期拉取主节点 的oplog,并按照操作顺序在本地数据库上应用这些操作,从而实现与主节点数据的实时同步。从节点 可以接收客户端的读请求,分担主节点的负载压力,提高系统的并发处理能力。在一些大型的内容管理 系统中,从节点常被用于提供文章、图片等静态资源的读取服务,减轻主节点的负担 。同时,从节点还 起到数据备份的作用,当主节点出现故障时,从节点可以参与选举,有可能被推举成为新的主节点。 仲裁节点(Arbiter):仲裁节点本身不存储任何数据,它的核心作用在于参与副本的选举过程。在副 本选举主节点时,每个节点都会参与投票,而仲裁节点的投票在特定情况下会起到决定性作用。当副 本中的节点数量为偶数时,可能会出现投票平局的情况,导致选举无法顺利进行。此时引入仲裁节 点,它的一票可以打破僵局,确保选举能够正常完成,维护副本的高可用性。例如,在一个包含两个 数据节点副本中,添加一个仲裁节点,就能避免选举时因票数相同而陷入停滞的问题。 1.2 节点功能 不同类型的节点相互协作,构建起 MongoDB 副本的完整功能体系。主节点作为写操作中枢,协调数 据同步流程;从节点一方面为读操作提供支持,另一方面保障数据的冗余备份;仲裁节点则专注于选举 机制,确保副本在面对节点故障
04-26
<think>嗯,用户问的是如何在Windows上搭建MongoDB副本,包括步骤和概念说明。首先,我需要回忆一下MongoDB副本的基本概念,比如主节点、从节点、仲裁节点,以及oplog的作用和数据同步机制。用户可能是个开发者或者系统管理员,想要在Windows环境下部署高可用的MongoDB群,所以需要详细的步骤指导和概念解释。 首先,我应该确认用户的需求是否包含所有必要的组件,比如安装MongoDB、配置副本成员、设置oplog大小、测试故障转移等。用户提到的节点类型有主节点、从节点、仲裁节点,这些都需要分别说明他们的角色和配置方法。同时,高可用性是通过副本的自动故障转移实现的,这部分需要结合引用中的信息,比如心跳检测和选举机制。 然后,搭建步骤需要分点详细说明,包括安装MongoDB、创建数据目录、修改配置文件、启动实例、初始化副本、添加节点和仲裁节点等。每个步骤需要具体到Windows的命令和路径,比如使用命令提示符运行mongod.exe,配置文件的路径格式,以及如何通过mongo shell执行rs.initiate()等命令。 另外,用户可能对oplog不太了解,需要解释oplog的作用,如何调整大小,以及它在数据同步中的重要性。引用中提到oplog是一个固定合,存储写操作,从节点异步复制这些操作,这需要详细说明。 还要注意潜在的问题,比如防火墙设置、端口开放、数据目录权限等,这些在Windows环境下可能会影响节点间的通信,导致副本无法正常工作。需要提醒用户检查这些配置。 最后,验证步骤也很重要,包括检查副本状态,测试写入和读取,以及模拟主节点故障观察自动切换。这部分能帮助用户确认搭建是否成功,并理解高可用性的实现方式。 可能用户还希望了解如何监控副本的状态,或者如何进行日常维护,比如添加或移除节点,调整oplog大小等。不过根据问题,主要需要中在搭建步骤和概念说明上,所以相关问题可以涉及这些扩展内容。 总结下来,回答的结构应该是先介绍副本的基本概念和组件,然后分步骤详细说明搭建过程,接着解释关键概念如oplog和数据同步,最后验证和测试高可用性。同时,生成的相关问题可以引导用户进一步学习优化配置、监控维护和故障排除等内容。</think>### MongoDB副本Windows搭建指南 #### 一、核心概念说明 1. **节点类型** - **主节点(Primary)**:处理所有写操作和读请求,通过oplog记录写操作[^2][^4] - **从节点(Secondary)**:异步复制主节点数据,可配置为只读节点[^3] - **仲裁节点(Arbiter)**:不存储数据,仅参与选举投票[^2] 2. **oplog机制** $$ oplogSize = \frac{磁盘空间 \times 5\%}{100} $$ 采用固定合存储写操作记录,从节点通过轮询oplog实现异步复制[^1][^4] #### 二、Windows搭建步骤 1. **环境准备** ```powershell # 下载MongoDB Community Server 6.0+ https://www.mongodb.com/try/download/community # 创建数据目录 mkdir C:\data\db1 mkdir C:\data\db2 mkdir C:\data\db3 ``` 2. **配置文件示例(主节点)** ```yaml systemLog: destination: file path: C:\data\db1\mongod.log storage: dbPath: C:\data\db1 net: port: 27017 bindIp: 0.0.0.0 replication: replSetName: rs0 oplogSizeMB: 1024 ``` 3. **启动三个节点** ```powershell mongod.exe --config C:\data\db1\mongod.conf mongod.exe --config C:\data\db2\mongod.conf --port 27018 mongod.exe --config C:\data\db3\mongod.conf --port 27019 ``` 4. **初始化副本** ```javascript mongo --port 27017 > rs.initiate({ _id: "rs0", members: [ {_id:0, host:"localhost:27017", priority:2}, {_id:1, host:"localhost:27018", priority:1}, {_id:2, host:"localhost:27019", arbiterOnly:true} ] }) ``` #### 三、关键验证操作 1. **检查副本状态** ```javascript rs.status().members.forEach(m => printjson({ name: m.name, stateStr: m.stateStr, optime: m.optime })) ``` 2. **数据同步测试** ```javascript // 主节点写入 db.test.insert({msg: "主节点写入"}) // 从节点读取 rs.slaveOk() db.test.find() ``` 3. **故障转移模拟** ```powershell # 停止主节点进程 db.adminCommand({shutdown:1}) # 观察新主节点选举(需<12秒)[^4] ``` #### 四、高级配置建议 1. **oplog调优** - 计算公式:每小时生成数据量 × 8小时 - 调整命令: ```javascript db.adminCommand({replSetResizeOplog:1, size: 2048}) ``` 2. **安全加固** ```yaml security: keyFile: C:\data\keyfile ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值