一、MongoDB复制集的选举原理

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

复制集的节点是通过选举产生的。节点类型分为标准节点、被动节点和仲裁节点。

(1)只有标准节点可能被选举为活跃节点,有选举权。被动节点有完整副本,不可能成为活跃节点,有选举权。仲裁节点不复制数据,不可能成为活跃节点,只有选举权。

(2)priority值高者是标准节点,低者则为被动节点。

1.配置复制集的优先级

配置4个节点的复制集,设置两个标准节点,一个被动节点和一个仲裁节点。

> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.113.177:27017","priority":100},{"_id":1,"host":"192.168.113.177:27018","priority":100},{"_id":2,"host":"192.168.113.177:27019","priority":0},{"_id":3,"host":"192.168.113.177:27020","arbiterOnly":true}]}
> rs.initiate(cfg)  //启动复制集kgcrs:PRIMARY> rs.isMaster()   //查看节点状态

2.在主节点上对数据进行操作,查询oplog日志

kgcrs:PRIMARY> use kgckgcrs:PRIMARY> db.t1.insert({"id":1,"name":"tom"})kgcrs:PRIMARY> db.t1.insert({"id":2,"name":"jerry"})kgcrs:PRIMARY> db.t1.find()kgcrs:PRIMARY> db.t1.update({"id":2},{$set:{"name":"jack"}})kgcrs:PRIMARY> db.t1.remove({"id":1})

在MongoDB的local数据库中可以查看oplog日志。


kgcrs:PRIMARY> use localkgcrs:PRIMARY> show collectionsoplog.rs    //显示kgcrs:PRIMARY> db.oplog.rs.find()

3.模拟主节点故障

如果主节点出现故障,另一个标准节点将会选举成为新的主节点。

[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown
killing process with pid: 6653
[root@localhost ~]# mongo --port 27018
kgcrs:PRIMARY> rs.status()

4.模拟所有标准节点都出现故障

如果所有标准节点都出现故障,被动节点也不能成为主节点。

[root@localhost ~]# mongod -f /etc/mongod2.conf --shutdown
killing process with pid: 6685
[root@localhost ~]# mongo --port 27019
kgcrs:SECONDARY> rs.status()

二、MongoDB复制集管理

复制集管理包括配置从节点可以读取数据、查看复制集状态信息、更改oplog大小、配置带认证的复制集。

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

默认MongoDB复制集的从节点不能读取数据,可以使用rs.slaveOk()命令允许能够在从节点读取数据。

重新启动两个标准节点,连接到复制集的其中一个从节点,配置其允许读取数据。

mongod -f /etc/mongod.conf
mongod -f /etc/mongod2.conf 
[root@localhost ~]# mongo --port 27018
kgcrs:SECONDARY> show dbs

kgcrs:SECONDARY> rs.slaveOk()
kgcrs:SECONDARY> show dbs

2.查看复制状态信息

可以使用rs.printReplicationInfo()和rs.printSlaveReplicationInfo()命令来查看复制集状态。

kgcrs:SECONDARY> rs.help()
kgcrs:SECONDARY>  rs.printReplicationInfo()
configured oplog size:   990MB
log length start to end: 2974secs (0.83hrs)
oplog first event time:  Tue Jul 17 2018 14:36:27 GMT+0800 (CST)
oplog last event time:   Tue Jul 17 2018 15:26:01 GMT+0800 (CST)
now:                     Tue Jul 17 2018 15:26:02 GMT+0800 (CST)
kgcrs:SECONDARY> rs.printSlaveReplicationInfo()
source: 192.168.113.177:27018syncedTo: Tue Jul 17 2018 15:26:11 GMT+0800 (CST)-10 secs (0 hrs) behind the primary
source: 192.168.113.177:27019syncedTo: Tue Jul 17 2018 15:26:01 GMT+0800 (CST)0 secs (0 hrs) behind the primary
kgcrs:SECONDARY> 

3.更改oplog大小

以修改从节点27018的oplog大小为例。

(1)先退出复制集,以单实例启动

kgcrs:SECONDARY> use admin
kgcrs:SECONDARY> db.shutdownServer()

在配置文件注销replication:相关启动参数,并修改port端口号27028

vim /etc/mongod2.conf# replication:       # replSetName: kgcrsport: 27028:

以单实例启动27028节点

[root@localhost ~]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 9954
child process started successfully, parent exiting

(2)创建新的oplog记录,配置其大小

全备当前节点的所有oplog记录

[root@localhost ~]# mongodump --port 27028 --db local --collection 'oplog.rs'
2018-07-17T15:54:20.600+0800    writing local.oplog.rs to
2018-07-17T15:54:20.604+0800    done dumping local.oplog.rs (364 documents)

进入实例27028,创建新的oplog集合。

[root@localhost ~]# mongo --port 27028
> use local
> db.oplog.rs.drop()
> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )

重新把单实例27028加入复制集,修改配置文件

> use admin
> db.shutdownServer()  //关掉服务vim /etc/mongod2.confport: 27018  //端口号重新改回27018
replication:replSetName: kgcrsoplogSizeMB: 2048  //oplog的大小2048M

重新启动27018实例,并进入实例

[root@localhost ~]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 10295
child process started successfully, parent exiting
[root@localhost ~]# mongo --port 27018
kgcrs:SECONDARY> 

要使实例27018变成主节点,需要将主节点27017退出选举。

[root@localhost ~]# mongo
kgcrs:PRIMARY> rs.stepDown() //有效产生选举
kgcrs:SECONDARY> 
[root@localhost ~]# mongo --port 27018
kgcrs:PRIMARY> 

4.部署认证的复制

(1)在主节点创建用户认证

