Elasticsearch 基于对象存储使用快照数据迁移

以下是 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 集群。

以上是数据迁移的完整步骤。

posted @ 2024-11-06 02:06  broadviews  阅读(35)  评论(0编辑  收藏  举报