MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成,只有配置两个以上Secondary节点的时候副本集才具备Primary节点故障自动切换的功能。副本集中数据同步过程:Primary节点写入数据,Secondary通过读取Primary的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。数据同步是一个异步的过程。MongoDB主备模式从3.2版本以后已经不被推荐使用,被副本集替代。
注意:在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,不能提供服务。
副本集的搭建过程如下,还是比较简单的。
1、安装
mongodb副本集群准备3台(或大于3台的奇数)。
安装步骤参考:Mongodb安装
集群分别为mongodb1,mongodb2,mongodb3
添加/etc/hosts短域名相对应的IP地址。
2、集群初始化
确保每台mongodb的/usr/local/mongodb/etc/mongod.conf有指定replSet名,例如:
replication: replSetName: rs1
其中集群里replSetName必须相同。
运行如下命令初始化
mongo > rs.initiate()
默认初始化mongodb会获取hostname作为集群地址,如果需要IP地址可以使用下面的方法。
mongo > config = {_id: "rs1", members:[{_id: 0, host: '192.168.1.106:27017'}]} > rs.initiate(config)
查看集群配置和状态
> rs.conf() > rs.status()
如果mongod启动添加 –auth 参数,集群之间需要配置认证key。
mkdir -pv /etc/mongod cd /etc/mongod openssl rand -base64 756 > mongo-keyfile chmod 400 mongo-keyfile chown mongod.mongod mongo-keyfile # 复制key文件到需要添加副本集的mongodb服务器中。
mongod.conf参数中配置类似如下行:
security: keyFile: /etc/mongod/mongo-keyfile
3、添加mongodb集群
按照mongodb1的配置启动mongodb2和mongodb3。添加mongodb2和mongodb3到集群的命令如下。
> rs.add("mongodb2:27017") > rs.add("mongodb3:27017")
添加成功后再次查看集群状态。
查看副本集群的复制状态。
> rs.printSlaveReplicationInfo()
正常的话一个高可用的MongoDB副本集就搭建好了。