使用手動快照將資料同步至PolarSearch

更新時間:
Copy as MD

本文為您介紹如何使用手動快照將ElasticsearchOpenSearch中的資料同步至PolarSearch。

適用範圍

  • Elasticsearch版本要求

    PolarSearch 1.x版本支援從Elasticsearch 7.x版本的快照恢複資料,且快照中的索引需是在Elasticsearch 7.x中建立的原生索引。

    • 如果索引是從Elasticsearch 6.x快照恢複到7.x但未經過Reindex操作,則在7.x中進行快照後也無法在PolarSearch中恢複。

    • 低於7.x的版本(如6.x、5.x),需要依次向高版本進行RestoreReindex的版本迭代,直到迭代到7.x後再建立快照。

  • OpenSearch版本要求

    • PolarSearch 3.x版本支援從OpenSearch 3.x2.x的快照恢複。

    • PolarSearch 1.x版本支援從OpenSearch 1.x的快照恢複。

重要

為了生產遷移的順利進行,建議您先用一個測試快照進行遷移驗證,以準確評估遷移時間和驗證業務相容性。

準備工作

準備一個源端和目標端均可訪問的OSS Bucket,用於構建快照倉庫。關於快照倉庫的詳細參數說明,請參見手動備份與恢複PolarSearch資料

步驟一:源端註冊快照倉庫

在源端ElasticsearchOpenSearch中註冊快照倉庫。以Elasticsearch為例:

PUT _snapshot/{repo-name}
{
    "type": "oss",
    "settings": {
        "endpoint": "{oss-endpoint}",
        "bucket": "{bucket-name}",
        "base_path": "{path-name}",
        "access_key_id": "{your-Accesskey-Id}",
        "secret_access_key": "{your-Accesskey-Secret}",
        "compress": true,
        "chunk_size": "500mb"
    }
}
重要
  • {repo-name}:倉庫名稱,可自訂設定,例如es-polarsearch

  • base_path:在Elasticsearch中,base_path後面需要添加斜杠(/),例如"base_path": "snapshot/"

步驟二:源端建立快照

  1. 在源端註冊快照倉庫後,執行以下命令為指定索引建立快照,將資料備份至OSS Bucket中。

    PUT _snapshot/{repo-name}/{snapshot-name}?wait_for_completion=false
    {
        "indices": "*,-.monitoring*,-.security*,-.kibana*,-.apm*,-ilm-history*",
        "ignore_unavailable": "true"
    }
  2. (可選)通過以下命令查看快照狀態,確認快照建立完成:

    GET _snapshot/{repo-name}/{snapshot-name}

步驟三:目標端註冊快照倉庫

  1. 將對應的快照倉庫註冊到目標端的PolarSearch中。

    重要

    PolarSearch中註冊快照倉庫時的參數與Elasticsearch存在差異:

    • 倉庫名稱{repo-name}需保持與源端註冊的快照倉庫名稱保持一致。

    • 快照檔案的根目錄路徑:在PolarSearch中,base_path後面不需要添加斜杠(/),例如"base_path": "snapshot"

    • 憑證參數名不同:PolarSearch使用access_keysecret_key,而Elasticsearch使用access_key_idsecret_access_key

    • 所在地區:PolarSearch需要額外指定OSS Bucket的所在地區region參數。

    • 恢複限速max_restore_bytes_per_sec參數預設不限制。建議設定合理值(比如40 MB),預防快照恢複佔用較多叢集資源或者資料同步太快,超出自動擴容速度導致水位過高,進而快照恢複失敗,叢集狀態異常。

    • 快照限速max_snapshot_bytes_per_sec參數預設40 MB。不建議設定過高,預防佔用較多的叢集資源。

    PUT _snapshot/{repo-name}
    {
        "type": "oss",
        "settings": {
            "endpoint": "{oss-endpoint}",
            "bucket": "{bucket-name}",
            "base_path": "{path-name}",
            "region": "{oss-region}",
            "access_key": "{your-Accesskey-Id}",
            "secret_key": "{your-Accesskey-Secret}",
            "compress": true,
            "chunk_size": "500mb",
            "max_restore_bytes_per_sec": "40mb",
            "max_snapshot_bytes_per_sec": "40mb"
        }
    }
  2. 註冊完成後,查看快照是否可以訪問:

    GET _snapshot/{repo-name}/{snapshot-name}

步驟四:恢複快照

  1. 在目標端PolarSearch中執行快照恢複操作。

    POST _snapshot/{repo-name}/{snapshot-name}/_restore?wait_for_completion=false
    {
        "indices": "*,-.monitoring*,-.security*,-.kibana*,-.apm*,-ilm-history*",
        "ignore_unavailable": "true"
    }
  2. 您可以通過以下命令確認快照恢複是否完成:

    1. 查看索引文檔數量。

      GET _cat/indices
    2. 查看對應索引的recovery狀態,當typesnapshotstageDONE時,表示恢複完成。

       GET {index-name}/_recovery

效能參考

832 GB兩個搜尋節點規格情境下,從快照中恢複1 TB資料大約需要17分鐘(含副本,總寫入資料量2 TB)。