kgcrs:PRIMARY> use admin
kgcrs:PRIMARY> db.createUser({"user":"root","pwd":"123","roles":["root"]})

(2)编辑4个配置文件去设置密钥文件

vim /etc/mongod.confsecurity:keyFile: /usr/bin/kgcrskey1clusterAuthMode: keyFile
vim /etc/mongod2.conf
vim /etc/mongod3.conf
vim /etc/mongod4.conf

(3)生成4个实例的密钥文件,并设置权限

[root@localhost ~]# cd /usr/bin/[root@localhost bin]# echo "kgcrs key"> kgcrskey1
[root@localhost bin]# echo "kgcrs key"> kgcrskey2
[root@localhost bin]# echo "kgcrs key"> kgcrskey3
[root@localhost bin]# echo "kgcrs key"> kgcrskey4
[root@localhost bin]# chmod 600 kgcrskey{1..4}

(4)依次重启4个实例

mongod -f /etc/mongod.conf --shutdown
mongod -f /etc/mongod.conf mongod -f /etc/mongod2.conf --shutdown
mongod -f /etc/mongod2.conf mongod -f /etc/mongod3.conf --shutdown
mongod -f /etc/mongod3.conf mongod -f /etc/mongod4.conf --shutdown
mongod -f /etc/mongod4.conf 

(5)进入主节点查看数据库和复制集

kgcrs:PRIMARY> show dbs
kgcrs:PRIMARY> rs.status()

没有进行身份登录验证,直接查看,结果如下:

kgcrs:PRIMARY> use admin    #身份登录验证
kgcrs:PRIMARY> db.auth("root","123")

进行身份登录后,查看,结果如下:

转载于:https://blog.51cto.com/11134648/2146036

MongoDB复制选举原理及复制集管理相关推荐

  1. 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  2. Java mysql同步复制_MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.mysql数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  3. MongoDB 复制集的选举原理

    复制的原理         复制时基于啊哦做日志 oplog , 相当于 MySQL 中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog 日志同步并应用到其他从节点的过程. 选举的原理 ...

  4. Raft算法的Leader选举和日志复制过程

    Raft 简介 Raft 是一种为了管理复制日志的一致性算法.它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得Raft 算法更加容易理解并且更容易构建实际的系统 ...

  5. MongoDB:高可用基础-副本集原理

    文章目录 1.副本集介绍 2.Raft核心流程 3.副本集选举 4.副本集数据复制 5.副本集故障转移 1.副本集介绍 在生产环境中,不建议使用单机版的MongoDB服务器,因为有可能出现单点问题: ...

  6. Zookeeper在Dubbo中的作用及Zk集群的选举原理

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan Zk在Dubbo中的作用 zk在dubbo中是服务注册与发现的注册中心,dubbo的调用过程是c ...

  7. Redis集群选举原理与脑裂问题

    系列文章目录 第一节 Redis的安装 第二节 Redis的五种数据结构(String.Hash.List.Set.ZSet) 第三节 Redis的持久化方式 第四节 Redis主从架构 第五节 Re ...

  8. MongoDB在不同主机间复制数据库和集合的教程_MongoDB_脚本之家

    MongoDB在不同主机间复制数据库和集合的教程 更新时间:2016年07月04日 15:49:51   作者:lucifercn MongoDB自带了clone一族JavaScript函数来进行数据 ...

  9. MongoDB在不同主机间复制数据库和集合

    MongoDB自带了clone一族JavaScript函数来进行数据的复制,这里我们总结了MongoDB在不同主机间复制数据库和集合的教程,列举出了一些主从复制操作中常用的重要函数: db.clone ...

最新文章

  1. java 窗口开始_Java窗口(JFrame)从零开始(3)——绝对布局
  2. python对财务人员的帮助-还不熟练VBA的财务人,让Python带你弯道超车!
  3. css撑起父元素清除浮动的问题
  4. 2019杭电暑假多校训练 第六场 Snowy Smile HDU - 6638
  5. 【未来可能用到】关于模型的100个问答-part1
  6. Mathematica数据处理(11)--标签
  7. boost::icl模块interval_map 的最简单示例是重叠计数器
  8. 携程基于Flink的实时特征平台
  9. input输入框的input事件和change事件
  10. macos下使用aria2_macOS下 ansible简单安装及基础使用
  11. 安全使用网上银行 享受在线购物时尚生活
  12. Multivariate Linear Regression的参数估计
  13. Appfuse:扩展自己的GenericManager
  14. linq分类汇总怎么写_包围结构的字怎么写才好看?掌握方法是关键,分类总结要领很实用...
  15. android 4.4.2海信电视,ROOT海信电视Android4.0的详细步骤
  16. bzoj2286: [Sdoi2011消耗战
  17. 微支付开发(.net)
  18. 计算机无线网络设备有哪些,电脑无线上网设备有哪几种
  19. Vue多个元素的过渡
  20. 多线程测速软件带宽叠加设置

热门文章

  1. 基于matlab的语音信号基本处理系统,基于matlab的语音信号处理及分析
  2. 小学五年级计算机备考方案,五年级数学备考计划_备考经验
  3. hibernate 数据处理
  4. HTTP协议实体的基本讲解
  5. 关于[一个基于WF的业务流程平台]表设计的说明
  6. 读取数据库名及表与表中的字段
  7. Android中BroadCastReceiver使用(整理)
  8. IOS之AFNetworking,SDWebImage,Kingfisher,Alamofire,FMDB框架的使用
  9. 关于使用Nginx服务器发布静态网页或者代理
  10. android 机顶盒 系统开发入门,读《Android电视机(机顶盒)初次开发的一些经验分享》后的笔记...