返回顶部
首页 > 资讯 > 数据库 >MongoDB中复制选举的原理是什么
  • 243
分享到

MongoDB中复制选举的原理是什么

2024-04-02 19:04:59 243人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关mongoDB中复制选举的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MonGoDB复制集的选举原理MongoDB复制的原理

这期内容当中小编将会给大家带来有关mongoDB中复制选举的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

MonGoDB复制集的选举原理

MongoDB复制的原理

MongoDB的复制是基于操作日志oplog,相当于Mysql中的二进制日志,只记录发生改变的记录。复制是将主节点的oplog日志同步并应用到其他从节点的过程。

MongoDB选举的原理

MongoDB的节点分为三种类型,分别为标准节点(host)、被动节点(passive)和仲裁节点(arbiter)

  • 只有标准节点才有可能被选举为活跃节点(主节点),拥有选举权。被动节点有完整副本,不可能成为活跃节点,具有选举权。仲裁节点不复制数据,不可能成为活跃节点,只有选举权。说白了就是只有标准节点才有可能被选举为主节点,即使在一个复制集中说有的标准节点都宕机,被动节点和仲裁节点也不会成为主节点。后续有示例演示验证。

  • 标准节点与被动节点的区别:priority值高者是标准节点,低者则为被动节点

  • 选举规则是票数高的获胜,priority是优先权0~1000的值,相当于额外增加0~1000的票数。选举结果:票数高者获胜;若票数相同,数据新者获胜。

MongoDB复制集节点间选举所示
MongoDB中复制选举的原理是什么
前文链接
Yum安装MongoDB及数据库管理
配置MongoDB复制集

示例验证复制集选举原理

创建4个实例

