全部產品
Search
文件中心

ApsaraDB for MongoDB:為什麼複本集執行個體寫入資料報錯:NotMaster、NotWritablePrimary或Time out after 30000ms while waiting for a server that matches writableServerSelector?

更新時間:Jun 19, 2024

問題描述

寫入資料至ApsaraDB for 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變成了從節點,您實際串連的是從節點地址,所以寫入失敗。

解決方案

  • 手動切換執行個體的節點角色,將業務實際串連的單節點地址對應節點切換為主節點。如何切換節點角色,請參見切換節點角色
  • 推薦生產環境的應用程式通過ConnectionStringURI地址串連資料庫。當某個節點出現故障時,不會因為主備切換而影響應用的讀寫操作,更多資訊,請參見複本集執行個體串連說明
  • 請為業務設計重連機制和異常處理能力,串連閃斷後可自動重連,保障業務穩定運行。