一、mongodb复制(副本集)
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许从硬件故障和服务中断中恢复数据。
二、mongodb复制原理
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图如下所示:
以上结构图中,Mongodb复制集(副本集replica set)由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary通过oplog来同步Primary的数据,保证主节点和从节点数据的一致性,复制集在完成主从复制的基础上,通过心跳机制,一旦primary节点出现宕机,则触发选举一个新的主节点,剩下的secondary节点指向新的primary,时间应该在10-30s内完成感知primary节点故障,实现高可用数据库集群
副本集特征:
? N 个节点的集群
? 任何节点可作为主节点
? 所有写入操作都在主节点上
? 自动故障转移
? 自动恢复
三、mongodb副本集设置
1、首先创建数据目录和日志目录
mkdir -p /data/mongodb/mongodb{1,2,3,4} #创建数据目录
mkdir -p /data/logs/ #创建日志目录
cd /data/logs/
touch mongodb{1,2,3,4}.log #创建日志文件
chmod 777 ./*.log #修改目录权限
2、复制etc/mongod.conf配置文件并开启复制集#replication:去掉#号在下一行加入replSetName: kgcrs 复制集名称为kgcrs
cp -p /etc/mongod.conf /etc/mongod1.conf
cp -p /etc/mongod1.conf /etc/mongod2.conf
cp -p /etc/mongod1.conf /etc/mongod3.conf
cp -p /etc/mongod1.conf /etc/mongod4.conf
vi /etc/mongod1.conf
net:
bind_ip=0.0.0.0
port=27017
storage:
dbpath=/data/mongodb/mongodb1/
path=/data/logs/mongodb1.log
logappend=true
fork=true
replication:
replSetName: kgcrs
3、开启节点
mongod -f /etc/mongod1.conf
mongod -f /etc/mongod2.conf
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf
4、配置复制集
进入mongodb数据库中:
mongo --port 27017
#定义四个标准节点
cfg={"_id":“kgcrs”,“members”:[{"_id":0,“host”:“127.0.0.1:27017”},{"_id":1,“host”:“127.0.0.1:27018”},{"_id":2,“host”:“127.0.0.1:27019”},{"_id":3,“host”:“127.0.0.1:27020”}]}
#初始化复制集,配置时保证从节点没有数据
rs.initiate(cfg)
#查看复制集状态(rs复制集的简称)
rs.status()
{
“set” : “kgcrs”,
“date” : ISODate(“2019-01-18T00:48:33.956Z”),
“myState” : 1,
“term” : NumberLong(1),
“syncingTo” : “”,
},
“syncSourceHost” : “”,
“syncSourceId” : -1,
“heartbeatInt