如果需要进行数据迁移的源集群在本地 IDC 环境或者在其他云厂商环境,则可以参考本文档将源集群的快照数据想办法存放到火山 TOS 中,然后在火山引擎 ES 集群中读取 TOS 快照数据并恢复索引。
- 迁移其他云厂商的 Elasticsearch 集群数据,可以将快照存储到自己云的对象存储中,然后火山 TOS 通过配置迁移任务获取到快照数据。
- 迁移本地 IDC 环境内的 Elasticsearch 集群数据,可以直接将快照存储到火山引擎的 TOS。
- 如果迁移本地 IDC 环境内的 Elasticsearch 集群数据,需要确保源 Elasticsearch 集群和目的火山 ES 集群分别与火山 TOS 网络互通。
- 如果迁移其他云厂商的 Elasticsearch 集群数据,需要确保源 Elasticsearch 集群中没有使用自研功能。
场景一:迁移本地 IDC 环境 Elasticsearch 集群数据
- 获取本地 IDC 的源 Elasticsearch 集群的访问用户、用户密码,以及访问地址。
- 获取目的火山 ES 集群的访问用户、用户密码,以及访问地址。相关文档,请参见查看实例详情。如果需要为火山 ES 集群开通公网访问,请参见配置实例公网访问。
- 获取火山账号的 AccessKey 和 SecretAccessKey。如何获取,请参见API访问密钥管理。
- 提前创建火山引擎 TOS Bucket,并获取相关信息。如何创建 Bucket,请参见创建存储桶。
- S3 Endpoint:tos-s3-cn-beijing.volces.com
火山引擎 TOS 兼容 AWS S3 协议。在本地 IDC 的源 Elasticsearch 集群中,您可以直接通过官方插件 repository-s3 进行数据备份。
- 可以先通过 _cat/plugins API 查看集群已安装的插件列表。
- 如果没有安装 repository-s3 插件,则需要在每个节点上手动安装,安装后重启集群。
- 执行以下命令,安装 repository-s3 插件。
sudo bin/elasticsearch-plugin install repository-s3
注意
repository-s3 插件在创建快照存储库时,需要获取能够访问对应 S3 的 access_key 和secret_key 信息。但出于安全考虑,默认情况下集群不允许显示配置 access_key 和secret_key,因此您在使用时可能会出现 Setting [access_key] is insecure, but property [allow_insecure_settings] is not set 报错。
您可以选择如下任意一种方案来避免出现该报错:
- 方案 1 :重启集群前,为每个节点的 config/jvm.options 文件中新增一行 es.allow_insecure_settings=true 配置,该配置可允许集群显示配置 access_key 和secret_key。
- 方案 2 :在命令行中分别执行如下命令,来手动添加access_key 和 secret_key。
- bin/elasticsearch-keystore add s3.client.default.access_key
- bin/elasticsearch-keystore add s3.client.default.secret_key
若选择方案 2 手动添加了 access_key 和 secret_key,那么在创建快照存储库时,您无需再重复配置 access_key 和 secret_key。
在本地 IDC 的源 Elasticsearch 集群中,执行以下命令,创建一个快照存储库。
curl -X PUT http://${source_username}:${source_password}@${source_es_host}/_snapshot/${repo_name}?pretty -H 'Content-Type: application/json' -d'
"bucket" : "${bucket_name}",
"path_style_access" : "false",
"endpoint" : "${tos_s3_endpoint}",
"base_path" : "${base_path}",
"region" : "${bucket_region}",
"access_key": "${your_access_key}",
"secret_key": "${your_secret_key}"
在本地 IDC 的源 Elasticsearch 集群中,执行以下命令,创建索引快照。快照数据存储到新建的快照存储库。
curl -X POST http://${source_username}:${source_password}@${source_es_host}/_snapshot/${repo_name}/${snapshot_name}?wait_for_completion=true' \
-H 'Content-Type: application/json' \
"indices": "${index_name}",
"ignore_unavailable": false,
"include_global_state": false
源 Elasticsearch 集群执行创建快照的命令后,您可以通过以下命令查看快照的创建进度。通过返回值的end_time确定快照是否创建完成。
curl -X GET http://${source_username}:${source_password}@${source_es_host}/_snapshot/${repo_name}/${snapshot_name}?pretty
在火山 ES 集群中,使用相同 TOS Bucket 创建一个快照存储库。
curl -X PUT http://${target_username}:${target_password}@${target_es_host}/_snapshot/${repo_name}?pretty -H 'Content-Type: application/json' -d'
"bucket" : "${your_bucket_name}",
"path_style_access" : "false",
"endpoint" : "${tos_s3_endpoint}",
"base_path" : "${your_base_path}",
"region" : "${your_bucket_region}",
"access_key": "${your_access_key}",
"secret_key": "${your_secret_key}"
在火山 ES 集群中,可以从 TOS Bucket 中读取快照数据,然后恢复索引。快照恢复索引时,可以修改索引名称,也可以不修改索引名称,请按需查看对应的命令行。
- 恢复索引时,保留索引原名。对于系统索引(.开头),恢复为以source_system_index_开头的索引。
curl -X POST http://${target_username}:${target_password}@${target_es_host}/_snapshot/${repo_name}/${snapshot_name}/_restore?wait_for_completion=true' \
-H 'Content-Type: application/json' \
"ignore_unavailable": false,
"rename_pattern": "(\\..+)",
"rename_replacement": "source_system_index_$1"
- 恢复索引时,修改索引名称。以下示例表示将快照中的索引统一恢复为restored_开头的索引。
curl -X POST http://${target_username}:${target_password}@${target_es_host}/_snapshot/${repo_name}/${snapshot_name}/_restore?wait_for_completion=true' \
-H 'Content-Type: application/json' \
"ignore_unavailable": false,
"rename_pattern": "(.+)",
"rename_replacement": "restored_$1"
目的火山 ES 集群执行从 TOS 快照恢复索引的命令后,您可以通过以下命令查看恢复进度。
curl http://${target_username}:${target_password}@${target_es_host}/_cat/recovery/${index_name}
您还可以通过对比查看源 Elasticsearch 集群和目的火山 ES 集群对应索引settings、mapping是否一致,以及通过 _cat/indices API 对比文档数量是否一致,一致则表示同步完成。
场景二:迁移其他云厂商 Elasticsearch 集群数据
- 获取目的火山 ES 集群的访问用户、用户密码,以及访问地址。相关文档,请参见查看实例详情。如果需要为火山 ES 集群开通公网访问,请参见配置实例公网访问。
- 获取火山账号的 AccessKey 和 SecretAccessKey。如何获取,请参见API访问密钥管理。
- 配置 TOS 迁移任务时,需要配置其他云厂商对象存储相关信息。请先获取其他云厂商账号的 AccessKey 和 SecretAccessKey 信息、对象存储桶名称和访问地址。
- 提前创建火山引擎 TOS Bucket,并获取相关信息。如何创建 Bucket,请参见创建存储桶。
- S3 Endpoint:tos-s3-cn-beijing.volces.com
如果需要迁移其他云厂商的 Elasticsearch 集群数据,可以先将快照存储到自己云的对象存储中。
请根据自己所属云,查看对应的文档,此处提供以下三种云环境创建快照的文档链接。
- 阿里云 Elasticsearch 集群创建快照:手动备份
- 华为云 Elasticsearch 集群创建快照:手动创建快照
在火山引擎 TOS 中,您可以通过配置迁移任务将其他云厂商对象存储中的数据迁移到火山对象存储 TOS。
在火山 ES 集群中,使用火山 TOS Bucket 创建一个快照存储库。
curl -X PUT http://${target_username}:${target_password}@${target_es_host}/_snapshot/${repo_name}?pretty -H 'Content-Type: application/json' -d'
"bucket" : "${your_bucket_name}",
"path_style_access" : "false",
"endpoint" : "${tos_s3_endpoint}",
"base_path" : "${your_base_path}",
"region" : "${your_bucket_region}",
"access_key": "${your_access_key}",
"secret_key": "${your_secret_key}"
在火山 ES 集群中,可以从 TOS Bucket 中读取快照数据,然后恢复索引。快照恢复索引时,可以修改索引名称,也可以不修改索引名称,请按需查看对应的命令行。
- 恢复索引时,保留索引原名。对于系统索引(.开头),恢复为以source_system_index_开头的索引。
curl -X POST http://${target_username}:${target_password}@${target_es_host}/_snapshot/${repo_name}/${snapshot_name}/_restore?wait_for_completion=true' \
-H 'Content-Type: application/json' \
"ignore_unavailable": false,
"rename_pattern": "(\\..+)",
"rename_replacement": "source_system_index_$1"
- 恢复索引时,修改索引名称。以下示例表示将快照中的索引统一恢复为restored_开头的索引。
curl -X POST http://${target_username}:${target_password}@${target_es_host}/_snapshot/${repo_name}/${snapshot_name}/_restore?wait_for_completion=true' \
-H 'Content-Type: application/json' \
"ignore_unavailable": false,
"rename_pattern": "(.+)",
"rename_replacement": "restored_$1"
目的火山 ES 集群执行从 TOS 快照恢复索引的命令后,您可以通过以下命令查看恢复进度。
curl http://${target_username}:${target_password}@${target_es_host}/_cat/recovery/${index_name}
您还可以通过对比查看源 Elasticsearch 集群和目的火山 ES 集群对应索引settings、mapping是否一致,以及通过 _cat/indices API 对比文档数量是否一致,一致则表示同步完成。