Elasticsearch 基於物件儲存使用快照資料遷移

broadviews發表於2024-11-06

以下是 Elasticsearch 叢集資料遷移 的步驟說明,格式已轉換為 Markdown:


Elasticsearch 叢集資料遷移

一、訂購新的叢集

  1. 訂購新叢集時,注意以下事項:

    • 新叢集的資料節點數量需滿足遷移需求,確保索引副本數小於節點數。
    • 新叢集節點規格(如 CPU、記憶體)應足夠容納舊叢集的資料。
  2. 新叢集上的準備工作:

    • 刪除新叢集上所有索引。
    • 安裝舊叢集已有的外掛(如 IK 分詞器)。
    • 建立舊叢集上存在的模板、使用者資訊等。

    示例命令:

    # 外掛
    GET /_cat/plugins
    # 生命週期管理
    GET _ilm/policy
    # 模板
    GET /_cat/templates?v
    # 管道
    GET _ingest/pipeline
    

二、訂購物件儲存服務

  1. 搜尋並訂購 EOS 物件儲存,確保資源池與新叢集一致。

三、將舊叢集資料遷移至 EOS

  1. 遷移前檢查:使用 GET _cluster/health,確保叢集狀態為“green”。

  2. 建立 Snapshot

    • 在遷移前,可以先進行全量快照,然後多次進行增量快照,減少停服時間。
    • 建立快照儲存:
      PUT /_snapshot/s3_backup
      {
        "type": "s3",
        "settings": {
          "bucket": "EOS桶名",
          "protocol": "http",
          "access_key": "<ak>",
          "secret_key": "<sk>",
          "endpoint": "",
          "storage_class": "standard",
          "max_snapshot_bytes_per_sec": "4000mb",
          "compress": true
        }
      }
      
  3. 業務停服:停止新資料寫入,修改業務連線 ES 的配置(如 IP、埠、密碼等)。

  4. 建立增量 Snapshot:在停服狀態下,將新增資料寫入 EOS。

四、新叢集上恢復 Snapshot

  1. 在新叢集建立 EOS 快照儲存連線。
  2. 控制恢復速率,避免影響叢集讀寫:
    PUT _cluster/settings
    {
      "transient": {
        "indices.recovery.max_bytes_per_sec": "4000mb",
        "cluster.routing.allocation.node_concurrent_recoveries": "20"
      }
    }
    
  3. 恢復 Snapshot
    POST /_snapshot/s3_backup/snapshot3/_restore
    {
      "indices": "*",
      "index_settings": {
        "index.number_of_replicas": 0
      },
      "ignore_unavailable": false,
      "include_global_state": false,
      "include_aliases": true,
      "ignore_index_settings": ["index.lifecycle.indexing_complete"]
    }
    

五、資料驗證

  • 驗證恢復狀態:
    GET /_cat/recovery/
    GET _cluster/health?pretty
    
  • 對比資料量,與步驟 3.4 記錄的資料進行對比。

六、測試新叢集服務

  • 測試業務在新叢集上是否正常執行,觀察一段時間。
  • 如有問題,業務可以切回舊叢集。

七、資源退訂

  • 確認新叢集服務正常後,退訂 EOS 和舊的 ES 叢集。

以上是資料遷移的完整步驟。

相關文章