场景:
通过3台虚拟机构建的一个Primary-Secondary-Secondary的副本集,如下表格
PSS模式(还有PSA模式) | 地址 | 别名 |
Primary | 192.168.40.128 | 节点1 |
Secondary | 192.168.40.129 | 节点2 |
Secondary | 192.168.40.130 | 节点3 |
现在想要副本集中删除掉一个节点,例如删除掉节点3.
要从副本集中删除掉节点有两种方式:
- 通过rs.remove()的方式
步骤:
第一步:先关闭你想要删除的mongodb,关闭方式可以通过db.shutdownServer()方法
第二步:在Primary节点上(我这是是表格中的节点1)上通过mongosh连接上到mongodb(如果不知道那个节点是Primary,随便用一个在副本集中的节点,然后通过db.hello()方法就可知道那个是Primary节点了。)
第三步:使用rs.remove()方法来删除掉想要移除的节点。
此时如果在通过rs.config()或者rs.status()或者db.hello()就看不到删除的这个节点了。
- 通过rs.reconfig()的方式
注:从mongodb4.4开始,通过rs.reconfig()的方式每次只能删除一个可以投票的节点(何为投票节点,文章最后给解释),如果想删除多个节点,那么就要多次执行rs.reconfig()方法。
步骤:
第一步:先关闭你想要删除的mongodb,关闭方式可以通过db.shutdownServer()方法
第二步:在Primary节点上(我这是是表格中的节点1)上通过mongosh连接上到mongodb(如果不知道那个节点是Primary,随便用一个在副本集中的节点,然后通过db.hello()方法就可知道那个是Primary节点了。)
第三步:通过rs.conf()方法查看想要删除的节点在配置文件中的索引位置
第四步:在mongosh中执行如下js,上面的配置信息赋值给变量
第五步:通过这个变量删除配置中的要删除的节点,如下cfg = rs.conf()
cfg.members.splice(2,1) #2表示要删除的192.168.40.129这个节点在members数组中的索引值
第六步:执行下面命令,重新设置配置rs.reconfig(cfg)
第七步:验证,在执行rs.config()方法,如果已删除的节点没有出现在里面,就成功了。
到此从副本集中删除节点的两种方式的使用就介绍完毕了。
所谓可投票节点,就理解为副本集中的所有节点就行了,mongodb中可以设定节点是否参与选举,但是所有的节点都可以进行投票。