問題描述
寫入數據至云數據庫MongoDB副本集實例時,出現"errmsg": "not master", "code": 10107, "codeName": "NotMaster"
、"errmsg": "not master", "code": 10107, "codeName": "NotWritablePrimary"
或Time out after 30000ms while waiting for a server that matches writableServerSelector.
報錯。
常見原因
副本集實例發生了主備切換,導致節點角色發生變化,如果您的業務通過主節點(Primary節點)的地址連接,主備切換后實際連接的節點角色變成了從節點(Secondary節點),所以寫入失敗。
說明 導致實例發生主備切換的原因有很多種,具體請參見為什么實例會發生主備切換?。
每個副本集實例包含一個主節點、一個或多個從節點、一個隱藏節點(Hidden節點)和可選的一個或多個只讀節點(ReadOnly節點)。其中主節點、從節點和隱藏節點合起來統稱為“主備節點”。每個節點有自己的屬性信息,包括節點角色(Primary、Secondary、Hidden或ReadOnly)、節點ID、節點地址、域名信息和端口等。主備切換會導致節點角色發生變化,而不會改變節點的其他屬性。
副本集實例中節點1的角色是主節點,節點2的角色是從節點,如果主備切換前您連接的是主節點地址,即節點1的地址,實例發生主備切換后,節點1變成了從節點,您實際連接的是從節點地址,所以寫入失敗。