ApsaraDB for MongoDB複本集執行個體支援高可用以及讀寫分離,但您必須使用正確的方法串連執行個體來保障高可用,並設定相關配置實現讀寫分離。
背景資訊
MongoDB複本集執行個體的主節點(Primary節點)不是固定的某個節點,當出現異常時,系統會觸發主備切換,原來的主節點會降為從節點(Secondary節點)。
當您使用主節點的直連地址串連資料庫時,所有讀寫操作都會在主節點完成,從而導致該節點壓力大,且一旦發生主備切換,您串連的主節點會變為從節點,此時通過該地址串連的用戶端將無法執行寫操作,這會嚴重影響到您的業務正常運行。
高可用
ApsaraDB for MongoDB提供了ConnectionStringURI高可用地址,該地址包含執行個體所有節點的地址,發生主備切換後,寫請求將會被路由到新的主節點上,不會出現無法執行寫操作的情況。
更多關於MongoDB複本集執行個體串連地址的說明,請參見複本集執行個體串連說明。
為實現高可用,建議您生產環境的應用程式都通過ConnectionStringURI地址串連執行個體。
目前所有官方Driver都支援通過ConnectionStringURI地址串連MongoDB。
擷取高可用地址
訪問MongoDB複本集執行個體列表,在上方選擇資源群組和地區,然後單擊目標執行個體ID。
在目標執行個體頁面的左側導覽列,單擊資料庫連接。
擷取ConnectionStringURI高可用地址。
使用ConnectionStringURI地址串連執行個體後,用戶端會自動檢測節點的主備關係,當主備關係發生變化時,自動將寫操作切換到新的Primary節點上,以保證服務的高可用。
讀寫分離
ConnectionStringURI高可用地址提供了readPreference
和readPreferenceTags
參數,readPreference
參數可實現讀寫分離和負載平衡;readPreferenceTags
可以將讀請求優先發送到標籤對應的節點。
靈活使用readPreference
和readPreferenceTags
參數,通過不同標籤的組合,可以滿足您不同情境的需求。
讀請求失敗的處理方法 | 讀請求發送的節點 | 參數組合方案 |
讀請求失敗情況下,讀請求發送到主節點 | 優先讀主節點 |
|
優先讀從節點和唯讀節點 |
| |
優先讀從節點(僅支援雲端硬碟版執行個體) |
| |
優先讀唯讀節點 |
| |
讀請求失敗情況下,讀請求不發送到主節點 | 僅讀從節點和唯讀節點 |
|
僅讀從節點(僅支援雲端硬碟版執行個體) |
| |
僅讀唯讀節點 |
|
高可用地址實現讀寫分離
如果您希望實現讀寫分離,且有明確的需求情境,在ConnectionStringURI地址後添加readPreference
和readPreferenceTags
參數即可實現讀寫分離。
例如,您希望所有寫請求發送到主節點,讀請求僅發送到唯讀節點,且讀請求失敗情況下,讀請求不發送到主節點,僅需在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