mongodb管理副本集(持续更新中)

时间:2023-03-08 16:20:34
     许多维护工作不能在备份节点上完成 因为要写操作,也不能在主节点上进行,这就需要单机模式启动服务器, 是指重启成员服务器,让他成为一个单机运行的服务器,而不再是副本集中的一员(临时的) 在单机启动只要查看一下服务器的命令行参数 db.serverCmdLineopts() 然后启动时不要用replSet选项  制定一个别的端口好,保持dbpath不变.等维护完成后 在用启动副本集的方式启动mongod,mongodb会将维护期间落下的操作全部辅助过来,

可以随时修改副本集的配置 可以添加成员 删除成员 也可以修改已有的成员  很多操作都有对应的shell辅助函数  比如可以使用 rs.add为副本集添加新成员

rs.add("server-4:27017")
也可以以文档形式为新成员指定更复杂的配置
rs.add({"_id":4,"host":"iP:27017","priority":1.5,'hidden':true})
类似的 也可以从副本集中删除 成员
rs.remove("server-2:27017")
注意 删除成员时或者是除添加成员之外的其他改变副本集配置的行为 会砸shell中得到很多无法连接数据库的错误信息 这是正常的 这实际上说明配置修改成功了  重新配置副本集时 作为重新配置的最后一步
 主节点会关闭所有的连接 因此 shell中的练级会短暂断开 然后重新连接
可以通过rs.reconfig修改副本集成员的配置 修改副本集测成员配置时,有几个限制需要注意"
  1. 不能修改成员的_id
  2. 不能将接收rs.config命令的成员(通常为主节点) 的优先级设置为0
  3. 不能将总裁节点变为非仲裁节点 反之依然
  4. 不能将buildIndexes :false 的成员修改为 buildIndexes :true
重新配置副本集的时候  主节点需要先退化为普通的备份节点 以便接受新的配置 然后会恢复 要注意重新配置副本集之后 会短暂的没有主节点 之后会一切正常
下面是一个修改主机名的例子:
var config = rs=config()
config.members[1].host="server-2:27017"
rs.reconfig(config)
   一个副本集可以最多支持12个成员,但是只有7个成员可以参与投票。 如果要创建7个以上成员的副本集,只有7个成员可以拥有投票权,需要将其他成员的投票数量设置为0 
rs.add({"_id":4,"host":"iP:27017","votes":0}); [vot]
这样可以阻止这些成员在选举中主动票,虽然他们依然可以投否决票  尽量避免使用这个选项,应该只在创建包含7个以上成员的副本集或者希望阻止自动故障转移时 使用votes选项
修改成员的状态
把主节点变为备份节点  rs.stepDown(600)  这个命令可以让主节点退化为备份节点 10分钟,  不指定时间是60S
如果需要对主节点进行维护 又不希望其他成员成为主节点, 可以在每个备份节点上执行下面这个命令
阻止选举  rs.freeze()  接收一个单位是秒的时间  表示多长时间内保持备份节点状态  维护完成后  可以再次执行该命令  时间设置为0 即可.