MongoDB数据库——MongoDB复制集

MongoDB复制集

什么是MongoDB复制集?

复制集是由一组拥有相同数据集的mongodb实例所组成的集群,在多台服务器之间同步数据,(差不多跟MySQL的主从复制一个概念)

复制集的优点:1.数据安全性更高,灾难恢复

                          2.数据可用性大,无需停机维护(比如备份、索引重建、故障转移)

                          3.读缩放(额外的副本读取),副本集对应用程序是透明的

复制集的工作原理(如下图所示)

MongoDB的复制集由多个节点构成(至少两个节点),其中一个是主节点,负责处理客户端的请求,其余的都是从节点,负责复制主节点上的数据

MongoDB一般由一主一从或者一主多从的方式搭配,主节点记录所有操作到oplog上,从节点再定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,保证和主节点的数据保持一致

复制集的选举原理

节点类型分为三种:

标准节点(host):存储数据,可能被选为活跃(primary)节点,有选举权

被动节点(passive):被动节点有完整副本,不可能成为活跃节点,有选举权

仲裁节点(arbiter):负责选举,不存储数据,不能充当主从节点

选举的规则:

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

2.标准节点和被动节点的区别:priority的值高的是标准节点,低的是被动节点

3.选举最后得票高的人获胜,priority的优先权为0~1000之间,相当于额外增加这么多票

配置搭建MongoDB复制集

1.下载安装完MongoDB后创建4个实例并启动(如下图所示)

2.编辑主配置文件

vim /usr/local/mongodb/bin/mongodb1.conf

注意:replSet这个参数的值后面会使用到

其他的配置文件修改一下port、dbpath、logpath参数即可

3.初始化配置复制集并登录

alias mongo="/usr/local/mongodb/bin/mongo"mongo

> cfg={"_id":"wmz","members":[{"_id":0,"host":"192.168.0.102:27017"},{"_id":1,"host":"192.168.0.102:27018"},
{"_id":2,"host":"192.168.0.102:27019"}]}

补充:可以在配置的时候设置节点,比如

> cfg={"_id":"wmz","members":[{"_id":0,"host":"192.168.0.102:27017","priority":100},{"_id":1,"host":"192.168.0.102:27018","priority":100},
{"_id":2,"host":"192.168.0.102:27019","priority":0},{"_id":2,"host":"192.168.0.102:27019","arbiterOnly":true}]}

重新设置复制集:> rs.reconfig()

查看复制集的选举状态:> rs.isMaster()

4.查看复制集状态信息:> rs.status()

PRIMARY的状态:

两个SECONDARY的状态

注意:health1代表健康0代表宕机state1代表主节点,为2代表从节点

5.手动添加节点:> rs.add()

添加成功如下图:

删除节点:> rs.remove()

删除成功如下图:

5.测试故障自动转移

停止mongodb1的运行

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb1.conf --shutdown

确定27017端口的主节点停止

登录27018端口登录进入MongoDB数据库查看状态

mongo --port 27018

发现192.168.0.102:27018变成了主节点PRIMARY则说明成功

模拟故障还可以使用下面的命令

rs.freeze(30)      //暂停30s不参与选举
rs.stepDown(60,30)   //告诉主节点交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步

从节点默认无法读取数据:> rs.slaveOK()

复制集的管理

手动添加删除节点服务器

> rs.add()和> rs.remove()

查看复制状态信息

> rs.printReolicationInfo()

> rs.printSlaveReplicationInfo()

oplog日志

查看日志状态信息:> db.oplog.rs.stats()

更改oplog的大小:> db.runCommand()

复制集认证

认证方式:

通过配置auth参数来开启权限认证,但这种认证方式只适合单机节点,当我们使用复制集时应该怎么开启权限认证来保证复制集的

单点认证

vim /usr/local/mongodb/bin/mongodb1.conf

auth=true

keyFile认证

1.修改配置文件:vim /usr/local/mongodb/bin/mongodb1.conf

clusterAuthMode=keyFile

keyFile=/usr/local/mongodb/.keyFile

2.创建kgcrskey文件加入内容

touch /usr/local/mongodb/.keyFile

3.配置keyFile文件再给权限

文件中的具体内容其实就是一行字符串,但复制集对keyFile文件有所要求

内容:以base64编码集中中的字符进行编写,即字符串只能包含a-z、A-Z、+、/

长度不能超过1000字节

权限最多到600 ,权限至少 chmod 600 keyFile

openssl rand -base64 102 > /usr/local/mongodb/.keyFile

chmod 600 /usr/local/mongodb/.keyFile 

注意:每个节点都要进行该操作

发布了37 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/feili12138/article/details/104914165