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. 虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_183 2021年,对于正在找工作的朋友来说,笼罩在新冠肺炎疫情之下,今年的就业季显得更加具有挑战性,更有意思的是,每当这个时候,各 ...

  2. Python数据分析--Numpy常用函数介绍(9)-- 与线性代数有关的模块linalg

    numpy.linalg 模块包含线性代数的函数.使用这个模块,可以计算逆矩阵.求特征值.解线性方程组以及求解行列式等.一.计算逆矩阵 线性代数中,矩阵A与其逆矩阵A ^(-1)相乘后会得到一个单位矩 ...

  3. 用VS Code搞Qt6:至简窗口部件——QWidget

    在正题开始之前,老周照例扯点别的.嗯,咱们扯一下在 VS 2022 下结合 CMake 开发 Qt6 时的环境变量设置问题.在VS Code 中,通够通过 CMake Tools 扩展的配置来设置环境 ...

  4. PerfView专题 (第四篇):如何寻找 C# 中程序集泄漏

    一:背景 前两篇我们都聊到了非托管内存泄漏,一个是 HeapAlloc ,一个是 VirtualAlloc,除了这两种泄漏之外还存在其他渠道的内存泄漏,比如程序集泄漏,这一篇我们就来聊一聊. 二: 程 ...

  5. [网鼎杯 2018]Comment-1|SQL注入|二次注入

    1.打开之后只有一个留言页面,很自然的就想到了二次注入得问题,顺带查看了下源代码信息,并没有什么提示,显示界面如下: 2.那先扫描一下目录,同时随便留言一个测试以下,但是显示需要登录,账户.密码给出了 ...

  6. 「题解报告」P4577 [FJOI2018]领导集团问题

    题解 P4577 [FJOI2018]领导集团问题 题解区好像没有线段树上又套了二分的做法,于是就有了这片题解. 题目传送门 怀着必 WA 的决心交了两发,一不小心就过了. 题意 求一个树上最长不下降 ...

  7. hadoop 文件参数配置

    准备环境(省略) 上传实验所需的压缩包 配置网络信息 修改主机名 配置域名解析 关闭防火墙与SELinux(在所有节点上执行)代码如下: systemctl disable --now firewal ...

  8. HBase概念入门

    HBase简介 HBase基于Google的BigTable论文而来,是一个分布式海量列式非关系型数据库系统,可以提供大规模数据集的实时随机读写. 下面通过一个小场景认识HBase存储.同样的一个数据 ...

  9. 声明式HTTP客户端-Feign 使用入门详解

    什么是 OpenFeign OpenFeign (以下统一简称为 Feign) 是 Netflix 开源的声明式 HTTP 客户端,集成了 Ribbon 的负载均衡.轮询算法和 RestTemplat ...

  10. Spark 读取HDFS csv文件并写入hive

    package com.grady import org.apache.spark.SparkConf import org.apache.spark.sql.{Row, SaveMode, Spar ...