什么是可复制集
可复制集是跨多个MongoDB服务器(节点)分布和维护数据的方法。MongoDB可以把数据从一个节点复制到其他节点并在修改时进行同步,集群的节点配置为自动同步数据;旧方法叫做主从复制,MongoDB 301 以后推荐使用可复制集;
为什么要用可复制集?它有还说呢么重要性?
- 避免数据丢失,保障数据安全,提高系统安全性;(最少3节点,最大50节点)
- 自动化灾备机制,注解带你宕机后通过玄机产生新主机;提高系统健壮性;(7个选举节点上限)
- 读写分离,负载均衡,提高系统性能;
- 生产环境推荐的部署模式;
可复制集架构以及原理
Øoplog(操作日志):保存操作记录、时间戳
Ø数据同步:从节点与主节点保持长轮询;1.从节点查询本机oplog最新时间戳;2.查询主节点oplog晚于此时间戳的所有文档;3.加载这些文档,并根据log执行写操作;
Ø阻塞复制:与writeconcern相关,不需要同步到从节点的策略(如: acknowledged Unacknowledged 、w1),数据同步都是异步的,其他情况都是同步;
Ø心跳机制:成员之间会每2s 进行一次心跳检测(ping操作),发现故障后进行选举和故障转移;
Ø选举制度:主节点故障后,其余节点根据优先级和bully算法选举出新的主节点,在选出主节点之前,集群服务是只读的;
可复制集的搭建过程(搭建一主一从一仲裁)
1、安装好3个以上节点的mongoDB;
2、配置mongodb.conf,增加跟复制相关的配置如下:
replication:
replSetName: configRS //集群名称
oplogSizeMB: 50 //oplog集合大小
3、在primary节点切换到admin库上运行可复制集的初始化命令,初始化可复制集,命令如下
复制集初始化,在主节点上执行,ip禁止使用localhost
#初始化集群
rs.initiate({
_id: "configRS",
version: 1,
members: [{ _id: 0, host : "192.168.1.134:27017" }]});
#添加节点
rs.add("192.168.1.135:27018");//有几个节点就执行几次方法
#添加仲裁者(仲裁者没什么硬件要求)
rs.addArb("192.168.1.136:27019");
4、在每个节点运行rs.status()命令查看复制集状态;
PS:只能在主节点查询数据,但如果想在副节点查询到数据需运行rs.slaveOk();