首页 > 数据库 >9.MongoDB系列之创建副本集(二)

9.MongoDB系列之创建副本集(二)

时间:2022-10-16 18:47:23浏览次数:65  
标签:副本 MongoDB 成员 仲裁者 创建 study 节点 localhost

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

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

标签:副本,MongoDB,成员,仲裁者,创建,study,节点,localhost
From: https://www.cnblogs.com/shenjian-online/p/16796728.html

相关文章

  • 10.MongoDB系列之副本集组成
    1.同步复制是指多台服务器保持相同的数据副本。MongoDB通过保存操作日志(oplog)实现复制功能。oplog存在于主节点local数据库中的一个固定集合,包含了主节点执行的每一次......
  • Docker安装MongoDB并使用Navicat连接
    MongoDB简介:MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间......
  • MongoDb基本命令
    基本命令查看当前有哪些数据库#方法1showdatabases#方法2showdbs创建数据库/选择数据库usetest2#如果当前没有test2数据库就会创建test2并切换,有的话直接......
  • 创建Django项目的两种方式
    有两种方式可创建django项目:方式一:命令行1.cmd命令行,进入到指定的目录,执行:django-adminstartproject mydiary【mydiary为项目名】,创建成功之后,出现如下:mydiary/......
  • DEMO: MIRO 根据物料创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
    QQ群:SAP干货铺, 群号:775662808所有群管理严格,严格禁止一切外来链接、招聘、广告等垃圾信息!MIRODemo*&---------------------------------------------------------------......
  • DEMO: MIRO 根据退货PO创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
    QQ群:SAP干货铺, 群号:775662808所有群管理严格,严格禁止一切外来链接、招聘、广告等垃圾信息!POMIRO或者不勾选计算税额,手动输入税额。demo*&-----------------------------......
  • 在运行时创建一个对话框模板
    在之前的系列文章中,我们花了很长一段时间来学习了对话框模板和对话框管理器。现在,让我们将之前所需到的各个知识点融合一下,来做一些有意思的事情,例如:在程序运行期间创建一......
  • Mongodb安装
    下载地址https://www.mongodb.com/try/download/community安装步骤先安装依赖sudoyuminstalllibcurlopensslxz-libs解压tar包tar-zxvfmongodb-linux-*-5......
  • Ansible 创建用户配置密码通过哈希加密的方式
    创建用户配置密码通过哈希加密的方式  [libin@libinansible]$vimrhca447-26.yaml----name:createuserandset  hosts:web  tasks:  -name:c......
  • 6.MongoDB系列之特殊索引和集合类型
    1.地理空间索引及全文搜索与Elasitcsearch一样,MongoDB同样支持地理空间索引及全文搜索,由于选型常用ES而非MongoDB此处略过2.TTL索引首先先了解下固定集合,其类似于循......