當業務對可用性要求較高時,單可用性區域部署可能因物理資料中心故障而中斷。跨可用性區域部署可將一個Elasticsearch執行個體的節點分散部署在同一地區的多個物理隔離的可用性區域(資料中心)中,實現資料中心層級的容災。當某個可用性區域發生故障時,叢集憑藉在其他可用性區域的節點和資料副本,仍可提供服務,保障商務持續性。
工作原理
跨可用性區域部署利用Elasticsearch內建的分區分配感知(Shard Allocation Awareness)機制。
建立跨可用性區域執行個體時,系統會自動為部署在不同可用性區域的節點添加名為zone_id的屬性。同時,叢集會配置cluster.routing.allocation.awareness.attributes: zone_id,告知Elasticsearch在分配分區時考慮此節點屬性。
該機制確保索引的主分區和副本分區分散到不同可用性區域,當某個可用性區域整體不可用時,該可用性區域的所有分區副本都在其他可用性區域存有備份,保證資料冗餘和服務可用性。
部署模式選擇
根據業務的可用性要求和成本預算,選擇合適的部署模式。
部署模式 | 架構特點 | 容災能力 | 推薦情境 |
單可用性區域 | 所有節點位於同一個可用性區域。 | 可用性區域故障將導致服務完全中斷。 | 開發、測試等非關鍵業務。 |
跨2個可用性區域 | 節點分布在兩個可用性區域。 | 單個可用性區域故障時,服務可持續。 | 對可用性有較高要求的生產環境。 |
跨3個可用性區域 | 節點分布在三個可用性區域。 | 單個可用性區域故障時,服務仍可持續。 | 對可用性要求高的核心生產業務。 |
建立跨可用性區域執行個體
進入建立Elasticsearch執行個體頁面。
在可用性區域數量配置項中,選擇兩個可用性區域或三個可用性區域。
節點數量約束:資料節點、冷資料節點或協調節點的數量必須是所選可用性區域數量的整數倍,以確保節點均勻分配。
專有主節點:為保證多可用性區域架構的穩定性,必須購買3個專有主節點。
在控制台選擇的可用性區域(例如可用性區域 A)將作為叢集的主要訪問入口。系統會根據各可用性區域的即時資源情況,將節點自動、均勻地部署到所選數量的可用性區域中(例如,若選擇兩個可用性區域,則可能部署在可用性區域 A 和 B)。
單可用性區域升級為多可用性區域(僅適用於V3部署架構叢集)
升級前,確認以下條件:
執行
GET _cluster/health確保叢集為狀態為GREEN。如遇叢集狀態不健康,請參照叢集變更報錯-叢集狀態不健康進行解決。最佳化用戶端串連分布,避免長串連集中在某個單可用性區域,導致高負載區節點資源耗盡、低負載區節點閑置。可通過設定串連有效時間長度、 分批重啟用戶端、使用單獨的協調節點等方案最佳化串連分布,請參見叢集負載不均問題的分析方法及解決方案。
執行
GET _cluster/settings確認結果為"cluster.routing.allocation.enable": "all",(即允許ES自動分配分區)。若結果不一致,執行以下命令強制開啟分區自動分配。PUT _cluster/settings { "transient": { "cluster.routing.allocation.enable": "all" } }
在執行個體列表,單擊升配。
更多操作入口:在基本資料頁面,單擊
在變更配置頁面的可用性區域數量地區,選擇兩個可用性區域或三個可用性區域,並完成支付。
升級過程中,系統會自動啟用專有主節點(若尚未啟用),並可能根據可用性區域數量增加資料節點,以滿足節點均勻分布的要求。同時因新增節點(為滿足節點數均分或啟用的專有主節點),將增加相應費用,具體以賬單為準。
例如,一個有2個資料節點的單可用性區域執行個體升級為3可用性區域時,系統會自動補充1個資料節點,使總數達到3個,確保每個可用性區域分配1個。
遷移可用性區域
當需要對叢集進行升配但當前可用性區域資源不足時,可將節點遷移至資源充足的新可用性區域後再進行升配。
遷移可用性區域會觸發叢集重啟,重啟過程中叢集可持續提供服務,但可能導致服務不穩定,建議在業務低峰期操作。
遷移前,確認以下條件:
執行
GET _cluster/health確保叢集為狀態為GREEN。如遇叢集狀態不健康,請參照叢集變更報錯-叢集狀態不健康進行解決。執行
GET /_cat/indices?v檢查是否存在狀態為CLOSE的索引。如果存在,需執行POST /<index_name>/_open臨時開啟這些索引,否則升級操作可能失敗。存在CLOSE狀態的索引時,叢集狀態無法達到GREEN。執行
GET _cluster/settings確認結果為"cluster.routing.allocation.enable": "all",(即允許ES自動分配分區)。若結果不一致,執行以下命令強制開啟分區自動分配。PUT _cluster/settings { "transient": { "cluster.routing.allocation.enable": "all" } }
執行遷移操作:
進入目標執行個體的基本資料頁面,在節點可視化地區,將滑鼠移至上方在待遷移的可用性區域上,單擊遷移。
在彈出的對話方塊中,選擇目標可用性區域和虛擬交換器。每次僅支援遷移單個可用性區域。
勾選資料移轉服務合約,單擊確認。
確認後,叢集將重啟,期間叢集效能可能出現短暫波動。遷移過程中,系統將先在目標可用性區域購買新 Master節點,出現新舊可用性區域暫時共存。
遷移完成後,叢集即恢複正常,但控制台(執行個體資訊/升降配頁面)可能因更新延遲仍顯示舊可用性區域,此顯示不影響新可用性區域下叢集使用,請注意節點 IP 會變更。
執行可用性區域故障切換(切流與恢複)
當監控到可用性區域故障時,通過切流將用戶端流量切換到剩餘可用性區域,待可用性區域恢複後,通過恢複操作將其重新納入叢集。
切流(隔離故障可用性區域)
在執行個體的節點可視化地區,將滑鼠移至上方在待隔離的可用性區域上,單擊切流。
在彈出的對話方塊中,單擊確認。
重要可用性區域切流將隔離叢集中位於被切流可用性區域的所有節點,切流後業務請求僅由剩餘可用性區域的節點承擔。系統會嘗試為您在剩餘可用性區域補充相應數量的資源,但受底層資產庫存、調度並發度限制等多種因素影響,資源補足能力無法保證成功率,建議您結合叢集負載情況及時進行業務限流等操作。
如果切流前索引已配置副本,但切流完成後,叢集狀態顯示為黃色(非健康狀態),可通過Kibana串連叢集執行以下命令臨時覆蓋分區分配策略(強制將被切流可用性區域的分區重新分配到剩餘可用性區域):
PUT /_cluster/settings { "persistent" : { "cluster.routing.allocation.awareness.force.zone_id.values" : {"0": null, "1": null, "2": null} } }分區分配完成後,叢集的健康狀態將恢複為正常(綠色)。
恢複(重新納入可用性區域)
確認故障可用性區域恢複正常後,在執行個體的節點可視化地區,將滑鼠移至上方在已下線的可用性區域上,單擊恢複。
在彈出的對話方塊中,單擊確認,叢集將重啟。恢複後,切流過程中臨時補充的節點將被移除,叢集架構複原。