一、概念
1、副本集就是有自动故障恢复功能的主从集群;
2、主从集群和副本集最大的区别就是副本集没有固定的主节点。
3、副本集,整个集群会选出一个主节点,当其挂掉后,又自动在剩下的从节点中选出一个主节点。
4、副本集仅仅用于数据自动备份,不能对子节点进行操作。
5、副本集至少要保证两个节点
二、定义副本集流程
1、创建数据和日志文件夹
在E:\mongodata创建data1、2、3和logs1、2、3
2、启动节点
(1)启动节点1(cmd下)
mongod -dbpath E:\mongodata\data1 -logpath E:\mongodata\logs1\log.txt -logappend -port 20001 -replSet cnrep
(2)启动节点2(cmd下)
mongod -dbpath E:\mongodata\data2 -logpath E:\mongodata\logs2\log.txt -logappend -port 20002 -replSet cnrep
(3)启动节点3(cmd下)
mongod -dbpath E:\mongodata\data3 -logpath E:\mongodata\logs3\log.txt -logappend -port 20003 -replSet cnrep
3、初始化节点(只能初始化一次)
随便登录一个节点,执行
rs.initiate({_id:"cnrep", members:[
{_id:0, host:"127.0.0.1:20001","priority":1},
{_id:1, host:"127.0.0.1:20002","priority":2},
{_id:2, host:"127.0.0.1:20003","priority":3}
]})
注意:
上面的cntest为启动节点时所对应的–replSet cnrep;
host 为ip端口;
priority 优先级 0-100 越大越高,当主节点挂掉后,优先级最高的节点为主节点,设为0则永远不会成为主节点;
三、查看副本集状态及配置
rs.status()
rs.config()
四、副本集说明
1、客户端的读写请求都是发送到主节点执行
2、客户端不能再备份节点上进行写操作
3、默认情况下,客户端不能再备份节点读取数据,可以通过执行命令来允许读:
db.getMongo().setSlaveOk();
4、如果某个节点挂掉,在它挂掉期间的数据会在这个节点启动后自动恢复。
五、副本集操作
1、删除副本集节点
rs.remove("127.0.0.1:20001")
2、添加副本集节点
rs.add("127.0.0.1:20001")
如果数据量很大,添加节点需要一定时间拷贝数据到新节点,会影响网络和IO,建议在服务器压力小时执行。
3、添加选举仲裁者(不重要,尽量让节点为奇数个)
4、设置隐藏节点
只用于存数据,不执行查操作,在init时设置hidden:true
5、设置从节点不建立索引
在init时设置buildIndexes:false
6、修改config