欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MongoDB数据库——MongoDB复制集

程序员文章站 2022-05-09 09:24:06
...

MongoDB复制集

什么是MongoDB复制集?

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

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

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

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

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

MongoDB数据库——MongoDB复制集

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

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

复制集的选举原理

节点类型分为三种:

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

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

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

选举的规则:

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

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

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

配置搭建MongoDB复制集

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

MongoDB数据库——MongoDB复制集

2.编辑主配置文件

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

MongoDB数据库——MongoDB复制集

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

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

MongoDB数据库——MongoDB复制集

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"}]}

MongoDB数据库——MongoDB复制集

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

> 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的状态:

MongoDB数据库——MongoDB复制集

两个SECONDARY的状态

MongoDB数据库——MongoDB复制集

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

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

添加成功如下图:

MongoDB数据库——MongoDB复制集

删除节点:> rs.remove()

删除成功如下图:

MongoDB数据库——MongoDB复制集

5.测试故障自动转移

停止mongodb1的运行

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

MongoDB数据库——MongoDB复制集

确定27017端口的主节点停止

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

mongo --port 27018

MongoDB数据库——MongoDB复制集

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

MongoDB数据库——MongoDB复制集

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

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 

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

 

相关标签: 数据库学习