上一篇:MongoDB(9)—副本集数据读写
1.什么时候副本集会自动选举主节点?
在MongoDB的副本集中,主节点出现下面的条件会触发选举机制:
1.主节点出现故障宕机了
2.主节点网络不可达(心跳机制:默认10s无响应则判定主节点挂掉)
3. 人工指定主节点
4. 修改节点的优先级
2.选举规则?
1.票数最高,且获得半数以上成员支持的节点获胜
当副本集存活的成员不及半数时,将无法选举主节点。也就无法写数据,此时整个副本集只能读取数据。
2.票数相同且均获得了大部分成员支持,则其数据在最新的节点获胜
两个节点谁的数据最新,同步主节点数据的速度最快,谁就获取胜利。
3.优先级会严重影响获取选票的情况
优先级的设置范围是0~100,默认情况下,优先级为1。通过设置节点的优先级,使得优先级更高的节点更有可能成为主节点,而优先级更低的节点更不可能成为主节点。(人为干预:比如哪台服务器配置好可以将其节点的优先级设置高一点)
3.节点优先级?
1.查看节点的优先级
我们可以使用命令rs.config()
查看节点的 优先级。
我们发现:27017
端口和27018
一主一从两个节点的优先级都是1,但是27019
这个仲裁节点的端口的优先级却是0。说明仲裁节点永远不会成为主节点。
2.设置节点的优先级
我们可以在添加节点时指定优先级,如下:
rs.add({_id:0,host:'192.168.247.14:27017',priority:2})
也可以为已有的节点设置优先级:
//获取原始config文件
config=rs.config()
//设置config中节点的优先级
config.members[0].priority=99
//更新config
rs.reconfig(config)
比如我们要将27017端口的优先级设置为5:
27017端口在members
这个数组中下标为0。接下来设置他的优先级:
然后更新config
配置:
然后重新查询一下现在副本集的config
:
发现27017
端口的优先级由1更改为了5。如果现在我们将从节点27018
的优先级改到最高,则27017
节点将不再是我们的主节点,主节点更改为27018
。