首先确保mongo副本集中有一个主节点(nosql01)和两个副结点(nosql02、nosql03),添加仲裁节点步骤如下:
(1)、在主节点(nosql01)上登录mongodb客户端后移除服务器nosql03结点(如果已经进行了安全认证则需要创建root用户并使用root用户对副本集进行相关配置操作,我已进行安全认证)
进行了安全认证后的登录代码
#切换到mongodb的bin目录下登录mongodb客户端
cd /opt/servers/mongodb_demo/mongodb/bin
./mongod --replSet mongo --keyFile /opt/servers/mongodb_demo/standalone/key/keyfile --dbpath=/opt/servers/mongodb_demo/standalone/data/ --logpath=/opt/servers/mongodb_demo/standalone/logs/mongodb.log --port 27017 --bind_ip nosql01 --logappend --fork
./mongo --host nosql01 --port 27017
# 移除nosql03结点
rs.remove("nosql03:27017")
未进行安全认证的话将登录代码--keyFile以及后面的路径去掉就好。
(2)、若nosql03已经登录了mongodb客户端需要退出mongodb客户端并关闭mongodb进程,备份mongodb数据存放目录
mv /opt/servers/mongodb_demo/standalone/data /opt/servers/mongodb_demo/standalone/data-old
在nosql03上创建一个新的mongodb数据存放目录并以此目录重新启动mongodb
#创建新目录存放mongodb数据
mkdir /opt/servers/mongodb_demo/standalone/data
#重新登录mongodb客户端
./mongod --replSet mongo --keyFile /opt/servers/mongodb_demo/standalone/key/keyfile --dbpath=/opt/servers/mongodb_demo/standalone/data/ --logpath=/opt/servers/mongodb_demo/standalone/logs/mongodb.log --port 27017 --bind_ip nosql03 --logappend --fork
未进行安全认证的话将登录代码--keyFile以及后面的路径去掉就好。
其中--dbpath后面的路径为新创建的目录路径。
(3)、在nosql01主节点中将nosql03以仲裁节点的角色加入到副本集中
rs.addArb("nosql03:27017")
此处可能会出现小问题,执行上述添加代码后没有反应,解决办法:
退出nosql01的mongodb客户端并结束mongodb进程,重新登陆mongodb客户端后在主节点设置:
db.adminCommand({"setDefaultRWConcern" : 1,"defaultWriteConcern" : {"w" : 2}})
执行上述代码后再执行添加仲裁节点的代码就好了。成功添加显示如下:
(4)、在主节点运行rs.conf()验证是否添加成功。
其中nosql03的arbiterOnly为true则说明添加成功。