今天被問到mongodb副本集主從切換的問題,而後發現沒有相關命令的中文文檔,這裏翻譯記錄一下node
rs.stepDown()mongodb
rs.stepDown(stepDownSecs, secondaryCatchUpPeriodSecs)數據庫
指示副本集的主節點(primary node)成爲從節點(secondary)。在主節點結束後,合格的從節點將會舉行選舉。服務器
該方法不會當即結束主節點。若是從節點中沒有與主節點保持同步的節點,則主節點會等待secondaryCatchUpPeriodSecs(默認爲10秒)以便從節點遇上。一旦出現可選擇的從節點,該方法就會降級主節點。翻譯
一旦降級,原來的主節點成爲從節點的,而且再也不有資格在stepDownSecs指定的剩餘時間內再次成爲主節點。索引
注意文檔
該方法僅對主節點有效,若是在非主節點上運行,則會引起錯誤。同步
執行過程:io
rs.stepDown()方法嘗試終止長時間運行的用戶操做,由於這些操做會阻止主服務器降級,如索引構建,寫入操做或map-reduce做業。map
而後該方法啓動一個追趕期,在此期間會等待SecondaryCatchUpPeriodSeconds所指定的時間(默認爲10秒),使從節點追上主節點,變爲最新。主節點只有在從節點追上主節點的時候纔會進行降級操做,以此來防止回滾。
若是在等待期結束時沒有從節點符合此標準,則主節點不會降級,而且拋出方法錯誤。
一旦主節點降級成功,該節點就不能在stepDownSecs所指定的時間內再次成爲主節點,這個時間從節點開始接收到方法開始。 rs.stepDown()方法強制當前鏈接到數據庫的全部客戶端斷開鏈接。這有助於確保客戶端與副本集維持一個的準確視圖(view)。
因爲斷開鏈接包括用於運行方法的鏈接,所以若是方法成功完成,則沒法檢索方法的返回狀態。若是錯誤發生,您只能檢索方法的返回狀態。在腳本中運行該方法時,腳本應考慮此行爲。
注意
在接收到rs.stepDown()方法開始的時間段內,全部寫入主節點的寫入操做都會失敗,直到選出新的主節點或者沒有可用的從節點爲止,原來的主節點纔會恢復正常操做。寫入失敗的時間最長:
secondaryCatchUpPeriodSecs(默認爲10秒)+ electionTimeoutMillis(默認爲10秒)。
原文地址:https://docs.mongodb.com/manual/reference/method/rs.stepDown/