如果需要进行数据迁移的源集群在本地 IDC 环境或者在其他云厂商环境,则可以参考本文档将源集群的快照数据想办法存放到火山 TOS 中,然后在火山引擎 ES 集群中读取 TOS 快照数据并恢复索引。
如果迁移本地 IDC 环境内的 Elasticsearch 集群数据,需要确保源 Elasticsearch 集群和目的火山 ES 集群分别与火山 TOS 网络互通。
如果迁移其他云厂商的 Elasticsearch 集群数据,需要确保源 Elasticsearch 集群中没有使用自研功能。
需要确保源集群和目的集群的版本是兼容的。目前火山引擎云搜索服务支持 6.7.1
、6.8.23
和 7.10.2
三个版本的 ES 集群,版本兼容情况如下表所示。如需了解更多版本兼容情况,可参考开源文档 snapshot restore version compatibility。
如果需要迁移到火山引擎云搜索服务的 OpenSearch 2.9.0
版本实例,可以使用 Logstash 进行数据迁移。详细操作,请参见使用 Logstash 跨集群迁移数据。
集群版本 | ||
---|---|---|
快照版本 | 6.x | 7.x |
6.x | ✅ | ✅ |
7.x | ❌ | ✅ |
火山引擎 TOS 兼容 AWS S3 协议。在本地 IDC 的源 Elasticsearch 集群中,您可以直接通过官方插件 repository-s3
进行数据备份。
可以先通过 _cat/plugins
API 查看集群已安装的插件列表。
如果没有安装 repository-s3
插件,则需要在每个节点上手动安装,安装后重启集群。
执行以下命令,安装 repository-s3
插件。
如需了解 repository-s3
插件安装的更多信息,可参考开源文档 S3 Repository Plugin。
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
报错。
您可以选择如下任意一种方案来避免出现该报错:
config/jvm.options
文件中新增一行 es.allow_insecure_settings=true
配置,该配置可允许集群显示配置 access_key
和secret_key
。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' { "type" : "s3", "settings" : { "bucket" : "${bucket_name}", "path_style_access" : "false", "endpoint" : "${tos_s3_endpoint}", "protocol" : "http", "client" : "default", "base_path" : "${base_path}", "region" : "${bucket_region}", "access_key": "${your_access_key}", "secret_key": "${your_secret_key}" } } '
参数位置 | 参数说明 |
---|---|
请求 URL |
|
TOS 配置 |
说明 若您在安装 |
在本地 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' \ -d '{ "indices": "${index_name}", "ignore_unavailable": false, "include_global_state": false }'
参数位置 | 参数说明 |
---|---|
请求 URL |
|
快照配置 |
|
源 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' { "type" : "s3", "settings" : { "bucket" : "${your_bucket_name}", "path_style_access" : "false", "endpoint" : "${tos_s3_endpoint}", "protocol" : "http", "client" : "default", "base_path" : "${your_base_path}", "region" : "${your_bucket_region}", "access_key": "${your_access_key}", "secret_key": "${your_secret_key}" } } '
参数位置 | 参数说明 |
---|---|
请求 URL |
|
TOS 配置 |
|
在火山 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' \ -d '{ "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' \ -d '{ "ignore_unavailable": false, "rename_pattern": "(.+)", "rename_replacement": "restored_$1" }'
恢复索引的命令行涉及到以下参数,请根据真实情况填写。恢复索引还支持其他更多参数,如需了解,可参见开源文档Restore a snapshot。
参数位置 | 参数说明 |
---|---|
请求 URL |
|
恢复索引配置 |
|
目的火山 ES 集群执行从 TOS 快照恢复索引的命令后,您可以通过以下命令查看恢复进度。
curl http://${target_username}:${target_password}@${target_es_host}/_cat/recovery/${index_name}
您还可以通过对比查看源 Elasticsearch 集群和目的火山 ES 集群对应索引settings
、mapping
是否一致,以及通过 _cat/indices
API 对比文档数量是否一致,一致则表示同步完成。
如果需要迁移其他云厂商的 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' { "type" : "s3", "settings" : { "bucket" : "${your_bucket_name}", "path_style_access" : "false", "endpoint" : "${tos_s3_endpoint}", "protocol" : "http", "client" : "default", "base_path" : "${your_base_path}", "region" : "${your_bucket_region}", "access_key": "${your_access_key}", "secret_key": "${your_secret_key}" } } '
参数位置 | 参数说明 |
---|---|
请求 URL |
|
TOS 配置 |
|
在火山 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' \ -d '{ "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' \ -d '{ "ignore_unavailable": false, "rename_pattern": "(.+)", "rename_replacement": "restored_$1" }'
恢复索引的命令行涉及到以下参数,请根据真实情况填写。恢复索引还支持其他更多参数,如需了解,可参见开源文档Restore a snapshot。
参数位置 | 参数说明 |
---|---|
请求 URL |
|
恢复索引配置 |
|
目的火山 ES 集群执行从 TOS 快照恢复索引的命令后,您可以通过以下命令查看恢复进度。
curl http://${target_username}:${target_password}@${target_es_host}/_cat/recovery/${index_name}
您还可以通过对比查看源 Elasticsearch 集群和目的火山 ES 集群对应索引settings
、mapping
是否一致,以及通过 _cat/indices
API 对比文档数量是否一致,一致则表示同步完成。