1 概念
副本集是一组服务器,一个主服务器(primary)处理客户端请求,多个备份服务器(secondary)保存主服务的副本;他们的数据在理想情况下是一样的
2 优势(高可用性)
primary奔溃了,会自动将一个secondry升级成primary
3 奇数性
只有奇数才能存在大多数的情况,类似都是奇数的常委
4 部署副本集
4.1 启动奇数个(3个)mongd,并且指定副本集的名称 myReplicaSet
4.2 启动mongd
mongod --replSet myReplicaSet -f mongod.conf
或者在配置文件中添加配置
replication:
replSetName: myReplicaSet
4.3 多个mongod关联起来了,否则他们不知道相互的存在
# mongo --port 27017
rs.initiate(
{
_id: "myReplicaSet",
members: [
{ _id : 0, host : "hdp06.thinkjoy.tt:27017" },
{ _id : 1, host : "hdp07.thinkjoy.tt:27017" },
{ _id : 2, host : "hdp08.thinkjoy.tt:27017" }
]
}
)
(1)这个配置会mongo同步配置到其他两台上
(2)它们之间会自己选出一个主节点,其他成为备份服务器
(3)myReplicaSet名称必须匹配上
(4)rs是一个副本集操作的辅助函数,rs,initiate()等价于db.adminCommand({'replSetInitiate':{....}})
5 修改副本集配置
增加节点
rs.add("hdp06.thinkjoy.tt:27017")
删除节点
查看配置
6 成员优先级
一个成员想成为主节点的渴望程度,取值范围0-100,默认值是1,0不可能成为主节点,越大越愿意成为主节点;当然具体协商由mongo自动完成,只是说同等情况下,优先级高的更容易成为primary
rs.add({{ _id : 2, host : "hdp08.thinkjoy.tt:27017" , priority:1.5}})
7 数据同步原理
primary会自己维护一个oplog集合日志(数据的读写日志),由secondary同步primary的oplog
8 客户端连接副本集正确姿势
可以把所有的副本集地址作为种子列表 ip1:port1,ip2:port2,......,会自动的连上primary