Elasticsearch 基于对象存储使用快照数据迁移
以下是 Elasticsearch 集群数据迁移 的步骤说明,格式已转换为 Markdown:
Elasticsearch 集群数据迁移
一、订购新的集群
-
订购新集群时,注意以下事项:
- 新集群的数据节点数量需满足迁移需求,确保索引副本数小于节点数。
- 新集群节点规格(如 CPU、内存)应足够容纳旧集群的数据。
-
新集群上的准备工作:
- 删除新集群上所有索引。
- 安装旧集群已有的插件(如 IK 分词器)。
- 创建旧集群上存在的模板、用户信息等。
示例命令:
# 插件 GET /_cat/plugins # 生命周期管理 GET _ilm/policy # 模板 GET /_cat/templates?v # 管道 GET _ingest/pipeline
二、订购对象存储服务
- 搜索并订购 EOS 对象存储,确保资源池与新集群一致。
三、将旧集群数据迁移至 EOS
-
迁移前检查:使用
GET _cluster/health
,确保集群状态为“green”。 -
创建 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 } }
-
业务停服:停止新数据写入,修改业务连接 ES 的配置(如 IP、端口、密码等)。
-
创建增量 Snapshot:在停服状态下,将新增数据写入 EOS。
四、新集群上恢复 Snapshot
- 在新集群创建 EOS 快照存储连接。
- 控制恢复速率,避免影响集群读写:
PUT _cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "4000mb", "cluster.routing.allocation.node_concurrent_recoveries": "20" } }
- 恢复 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 集群。
以上是数据迁移的完整步骤。