今天被问到mongodb副本集主从切换的问题,然后发现没有相关命令的中文文档,这里翻译记录一下
rs.stepDown()
rs.stepDown(stepDownSecs, secondaryCatchUpPeriodSecs)
指示副本集的主节点(primary node)成为从节点(secondary)。在主节点结束后,合格的从节点将会举行选举。
该方法不会立即结束主节点。如果从节点中没有与主节点保持同步的节点,则主节点会等待secondaryCatchUpPeriodSecs(默认为10秒)以便从节点赶上。一旦出现可选择的从节点,该方法就会降级主节点。
一旦降级,原来的主节点成为从节点的,并且不再有资格在stepDownSecs指定的剩余时间内再次成为主节点。
注意
该方法仅对主节点有效,如果在非主节点上运行,则会引发错误。
执行过程:
rs.stepDown()方法尝试终止长时间运行的用户操作,因为这些操作会阻止主服务器降级,如索引构建,写入操作或map-reduce作业。
然后该方法启动一个追赶期,在此期间会等待SecondaryCatchUpPeriodSeconds所指定的时间(默认为10秒),使从节点追上主节点,变为最新。主节点只有在从节点追上主节点的时候才会进行降级操作,以此来防止回滚。
如果在等待期结束时没有从节点符合此标准,则主节点不会降级,并且抛出方法错误。
一旦主节点降级成功,该节点就不能在stepDownSecs所指定的时间内再次成为主节点,这个时间从节点开始接收到方法开始。 rs.stepDown()方法强制当前连接到数据库的所有客户端断开连接。这有助于确保客户端与副本集维持一个的准确视图(view)。
由于断开连接包括用于运行方法的连接,因此如果方法成功完成,则无法检索方法的返回状态。如果错误发生,您只能检索方法的返回状态。在脚本中运行该方法时,脚本应考虑此行为。
注意
在接收到rs.stepDown()方法开始的时间段内,所有写入主节点的写入操作都会失败,直到选出新的主节点或者没有可用的从节点为止,原来的主节点才会恢复正常操作。写入失败的时间最长:
secondaryCatchUpPeriodSecs(默认为10秒)+ electionTimeoutMillis(默认为10秒)。
原文地址:https://docs.mongodb.com/manual/reference/method/rs.stepDown/