上一篇文章中,我们搭建了3个节点的副本集,集群信息如下:

  1. rstest:PRIMARY> rs.config()
  2. {
  3. "_id" : "rstest",
  4. "version" : 2,
  5. "protocolVersion" : NumberLong(1),
  6. "writeConcernMajorityJournalDefault" : true,
  7. "members" : [
  8. {
  9. "_id" : 0,
  10. "host" : "192.168.10.41:27017",
  11. "arbiterOnly" : false,
  12. "buildIndexes" : true,
  13. "hidden" : false,
  14. "priority" : 2,
  15. "tags" : {
  16.  
  17. },
  18. "slaveDelay" : NumberLong(0),
  19. "votes" : 1
  20. },
  21. {
  22. "_id" : 1,
  23. "host" : "192.168.10.42:27017",
  24. "arbiterOnly" : false,
  25. "buildIndexes" : true,
  26. "hidden" : false,
  27. "priority" : 1,
  28. "tags" : {
  29.  
  30. },
  31. "slaveDelay" : NumberLong(0),
  32. "votes" : 1
  33. },
  34. {
  35. "_id" : 2,
  36. "host" : "192.168.10.43:27017",
  37. "arbiterOnly" : false,
  38. "buildIndexes" : true,
  39. "hidden" : false,
  40. "priority" : 0,
  41. "tags" : {
  42.  
  43. },
  44. "slaveDelay" : NumberLong(0),
  45. "votes" : 1
  46. }
  47. ],
  48. "settings" : {
  49. "chainingAllowed" : true,
  50. "heartbeatIntervalMillis" : 2000,
  51. "heartbeatTimeoutSecs" : 10,
  52. "electionTimeoutMillis" : 10000,
  53. "catchUpTimeoutMillis" : -1,
  54. "catchUpTakeoverDelayMillis" : 30000,
  55. "getLastErrorModes" : {
  56.  
  57. },
  58. "getLastErrorDefaults" : {
  59. "w" : 1,
  60. "wtimeout" : 0
  61. },
  62. "replicaSetId" : ObjectId("5ef1b03c01bba8d9a6759c18")
  63. }
  64. }

(一)删除副本集成员

删除副本集成员可以使用rs.remove()或者rs.reconfig()。

方法一:使用rs.remove删除"IP为192.168.10.42"的成员

STEP1:关闭要删除节点的实例

  1. [root@mongodbserver2 ~]# mongo -u replica -p replica --authenticationDatabase admin
  2. MongoDB shell version v4.2.7
  3. connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
  4. Implicit session: session { "id" : UUID("946853b3-ad91-44d0-b7df-3001cbfc1af0") }
  5. MongoDB server version: 4.2.7
  6.  
  7. rstest:SECONDARY> use admin
  8. switched to db admin
  9. rstest:SECONDARY> db.shutdownServer()
  10. 2020-06-28T23:47:02.129+0800 I NETWORK [js] DBClientConnection failed to receive message from 127.0.0.1:27017 - HostUnreachable: Connection closed by peer
  11. server should be down...
  12. 2020-06-28T23:47:02.134+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27017 failed
  13. 2020-06-28T23:47:02.134+0800 I NETWORK [js] reconnect 127.0.0.1:27017 failed failed
  14. 2020-06-28T23:47:02.137+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27017 failed
  15. 2020-06-28T23:47:02.137+0800 I NETWORK [js] reconnect 127.0.0.1:27017 failed failed
  16. >

STEP2:连接到主节点,不知道主节点,可以使用db.isMaster()确认

STEP3:在主节点上删除成员

  1. rstest:PRIMARY> rs.remove("192.168.10.42:27017")
  2. {
  3. "ok" : 1,
  4. "$clusterTime" : {
  5. "clusterTime" : Timestamp(1593359559, 1),
  6. "signature" : {
  7. "hash" : BinData(0,"UpD/BEf5OF484ZeHTHCEDReiJKw="),
  8. "keyId" : NumberLong("6841443127941660675")
  9. }
  10. },
  11. "operationTime" : Timestamp(1593359559, 1)
  12. }
  13. rstest:PRIMARY>

方法二:使用rs.reconfig删除成员

这里不再演示,见官方文档:https://docs.mongodb.com/manual/tutorial/remove-replica-set-member/

(二)添加副本集成员

这里演示如何把上面已经删除的节点重新添加回来。

