前言
Arbiter节点也被成为仲裁节点,也就是用来投票用的节点。当我们不在想将副本集中的某个Secondary节点用来保存数据的时候,而是仅仅想用它在选举Primary节点时进行投票使用,那么我们就可以考虑将这个Secondary节点变为Arbiter节点。
场景
我们假设已创建了一个副本集(没创建的可参考前面的文章)如下表格所示:
PSS模式(还有PSA模式) | 地址 | 别名 |
Secondary | 192.168.40.128 | 节点1 |
Primary | 192.168.40.129 | 节点2 |
Secondary | 192.168.40.130 | 节点3 |
现在我们想让节点3变为Arbiter节点,只负责在选举Primary节点时进行投票,而不负责保存数据。
步骤
第一步:想要转换f副本集中的哪个Secondary节点为Arbiter节点,就先关闭这个节点,这里我们关闭节点3。
db.shutdownServer()
第二步:在Primary节点上执行如下命令,把节点3从副本集中删除掉
rs.remove("192.168.40.130:27017")
删除后,可通过rs.config()在确认一下
第三步:再次启动刚才停止节点3(官网中还说要移动放数据文件夹,其实无所谓,这里就不移动了)
mongod -f /etc/mongod.conf
第四步:在Primay节点上执行命令,将节点3作为Arbiter放到副本集配置中
rs.addArb("192.168.40.130:27017")
如果执行这条命令报如下错误:
“errmsg” : “Reconfig attempted to install a config that would change the implicit default write concern. Use the setDefaultRWConcern command to set a cluster-wide write concern and try the reconfig again.”
那么现在Primary节点执行下如下命令:
db.adminCommand({
"setDefaultRWConcern" : 1,
"defaultWriteConcern" : {
"w" : 2
}
})
第五步:验证
执行rs.config(),观察节点3中的arbiterOnly属性的值,如果是true表示成功,如下图:
此时如果我们在想Primary节点进行写入操作时,节点3将不再会同步数据了。
到此,整个设置结束。