1. 如何设计副本集

大多数:选取主节点时需要由大多数决定,主节点只有在得到大多数支持时才能继续作为主节点,写操作被复制到大多数成员时就是安全的写操作。这里的大多数定义为“副本集中一半以上的成员”,由此可看一般设置为奇数,如3个节点

2. 如何进行选举

MongoDB在3.2版本中引入了第一版复制协议。基于RAFT共识协议,并且包含一些特定于MongoDB的副本集概念,比如仲裁节点、优先级、非选举成员、写入关注点等。它还通过term ID来防止重复投票。

副本集成员间每隔两秒发送一次心跳(ping),如果某个成员10秒内没有反馈心跳,则其他成员将不良成员标记为无法访问。选举算法尽最大努力尝试让最高优先权的从节点发起选举,也更可能成为主节点。

3. 成员配置选项
3.1 优先级

priority优先级为0的成员永远不能成为主节点。这样的成员被称为被动成员。

study:PRIMARY> rs.add({'host': 'localhost:27018', 'priority': 1.5})
// 停掉主节点,然后查看新选取的主节点,可以看到localhost:27018已为主节点
3.2 隐藏成员
study:PRIMARY> rs.isMaster()
{
"hosts" : [
"localhost:27019",
"localhost:27020",
"localhost:27021",
"localhost:27018"
]
}
study:PRIMARY> var config = rs.config()
study:PRIMARY> config.members[2].hidden=true
true
study:PRIMARY> config.members[2].priority=0
0
study:PRIMARY> rs.reconfig(config)
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1657435250, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1657435250, 2)
}
# 再次执行可以看到localhost:27021已隐藏
study:PRIMARY> rs.isMaster()
{
"hosts" : [
"localhost:27019",
"localhost:27020",
"localhost:27018"
]
}

使用rs.status()和rs.config()能够看到隐藏成员,隐藏成员对isMaster()不可见。当客户端连接到副本集时,会调用isMaster来查看副本集中的成员。因此,隐藏成员永远不会收到客户端的读请求

3.3 选举仲裁者
mongod --replSet study --dbpath /home/data/arb --port 27022 --oplogSize 200
study:PRIMARY> rs.addArb('localhost:27022')

成员一旦已仲裁者身份被添加到副本集,它就永远只能是仲裁者,无法将仲裁者重新配置为非仲裁者

  • 最多只能使用使用一个仲裁者 如果节点数量为奇数,那就不需要仲裁者
  • 如果数据集有两个普通成员与一个仲裁者,如果一个数据成员停止运行了(数据无法恢复),呢么就需要一个新的从节点,呢么主节点的数据副本复制到新的从节点服务器压力会很大。仲裁者毕竟不存储数据副本,只仲裁~~
3.4 创建索引

如果从节点仅仅备份数据或脱机批量处理作业,则可以指定buildIndexes: false,此选项防止从节点创建任何索引。这也是永久性设置,不可重新配置为普通的创建索引的成员,同样要求优先级为0

欢迎关注公众号算法小生沈健的技术博客

9.MongoDB系列之创建副本集(二)的更多相关文章

  1. 8.MongoDB系列之创建副本集(一)

    1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...

  2. Mongodb 笔记05 创建副本集

    创建副本集 1. 副本集:副本集时一组服务器,其中有一个主服务器(primary),用于处理客户端请求:还有多个备份服务器(secondary),用于保存主服务器的数据副本.如果主服务器崩溃了,备份服 ...

  3. mongodb 系列 ~ mongo的副本集(3)

    一 简介:今天咱们来聊聊mongodb复制的具体一些案例 二 副本集 1 当mongodb采用全量复制时,如何观察全量复制的进度 对比文件本身和primary大小 2 mongodb全量复制的过程 旧 ...

  4. mongodb 系列 ~ mongo的副本集(2)

    一 简介:来试试更改副本集的oplog问题二 背景: oplog的作用类似于mysql的binlog,传递增量操作到从节点 三 oplog介绍   1 oplog在local库:      1 mas ...

  5. MongoDB系列之三(副本集配置)

    今天我测试了一下MongoDB的副本集的配置. 首先从概念上说一下MongoDB副本集和主从复制的区别.其实副本集(Replica Set)是主从复制的高级形式.高级在哪里呢?主动复制实现了数据备份+ ...

  6. 11.MongoDB系列之连接副本集

    1. Python连接副本集 from pymongo import MongoClient from bson.codec_options import CodecOptions from retr ...

  7. mongodb创建副本集命令

    mongodb创建副本集命令 ./mongod --replSet spock --dbpath ../data --smallfiles > config ={... "_id&qu ...

  8. MongoDB 带访问控制的副本集部署

    当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4  Centos6.5  一. 下载安装 MongoDB Server 及 ...

  9. MongoDB 删除,添加副本集,并修改副本集IP等信息

    MongoDB 删除,添加副本集,并修改副本集IP等信息 添加副本,在登录到主节点下输入 rs.add("ip:port"); 删除副本 rs.remove("ip:po ...

随机推荐

  1. 使用flex弹性布局代替传统浮动布局来为微信小程序写自适应页面

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_109 我们知道,写习惯了前端的人,一般切图后布局页面的话,上手最习惯的是基于盒子模型的浮动布局,依赖 display 属性 + p ...

  2. 查找默认安装的python路径,并输出到 FindPythonPathX_output.txt

    在python程序设计教学中,在汉化IDEL时.为PyCharm项目设置解释器时,经常需要查找python安装路径.对老手来说很简单,但对很多刚开始学习编程的学生来说,则很困难.所以,编写了一个批处理 ...

  3. 解决linux下U盘变成只读模式

    在最近的一个项目里,需要将linux下的些文件拷贝出来.插入U盘后,发现是只读模式. U盘可以写出,不能写入. 折腾了一翻: 最后这样解决的: 将U盘插入到windows下 执行 chkdsk g: ...

  4. 创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1

    8 月 9 日下午,2022 中关村国际前沿科技创新大赛"中关村银行杯"大数据与云计算领域决赛在北京市门头沟区中关村(京西)人工智能科技园·智能文创园落下了帷幕.SphereEx ...

  5. 436. 寻找右区间--LeetCode_二分

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-right-interval 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出 ...

  6. hotspot算法实现 <<深入理解Java虚拟机>>

    1.枚举根节点 解决何时枚举,不需要实时的枚举,oopMap数据结构对象存储枚举信息 对象引用发生变化,需要存储每一条指令到OOPMap吗,,几百M的对象耗时需要很大的内存.GC空间成本 2.安全点: ...

  7. 【美国血统 American Heritage 题解】已知前序中序 求后序

    题目: 题目名称:美国血统 American Heritage 题目来源:美国血统 American Heritage ## 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的 ...

  8. Mybatis-Plus高级之LambdaQueryWrapper,Wrappers.<实体类>lambdaQuery的使用

    一.前言 小编今天又来分享干货了,绝对的干净又卫生,大伙请放心食用哈!Mybatis-Plus我们经常使用,但是里面的很多功能,小编开始只是知道一点点,做个增删改查没问题.小编在新项目中发现,大神们不 ...

  9. MongoDB,入门看这一篇足矣!

    一.介绍 在介绍 MongoDB 之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识! 最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消息的时候,原来的做法 ...

  10. KingbaseES R6 集群创建流复制只读副本库案例

    一.环境概述 [kingbase@node2 bin]$ ./ksql -U system test ksql (V8.0) Type "help" for help. test= ...