STEP1:启动节点,节点的启动参数必须含有集群参数。主要参数如下:

  1. # network interfaces
  2. net:
  3. port: 27017
  4. bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
  5.  
  6. security:
  7. authorization: enabled
  8. keyFile: /mongo/mongo-keyfile
  9.  
  10. replication:
  11. replSetName: rstest

STEP2:在主节点上执行添加节点命令

  1. rs.add( { host: "192.168.10.42:27017", priority: 0, votes: 0 } )

注意:当新添加服务器的priority和votes大于0时,在其初始同步期间,即使该服务器由于数据不一致而无法提供读取服务或成为主服务器,但是他仍会作为有表决权的成员,这可能会导致多数投票成员在线但是无法选举主成员的情况。

STEP3:确保新加入的成员状态已经转变为SECONDARY

  1. rs.status()

STEP4:如果新成员状态已经转变为SECONDARY,如果需要,可以使用rs.reconfig()更改新成员的priority和votes。

  1. var cfg = rs.conf();
  2. cfg.members[3].priority = 1
  3. cfg.members[3].votes = 1
  4. rs.config(cfg)

【完】

MongoDB副本集replica set(三)--添加删除成员的更多相关文章

  1. MongoDB副本集replica set (二)--副本集环境搭建

    (一)主机信息 操作系统版本:centos7 64-bit 数据库版本   :MongoDB 4.2 社区版 ip hostname 192.168.10.41 mongoserver1 192.16 ...

  2. MongoDB副本集配置系列三:副本集的认证方式

    1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...

  3. NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署

    NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...

  4. MongoDB副本集学习(三):性能和优化相关

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  5. MongoDB 副本集的原理、搭建、应用

    概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...

  6. MongoDB副本集学习(一):概述和环境搭建

    MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...

  7. MongoDB 副本集管理

    一.以单机模式启动成员节点 有时候出于维护的需要,需要以单机模式启动某个节点而不是一个副本集成员身份. 1).首先查询服务器命令行参数 db.serverCmdLineOpts() 2).关闭当前副本 ...

  8. mongodb副本集高可用架构

    一.简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点. Mongodb Driver(客户端)的所有数据都写入Primary,Sec ...

  9. Mongodb副本集+分片集群环境部署记录

    前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...

随机推荐

  1. Java实现 蓝桥杯VIP 算法训练 回文数

    import java.util.Scanner; public class 回文数 { static int time = 0; public static int change(String st ...

  2. java实现机器人行走

    某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). 例如,我们可以对小车输入如下的指令: ...

  3. Java实现信用卡校验

    当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过. 该校验的过程: 1.从卡号最后一位数字开始, ...

  4. 原生js ajax 封装

    首先我们先了解ajax的get和post请求分别是怎样请求数据的 get请求 let ajx = new XMLHttpRequest() //创建ajax实例 /*打开需要请求的地址,可以有三个参数 ...

  5. Nginx解决前端调用后端接口跨域问题

    1.项目中遇到的问题描述: 前端调用zuul统一网关服务接口,请求状态码200,但是无返回数据. 浏览器控制台报错信息:No  Access-Control-Allow-Origin header i ...

  6. springmvc无法进入controller,且报错404

    今天搭建一个springmvc项目时,前台一直报错404,在controller中调试发现程序没有进入controller. 通过多次刷新前台页面,发现第一次进入是会弹出错误提示,第二次之后就直接40 ...

  7. 小师妹学JavaIO之:文件File和路径Path

    简介 文件和路径有什么关系?文件和路径又隐藏了什么秘密?在文件系统的管理下,创建路径的方式又有哪些?今天F师兄带小师妹再给大家来一场精彩的表演. 文件和路径 小师妹:F师兄我有一个问题,java中的文 ...

  8. 为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中?

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于关于常量定义的规约,具体内容如下: 图中的反例是将数据缓存起来,并使用魔法值加链路 id 组成 key,这就可能会出现其他开发人员在复制 ...

  9. 构造函数,拷贝构造和赋值运算符调用时机,explicit,

    #include<iostream> #include <stdio.h> using namespace std; class test{ int mvalue; publi ...

  10. Qt自动生成.rc文件并配置对应属性 程序图标 版本 描述等

    Qt项目配置文件pro里需要如下配置,进行qmake,build后会自动生成.rc文件,并将对应的信息写入文件中 VERSION = 1.0.0.1 RC_ICONS = "http.ico ...