全部產品
Search
文件中心

Elasticsearch:跨可用性區域部署與營運

更新時間:Apr 11, 2026

當業務對可用性要求較高時,單可用性區域部署可能因物理資料中心故障而中斷。跨可用性區域部署可將一個Elasticsearch執行個體的節點分散部署在同一地區的多個物理隔離的可用性區域(資料中心)中,實現資料中心層級的容災。當某個可用性區域發生故障時,叢集憑藉在其他可用性區域的節點和資料副本,仍可提供服務,保障商務持續性。

工作原理

跨可用性區域部署利用Elasticsearch內建的分區分配感知(Shard Allocation Awareness)機制。

建立跨可用性區域執行個體時,系統會自動為部署在不同可用性區域的節點添加名為zone_id的屬性。同時,叢集會配置cluster.routing.allocation.awareness.attributes: zone_id,告知Elasticsearch在分配分區時考慮此節點屬性。

該機制確保索引的主分區和副本分區分散到不同可用性區域,當某個可用性區域整體不可用時,該可用性區域的所有分區副本都在其他可用性區域存有備份,保證資料冗餘和服務可用性。

部署模式選擇

根據業務的可用性要求和成本預算,選擇合適的部署模式。

部署模式

架構特點

容災能力

推薦情境

單可用性區域

所有節點位於同一個可用性區域。

可用性區域故障將導致服務完全中斷。

開發、測試等非關鍵業務。

跨2個可用性區域

節點分布在兩個可用性區域。

單個可用性區域故障時,服務可持續。

對可用性有較高要求的生產環境。

跨3個可用性區域

節點分布在三個可用性區域。

單個可用性區域故障時,服務仍可持續。

對可用性要求高的核心生產業務。

建立跨可用性區域執行個體

  1. 進入建立Elasticsearch執行個體頁面。

  2. 可用性區域數量配置項中,選擇兩個可用性區域或三個可用性區域。

    • 節點數量約束:資料節點、冷資料節點或協調節點的數量必須是所選可用性區域數量的整數倍,以確保節點均勻分配。

    • 專有主節點:為保證多可用性區域架構的穩定性,必須購買3個專有主節點。

    在控制台選擇的可用性區域(例如可用性區域 A)將作為叢集的主要訪問入口。系統會根據各可用性區域的即時資源情況,將節點自動、均勻地部署到所選數量的可用性區域中(例如,若選擇兩個可用性區域,則可能部署在可用性區域 A 和 B)。

單可用性區域升級為多可用性區域(僅適用於V3部署架構叢集)

  1. 升級前,確認以下條件:

    • 執行GET _cluster/health 確保叢集為狀態為GREEN。如遇叢集狀態不健康,請參照叢集變更報錯-叢集狀態不健康進行解決。

    • 最佳化用戶端串連分布,避免長串連集中在某個單可用性區域,導致高負載區節點資源耗盡、低負載區節點閑置。可通過設定串連有效時間長度、 分批重啟用戶端、使用單獨的協調節點等方案最佳化串連分布,請參見叢集負載不均問題的分析方法及解決方案

    • 執行GET _cluster/settings確認結果為"cluster.routing.allocation.enable": "all" ,(即允許ES自動分配分區)。若結果不一致,執行以下命令強制開啟分區自動分配。

      PUT _cluster/settings  
      {  
        "transient": {  
          "cluster.routing.allocation.enable": "all"  
        }  
      }  
  2. 執行個體列表,單擊升配

    更多操作入口:在基本資料頁面,單擊配置變更 > 叢集升配

  3. 在變更配置頁面的可用性區域數量地區,選擇兩個可用性區域或三個可用性區域,並完成支付。

    • 升級過程中,系統會自動啟用專有主節點(若尚未啟用),並可能根據可用性區域數量增加資料節點,以滿足節點均勻分布的要求。同時因新增節點(為滿足節點數均分或啟用的專有主節點),將增加相應費用,具體以賬單為準。

    • 例如,一個有2個資料節點的單可用性區域執行個體升級為3可用性區域時,系統會自動補充1個資料節點,使總數達到3個,確保每個可用性區域分配1個。

遷移可用性區域

當需要對叢集進行升配但當前可用性區域資源不足時,可將節點遷移至資源充足的新可用性區域後再進行升配。

重要

遷移可用性區域會觸發叢集重啟,重啟過程中叢集可持續提供服務,但可能導致服務不穩定,建議在業務低峰期操作。

  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"  
        }  
      }  
  2. 執行遷移操作:

    1. 進入目標執行個體的基本資料頁面,在節點可視化地區,將滑鼠移至上方在待遷移的可用性區域上,單擊遷移

    2. 在彈出的對話方塊中,選擇目標可用性區域和虛擬交換器。每次僅支援遷移單個可用性區域。

    3. 勾選資料移轉服務合約,單擊確認

      • 確認後,叢集將重啟,期間叢集效能可能出現短暫波動。遷移過程中,系統將先在目標可用性區域購買新 Master節點,出現新舊可用性區域暫時共存。

      • 遷移完成後,叢集即恢複正常,但控制台(執行個體資訊/升降配頁面)可能因更新延遲仍顯示舊可用性區域,此顯示不影響新可用性區域下叢集使用,請注意節點 IP 會變更。

執行可用性區域故障切換(切流與恢複)

當監控到可用性區域故障時,通過切流將用戶端流量切換到剩餘可用性區域,待可用性區域恢複後,通過恢複操作將其重新納入叢集。

切流(隔離故障可用性區域)

  1. 在執行個體的節點可視化地區,將滑鼠移至上方在待隔離的可用性區域上,單擊切流

  2. 在彈出的對話方塊中,單擊確認

    重要

    可用性區域切流將隔離叢集中位於被切流可用性區域的所有節點,切流後業務請求僅由剩餘可用性區域的節點承擔。系統會嘗試為您在剩餘可用性區域補充相應數量的資源,但受底層資產庫存、調度並發度限制等多種因素影響,資源補足能力無法保證成功率,建議您結合叢集負載情況及時進行業務限流等操作。

    如果切流前索引已配置副本,但切流完成後,叢集狀態顯示為黃色(非健康狀態),可通過Kibana串連叢集執行以下命令臨時覆蓋分區分配策略(強制將被切流可用性區域的分區重新分配到剩餘可用性區域):

    PUT /_cluster/settings
    {
        "persistent" : {
            "cluster.routing.allocation.awareness.force.zone_id.values" : {"0": null, "1": null, "2": null}
        }
    }

    分區分配完成後,叢集的健康狀態將恢複為正常(綠色)。

恢複(重新納入可用性區域)

  1. 確認故障可用性區域恢複正常後,在執行個體的節點可視化地區,將滑鼠移至上方在已下線的可用性區域上,單擊恢複

  2. 在彈出的對話方塊中,單擊確認,叢集將重啟。恢複後,切流過程中臨時補充的節點將被移除,叢集架構複原。