MongoDB复制集
一、配置MongoDB复制集
1、MongoDB复制集概述
(1)什么是复制集
①复制集(Replica Sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复
②优势
1)让数据更安全
2)数据高可用性
3)灾难恢复
4)无停机维护(备份、索引重建、故障转移)
5)读缩放(额外的副本读取)
6)副本集对应用程序是透明的
(2)复制集工作原理
①主节点记录所有变化到oplog日志,辅助节点复制主节点的oplog并将这些日志在辅助节点重做,各个节点之间会定期发送心跳信息,一旦主机宕机,则处罚选举一个新的主节点,剩余辅助节点指向新的主节点
②大多数原则
集群存货节点小于等于二分之一时集群不可写,只可读,是否能选举出新的主节点,是由当前复制集成员存货数量来决定的
③三类节点
1)标准(host)节点:存储数据,可能被选为活跃节点,有选举权
2)被动(passive)节点:有完整腹部,不可能成为活跃节点,有选举权
3)仲裁(arbiter)节点:负责选举,不存储数据,不能充当主从节点
④特点
1)N个节点集群
2)任何节点可作为主节点
3)所有写入操作都在主节点上
4)自动故障转移
5)自动恢复
⑤从节点默认无法读取数据
1)rs.slaveOK():允许从节点读取数据
2、MongoDB复制集部署
(1)配置复制集
①创建数据文件和日志文件目录
1)mkdir -p /data/mongodb{1,2,3,4}/
2)touch /data/logs/mongodb/mongodb{1,2,3,4}.log
3)chmod -R 777 /data/logs/mongodb/*log
②编辑配置文件
1)replSet=fzj
2)修改port及目录设置
③编写服务器脚本,启动4个实例
④初始化配置复制集
1)只有主节点可以有数据,初始化配置在主节点进行
2)cfg={“_id”:”fzj”,”members”:[{“_id”:0,”host”:”192.168.11.101:27017”},
{“_id”:1,”host”:”192.168.11.101:27012”},
{“_id”:0,”host”:”192.168.11.101:27013”}]}
3)rs.initiate(cfg)
⑤查看复制集状态
1)rs.status()
2)health为1代表健康,0代表宕机
3)state为1代表主节点,2代表从节点
(2)增加删除节点
①增加:rs.add(“192.168.11.101:27020”)
②删除:rs.remove(“192.168.11.101:27020”)
3、MongoDB复制集切换
(1)通过kill命令停止复制集当前主节点,然后查看切换结果
(2)手动主从切换
①rs.free(30):暂停30秒不参加选举
②rs.stepDown(60,30):交出主节点位置,并维持从节点状态不少于60秒,等待30秒以使主节点和从节点日志同步
二、MongoDB复制选举原理
1、复制集的选举原理
2、验证复制集选举原理
(1)查看oplog日志:
use local
show collections
db.oplog.rs.find()
(2)配置复制集优先级
①重新配置复制集,设置两个标准节点,一个被动节点和一个仲裁节点
cfg={"_id":"fzj","members":[{"_id":0,"host":"192.168.11.101:27017","priority":100},
{"_id":1,"host":"192.168.11.101:27012","priority":100},{"_id":2,"host":"192.168.11.101:27013","priority":0},
{"_id":3,"host":"192.168.11.101:27014","arbiterOnly":true}]}
(3)模拟节点故障后,复制集会选举第二个标准节点为主节点
(4)当所有标准节点故障后,被动节点也不能成为主节点
三、MongoDB复制集管理
1、配置允许在从节点读取数据:rs.slaveOK()
2、查看复制状态信息
(1)rs.printReplicationInfo()
(2)rs.pringSlaveReplicationInfo()
3、更改oplog大小
(1)oplog默认占用实例5%大小,入职过程中,如果oplog不够大,因为同步时间差,可能导致从节点跟不上主节点。因此需要保证主节点oplog足够大
(2)更改命令:rs.runCommand({"convertToCapped":"oplog.rs","size":102400000})
4、部署认证的复制
(1)编辑所有配置文件添加
clusterAuthMode=keyFile
keyFile=/usr/local/mongodb/bin/.keyfile
(2)生成rskey秘钥文件
openssl rand -base64 102 >/usr/local/mongodb/bin/.keyfile
chmod 600 /usr/local/mongodb/bin/.keyfile