创建新实例的path文件和dbpath的文件目录,并为日志文件设置权限
mkdir -p /data/mongodb/logs
//  path目录,因为在安装完成之后就会有一个实例,所以这里我们只需要创建三个实例即可
mkdir -p /data/mongodb/mongo{2,3,4}           //创建dbpath目录
touch /data/mongodb/logs/mongod{2,3,4}.log    //创建日志文件
chmod 777 /data/mongodb/logs/*.log            //为日志文件赋予权限
修改配置文件(/etc/mongod.conf)
path:
dbPath:
  port:
  bindIp:
replication:
  replSetName:      //修改配置文件中这五个项目的值

MongoDB中复制选举的原理是什么

关闭防火墙及selinux防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0
启动实例
mongod -f /etc/mongod.conf

配置复制集

创建有四个节点组成的复制集,创建时设置优先级

本次复制集由四个节点组成,分别包括两个标准节点,一个被动节点,一个仲裁节点。

mongo //=进入数据库
chen={"_id":"chenrs","members":[{"_id":0,"host":"172.16.10.29:27017","priority":100},{"_id":1,"host":"172.16.10.29:27018","priority":100},{"_id":2,"host":"172.16.10.29:27019","priority":0},{"_id":3,"host":"172.16.10.29:27020","arbiterOnly":true}]}

MongoDB中复制选举的原理是什么

初始化复制集
rs.initiate(chen)
查看各节点的的身份
rs.isMaster()

MongoDB中复制选举的原理是什么

查看oplpog日志

此时对数据库进行一些增删改查的操作,注意在oplog日志中不会记录查询的语句,只会记录对数据库进行更改的语句

use stady                                      //使用stady库
db.abc.insert({"id":1,"name":"zhangsan"})      //向表abc中写入一条数据
db.abc.insert({"id":2,"name":"lisi"})          //再次插入一条数据
db.abc.find()                                  //查看表中内容
db.abc.update({"id":2},{$set:{"name":"jack"}}) //修改表数据
db.abc.remove({"id":1}                         //删除表数据
查看oplog中内容
use local
show collections    //可以看到其中有一个oplog.rs文件
db.oplog.rs.find()  
//由于内容过多,在这里就不展示,查看之后就会发现,没有记录查询的记录,只有记录对数据库做更改的操作

模拟主节点故障

关闭主节点
kill -9 + 进程号                         //关闭主节点
mongod -f /etc/mongod4.conf --shutdown   //关闭主节点
mongo --port 27018
chenrs:PRIMARY> rs.status()      //此时该节点已经成为主节点
{
    "set" : "chenrs",
    "date" : ISODate("2018-07-16T05:30:04.152Z"),
    "myState" : 1,
        ···省略部分内容
    "members" : [
            "_id" : 0,
            "name" : "172.16.10.29:27017",
            "health" : 0,                 //健康值为0,处于非活跃状态
            "state" : 8,
            "stateStr" : "(not reachable/healthy)",
        ···省略部分内容
            "_id" : 1,
            "name" : "172.16.10.29:27018",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",    //此时1为主节点
        ···省略部分内容   
            "_id" : 2,
            "name" : "172.16.10.29:27019",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
        ···省略部分内容
            "_id" : 3,
            "name" : "172.16.10.29:27020",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
        ···省略部分内容
        ]
模拟另外一个主节点故障
mongod -f /etc/mongod2.conf --shutdown
mongo --port 27019
chenrs:SECONDARY> rs.status()     //仍处于secondary状态
{
    "set" : "chenrs",
    "date" : ISODate("2018-07-16T05:40:09.740Z"),
    "members" : [
        {
            "_id" : 0,
            "name" : "172.16.10.29:27017",
            "health" : 0,
            "state" : 8,
            "stateStr" : "(not reachable/healthy)",
            ···省略部分内容
            "_id" : 1,
            "name" : "172.16.10.29:27018",
            "health" : 0,
            "state" : 8,
            "stateStr" : "(not reachable/healthy)",
        ···省略部分内容
            "_id" : 2,
            "name" : "172.16.10.29:27019",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",          //即使两个标准节点都处于宕机状态,被动节点和仲裁节点也没有成为主节点
        ···省略部分内容
            "_id" : 3,
            "name" : "172.16.10.29:27020",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
        ]
        ···省略部分内容

MongoDB复制集管理

配置允许在从节点读取数据

默认MongoDB复制集的从节点是不能读取数据的,但是可以使用密令来允许能够在从节点读取数据

rs.slaveOk()    //允许从节点能够读取数据

查看复制集状态信息

rs.help 
rs.printReplicationInfo()        //查看oplog日志文件的大小及时间范围
rs.printSlaveReplicationInfo()   //查询节点及节点复制的时间

MongoDB中复制选举的原理是什么

调整oplog日志文件大小

如果节点属于复制集成员,此时你想要修改oplog的大小是不被允许的,所以要将节点移出复制集想要修改日志文件的默认大小。此时要做的是首先要关闭节点的服务,然后退出复制集

关闭节点服务(属于离线升级)
use admin            //在复制集的从节点上做
db.shutdownServer()  //关闭服务,此时再想登陆该节点则会失败
节点退出复制集

注销掉replication的值和修改port值,将其作为单实例启动

vim /etc/mongod2.conf
#replication:
#  replSetName: chenrs
port: 27028
mongod -f /etc/mongod2.conf   //启动实例,此时该实例不属于复制集
完全备份oplog日志
mongodump --port 27028 --db local --collection 'oplog.rs'   //在linux界面操作
删除节点中oplog文件
> use local
> db.oplog.rs.drop()
重建oplog日志
db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )
再次关闭节点服务
use admin
db.shutdownServer()
将节点加入到复制集

回调参数,同时要加一个参数指定日志文件大小

vim /etc/mongod2.conf
replication:
  replSetName: chenrs
  oplogSizeMB: 2048    //单位为兆
mongod -f /etc/mongod2.conf      //启动实例
mongo -port 27018                //进入实例

MongoDB中复制选举的原理是什么

查看oplog大小
rs.printReplicationInfo()

对于日志文件大小的更改,只对该节点生效,其他节点仍然是默认值
MongoDB中复制选举的原理是什么

部署认证复制

创建管理用户
use admin
db.createUser({"user":"root","pwd":"123123","roles":["root"]})

MongoDB中复制选举的原理是什么

配置密钥验证

为了使其他的节点还能够和主节点进行同步,创建密钥文件使其他节点能够同步

  • 创建验证文件

    # cd /usr/bin/
    # echo "chenrs key"> chenrskey1
    # echo "chenrs key"> chenrskey2
    # echo "chenrs key"> chenrskey3
    # echo "chenrs key"> chenrskey4    //密钥内容自定义,但是要保证内容的一致性
    # chmod 600 chenrskey{1..4}        //设置文件权限,不设置在接下来的启动中会报错
  • 修改配置文件,开启mongodb的安全验证功能(四个配置文件都要修改,注意内容差异)

    vim /etc/mongod.conf
    security:
    keyFile: /usr/bin/chenrskey1     //每个节点的验证文件不同,要根据不同的节点修改
    clusterAuthMode: keyFile        //认证类型,密钥文件认证

    MongoDB中复制选举的原理是什么

  • 重启服务

    mongod -f /etc/mongod.conf --shutdown
    mongod -f /etc/mongod.conf              /其他几台的重启方式都相同,重复操作即可

    身份验证登陆(先验证主,再验证从)

    当你直接使用登陆命令登陆系统时,使用show dbs 是不能够查看数据的,此时就需要使用身份验证

    mongo --port 27018
    use admin
    db.auth("root","123123")

    MongoDB中复制选举的原理是什么

上述就是小编为大家分享的MongoDB中复制选举的原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB中复制选举的原理是什么

本文链接: https://lsjlt.com/news/56475.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MongoDB中复制选举的原理是什么
    这期内容当中小编将会给大家带来有关MongoDB中复制选举的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MongoDB复制集的选举原理MongoDB复制的原理...
    99+
    2024-04-02
  • MongoDB复制集选举原理管理
    MongoDB 复制集概述 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了沉余添加了数据可用性,通过个复制集可以对硬件故障中断的服务进行恢复 复制集的优势如下: 让数据更安全。 高...
    99+
    2024-04-02
  • MongoDB复制选举原理以及复制集的管理
    MongoDB复制集的节点是通过选举产生主节点的。复制的原理:复制是基于操作日志oplog,相当于MySQL的二进制日志,只记录发生改变的记录。复制将主节点的oplog日志同步并应用到其他从节点的过程选举的...
    99+
    2024-04-02
  • mongodb选举原则是什么
    MongoDB选举原则是基于副本集的架构,其中包括主节点和多个副本节点。选举原则是确保主节点的高可用性和可靠性。MongoDB的选举...
    99+
    2023-09-01
    mongodb
  • MongoDB中复制集的原理是什么
    这篇文章给大家介绍MongoDB中复制集的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。复制集简介Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primar...
    99+
    2024-04-02
  • MongoDB复制集的选举原理详解以及复制集管理简介
    前言介绍复制的原理:复制操作是基于oplog,类似mysql中的bin-log,只记录发生改变的记录。选举的原理:节点分为:标准节点、被动节点和仲裁节点。标准节点(priority值高):只有标准节点才可成...
    99+
    2024-04-02
  • MongoDB中复制集集群的原理是什么
    这篇文章给大家介绍MongoDB中复制集集群的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。复制集介绍MongoDB中的复制集(也被称为副本)是一组维护相同数据集的mongo...
    99+
    2024-04-02
  • mongodb主从复制的原理是什么
    MongoDB的主从复制是一种数据复制机制,它允许将数据从一个主节点复制到一个或多个从节点。主从复制的原理如下: 主节点(Prim...
    99+
    2024-04-09
    mongodb
  • ZooKeeper的选举机制是什么
    ZooKeeper的选举机制是基于ZAB(ZooKeeper Atomic Broadcast)协议的。在ZooKeeper集群中,...
    99+
    2024-04-02
  • MySQL中复制机制的原理是什么
    MySQL中复制机制的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。背景介绍复制,就是对数据的完整拷贝,说到为什么要...
    99+
    2024-04-02
  • java中枚举的原理是什么
    java中枚举的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3...
    99+
    2023-06-14
  • elasticsearch的master选举机制是什么
    Elasticsearch的主节点选举机制是通过Zen Discovery和Unicast Discovery两个插件来实现的。 Z...
    99+
    2023-10-23
    elasticsearch master
  • zookeeper的Leader选举机制是什么
    本篇内容主要讲解“zookeeper的Leader选举机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“zookeeper的Leader选举机制是什么”吧!zookeeper一个分布式服务...
    99+
    2023-07-05
  • Mongodb中oplog的原理是什么
    Mongodb中oplog的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Oplog 是 MongoDB 实现复制集的关键数据结...
    99+
    2024-04-02
  • MongoDB中writeConcern的原理是什么
    MongoDB中writeConcern的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 MongoDB...
    99+
    2024-04-02
  • mysql复制的原理是什么
    今天就跟大家聊聊有关mysql复制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1 复制概述   &nbs...
    99+
    2024-04-02
  • MySQL中主从复制的原理是什么
    MySQL中主从复制的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。0. 主从复制首先主从复制是什么简单来说是让一台MySQL服务器...
    99+
    2024-04-02
  • MySql中主从复制机制的原理是什么
    今天就跟大家聊聊有关MySql中主从复制机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。主从复制机制MySQL基于binlog实现主从复制,从节点跟踪并获取主节点bin...
    99+
    2023-06-14
  • java中枚举类型的原理是什么
    java中枚举类型的原理是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面...
    99+
    2023-06-14
  • redis集群选举机制是什么
    Redis集群的选举机制是基于Raft算法的一种实现。在Redis集群中,每个节点都有可能成为领导者(leader),而其他节点则成...
    99+
    2024-04-09
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作