MongoDB复制选举原理及复制集管理
一、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复制选举原理及复制集管理相关推荐
- 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- Java mysql同步复制_MySQL数据的主从复制、半同步复制和主主复制详解
一.MySQL复制概述 ⑴.mysql数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- MongoDB 复制集的选举原理
复制的原理 复制时基于啊哦做日志 oplog , 相当于 MySQL 中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog 日志同步并应用到其他从节点的过程. 选举的原理 ...
- Raft算法的Leader选举和日志复制过程
Raft 简介 Raft 是一种为了管理复制日志的一致性算法.它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得Raft 算法更加容易理解并且更容易构建实际的系统 ...
- MongoDB:高可用基础-副本集原理
文章目录 1.副本集介绍 2.Raft核心流程 3.副本集选举 4.副本集数据复制 5.副本集故障转移 1.副本集介绍 在生产环境中,不建议使用单机版的MongoDB服务器,因为有可能出现单点问题: ...
- Zookeeper在Dubbo中的作用及Zk集群的选举原理
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan Zk在Dubbo中的作用 zk在dubbo中是服务注册与发现的注册中心,dubbo的调用过程是c ...
- Redis集群选举原理与脑裂问题
系列文章目录 第一节 Redis的安装 第二节 Redis的五种数据结构(String.Hash.List.Set.ZSet) 第三节 Redis的持久化方式 第四节 Redis主从架构 第五节 Re ...
- MongoDB在不同主机间复制数据库和集合的教程_MongoDB_脚本之家
MongoDB在不同主机间复制数据库和集合的教程 更新时间:2016年07月04日 15:49:51 作者:lucifercn MongoDB自带了clone一族JavaScript函数来进行数据 ...
- MongoDB在不同主机间复制数据库和集合
MongoDB自带了clone一族JavaScript函数来进行数据的复制,这里我们总结了MongoDB在不同主机间复制数据库和集合的教程,列举出了一些主从复制操作中常用的重要函数: db.clone ...
最新文章
- java 窗口开始_Java窗口(JFrame)从零开始(3)——绝对布局
- python对财务人员的帮助-还不熟练VBA的财务人,让Python带你弯道超车!
- css撑起父元素清除浮动的问题
- 2019杭电暑假多校训练 第六场 Snowy Smile HDU - 6638
- 【未来可能用到】关于模型的100个问答-part1
- Mathematica数据处理(11)--标签
- boost::icl模块interval_map 的最简单示例是重叠计数器
- 携程基于Flink的实时特征平台
- input输入框的input事件和change事件
- macos下使用aria2_macOS下 ansible简单安装及基础使用
- 安全使用网上银行 享受在线购物时尚生活
- Multivariate Linear Regression的参数估计
- Appfuse:扩展自己的GenericManager
- linq分类汇总怎么写_包围结构的字怎么写才好看?掌握方法是关键,分类总结要领很实用...
- android 4.4.2海信电视,ROOT海信电视Android4.0的详细步骤
- bzoj2286: [Sdoi2011消耗战
- 微支付开发(.net)
- 计算机无线网络设备有哪些,电脑无线上网设备有哪几种
- Vue多个元素的过渡
- 多线程测速软件带宽叠加设置
热门文章
- 基于matlab的语音信号基本处理系统,基于matlab的语音信号处理及分析
- 小学五年级计算机备考方案,五年级数学备考计划_备考经验
- hibernate 数据处理
- HTTP协议实体的基本讲解
- 关于[一个基于WF的业务流程平台]表设计的说明
- 读取数据库名及表与表中的字段
- Android中BroadCastReceiver使用(整理)
- IOS之AFNetworking,SDWebImage,Kingfisher,Alamofire,FMDB框架的使用
- 关于使用Nginx服务器发布静态网页或者代理
- android 机顶盒 系统开发入门,读《Android电视机(机顶盒)初次开发的一些经验分享》后的笔记...