全部產品
Search
文件中心

ApsaraDB for MongoDB:複本集執行個體如何?讀寫分離和高可用

更新時間:Nov 08, 2024

ApsaraDB for MongoDB複本集執行個體支援高可用以及讀寫分離,但您必須使用正確的方法串連執行個體來保障高可用,並設定相關配置實現讀寫分離。

背景資訊

MongoDB複本集執行個體的主節點(Primary節點)不是固定的某個節點,當出現異常時,系統會觸發主備切換,原來的主節點會降為從節點(Secondary節點)。

當您使用主節點的直連地址串連資料庫時,所有讀寫操作都會在主節點完成,從而導致該節點壓力大,且一旦發生主備切換,您串連的主節點會變為從節點,此時通過該地址串連的用戶端將無法執行寫操作,這會嚴重影響到您的業務正常運行。

高可用

ApsaraDB for MongoDB提供了ConnectionStringURI高可用地址,該地址包含執行個體所有節點的地址,發生主備切換後,寫請求將會被路由到新的主節點上,不會出現無法執行寫操作的情況。

更多關於MongoDB複本集執行個體串連地址的說明,請參見複本集執行個體串連說明

說明
  • 為實現高可用,建議您生產環境的應用程式都通過ConnectionStringURI地址串連執行個體。

  • 目前所有官方Driver都支援通過ConnectionStringURI地址串連MongoDB。

擷取高可用地址

  1. 訪問MongoDB複本集執行個體列表,在上方選擇資源群組和地區,然後單擊目標執行個體ID。

  2. 在目標執行個體頁面的左側導覽列,單擊資料庫連接

  3. 擷取ConnectionStringURI高可用地址。高可用地址

    使用ConnectionStringURI地址串連執行個體後,用戶端會自動檢測節點的主備關係,當主備關係發生變化時,自動將寫操作切換到新的Primary節點上,以保證服務的高可用。

讀寫分離

ConnectionStringURI高可用地址提供了readPreferencereadPreferenceTags參數,readPreference參數可實現讀寫分離和負載平衡;readPreferenceTags可以將讀請求優先發送到標籤對應的節點。

靈活使用readPreferencereadPreferenceTags參數,通過不同標籤的組合,可以滿足您不同情境的需求。

讀請求失敗的處理方法

讀請求發送的節點

參數組合方案

讀請求失敗情況下,讀請求發送到主節點

優先讀主節點

&readPreference=primaryPreferred

優先讀從節點和唯讀節點

&readPreference=secondaryPreferred

優先讀從節點(僅支援雲端硬碟版執行個體)

&readPreference=secondaryPreferred&readPreferenceTags=role:electable

優先讀唯讀節點

&readPreference=secondaryPreferred&readPreferenceTags=role:readonly

讀請求失敗情況下,讀請求不發送到主節點

僅讀從節點和唯讀節點

&readPreference=secondary

僅讀從節點(僅支援雲端硬碟版執行個體)

&readPreference=secondary&readPreferenceTags=role:electable

僅讀唯讀節點

&readPreference=secondary&readPreferenceTags=role:readonly

高可用地址實現讀寫分離

如果您希望實現讀寫分離,且有明確的需求情境,在ConnectionStringURI地址後添加readPreferencereadPreferenceTags參數即可實現讀寫分離。

例如,您希望所有寫請求發送到主節點,讀請求僅發送到唯讀節點,且讀請求失敗情況下,讀請求不發送到主節點,僅需在ConnectionStringURI地址後添加&readPreference=secondary&readPreferenceTags=role:readonly。樣本如下:

mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****&readPreference=secondary&readPreferenceTags=role:readonly
說明

測試環境使用的驅動版本如下:

  • pymongo 3.11.4

  • mongodb-driver-sync 4.6.1 

  • mongosh 2.2.15

相關文檔