问题现象
在Mongodb 5.x的版本中,如果要添加仲裁节点的话可能会遇到执行rs.addArb("host:ip")命令的时候卡主而导致无法添加仲裁节点的问题。先看现象
当前环境为:
DB01 | Primary | 192.168.202.203:27017 |
DB02 | seconary | 192.168.202.203:27018 |
现在需要将架构变成一个PSA的架构,添加一个DB03作为仲裁节点。在准备好DB03实例之后执行:
rs0:PRIMARY> rs.addArb("vm002:27019")
<-----卡主
许久之后报错
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.”
解决方式
在遇到上述问题的时候,可以通过如下方式解决
db.adminCommand({
"setDefaultRWConcern" : 1,
"defaultWriteConcern" : {
"w" : "majority"
}
})
给mongodb配置一个默认writeConcern就可以解决,但是我们都知道一般情况下majority本来就是majority的默认关注,为什么非要这样做?
为什么这样
先看一下官方文档中对于默认写关注是怎样定义的:
在官方文档中可以发现,默认的写关注并一定是majority(文档中还特别点名了具有arbiters的情况),而是会受到arbiter个数的影响。在添加了仲裁节点之后可能会导致默认写关注的改变,所以需要手工配置一下setDefaultRWConcern的内容。
在Mongodb的论坛中也提到了这一点