验证迁移工具
在使用迁移助手之前,请按照以下步骤验证您的集群是否已准备好进行迁移。
验证快照创建
验证是否可以为源集群创建快照,并将其用于元数据和回填场景。
安装 Elasticsearch S3 存储库插件
快照需要存储在迁移助手可以访问的位置。本指南使用 Amazon Simple Storage Service (Amazon S3)。默认情况下,迁移助手会创建一个 S3 存储桶用于存储。因此,有必要在您的源节点上安装 Elasticsearch S3 存储库插件 (https://elastic.ac.cn/guide/en/elasticsearch/plugins/7.10/repository-s3.html)。
此外,请确保该插件已配置允许读写 Amazon S3 的 AWS 凭证。如果您的 Elasticsearch 集群运行在具有 AWS Identity and Access Management (IAM) 执行角色的 Amazon Elastic Compute Cloud (Amazon EC2) 或 Amazon Elastic Container Service (Amazon ECS) 实例上,请包含必要的 S3 权限。或者,您可以将凭证存储在 Elasticsearch 密钥库中。
验证 S3 存储库插件配置
您可以通过创建测试快照来验证 S3 存储库插件是否配置正确。
使用以下 AWS Command Line Interface (AWS CLI) 命令为快照创建 S3 存储桶
aws s3api create-bucket --bucket <your-bucket-name> --region <your-aws-region>
使用以下 cURL 命令在您的源集群上注册新的 S3 快照存储库
curl -X PUT "http://<your-source-cluster>:9200/_snapshot/test_s3_repository" -H "Content-Type: application/json" -d '{
"type": "s3",
"settings": {
"bucket": "<your-bucket-name>",
"region": "<your-aws-region>"
}
}'
接下来,创建一个仅捕获集群元数据的测试快照
curl -X PUT "http://<your-source-cluster>:9200/_snapshot/test_s3_repository/test_snapshot_1" -H "Content-Type: application/json" -d '{
"indices": "",
"ignore_unavailable": true,
"include_global_state": true
}'
检查 AWS Management Console 以确认您的存储桶包含快照。
验证后删除测试快照
要删除验证期间创建的资源,您可以使用以下删除命令
测试快照
curl -X DELETE "http://<your-source-cluster>:9200/_snapshot/test_s3_repository/test_snapshot_1?pretty"
测试快照存储库
curl -X DELETE "http://<your-source-cluster>:9200/_snapshot/test_s3_repository?pretty"
S3 存储桶
aws s3 rm s3://<your-bucket-name> --recursive
aws s3api delete-bucket --bucket <your-bucket-name> --region <your-aws-region>
故障排除
使用本指南排查以下任何快照验证问题。
访问被拒绝错误 (403)
如果您遇到类似 AccessDenied (Service: Amazon S3; Status Code: 403)
的错误,请验证以下内容
- 确保您使用的是迁移助手创建的 S3 存储桶。
- 如果您使用自定义 S3 存储桶,请验证
- 分配给您的 Elasticsearch 集群的 IAM 角色具有必要的 S3 权限。
- 快照配置中提供的存储桶名称和 AWS 区域与您实际创建的 S3 存储桶匹配。
旧版 Elasticsearch
旧版 Elasticsearch S3 存储库插件可能无法读取嵌入在 Amazon EC2 和 Amazon ECS 实例中的 IAM 角色凭证。这是因为随其附带的 AWS SDK 版本过旧,无法读取获取这些凭证的新标准方式,如 Instance Metadata Service v2 (IMDSv2) 规范所示。这可能导致快照创建失败,并显示类似以下的错误消息
{"error":{"root_cause":[{"type":"repository_verification_exception","reason":"[migration_assistant_repo] path [rfs-snapshot-repo] is not accessible on master node"}],"type":"repository_verification_exception","reason":"[migration_assistant_repo] path [rfs-snapshot-repo] is not accessible on master node","caused_by":{"type":"i_o_exception","reason":"Unable to upload object [rfs-snapshot-repo/tests-s8TvZ3CcRoO8bvyXcyV2Yg/master.dat] using a single upload","caused_by":{"type":"amazon_service_exception","reason":"Unauthorized (Service: null; Status Code: 401; Error Code: null; Request ID: null)"}}},"status":500}
如果您遇到此问题,可以通过在快照持续期间在源集群中的实例上临时启用 IMDSv1 来解决。AWS Management Console 和 AWS CLI 中都提供了此开关。切换此开关将启用旧的访问模型,并使 Elasticsearch S3 存储库插件正常工作。有关 IMDSv1 的更多信息,请参阅 修改现有实例的实例元数据选项。
切换客户端流量
迁移助手应用程序负载均衡器部署了一个侦听器,该侦听器通过代理服务在源集群和目标集群之间转移流量。应用程序负载均衡器应以源直通模式启动。
验证流量切换是否完成
使用以下步骤验证流量切换是否完成
- 在 AWS Management Console 中,导航到 EC2 > 负载均衡器。
- 选择 MigrationAssistant ALB。
- 检查端口
9200
上的侦听器,并验证 100% 的流量是否指向源代理。 - 在 AWS Management Console 中,导航到迁移 ECS 集群。
- 选择目标代理服务。
- 验证服务的期望计数正在运行
- 如果未达到期望计数,请更新服务以将其增加到至少 1 个,然后等待服务启动。
- 在负载均衡器运行状况下的运行状况和指标选项卡中,验证所有目标都报告为健康
- 这确认应用程序负载均衡器可以通过目标代理连接到目标集群。
- (重置)在 Amazon ECS 中将目标代理服务的期望计数更新回其原始值。
修复未识别的流量模式
将流量切换到目标集群时,您可能会遇到未识别的流量模式。为帮助识别这些模式的原因,请使用以下步骤
- 验证目标集群允许来自目标代理安全组的入站流量。
- 导航到目标代理 ECS 任务以调查任何失败的任务。将筛选期望状态设置为任何期望状态以查看所有任务,然后导航到任何已停止任务的日志。
验证复制
部署流量捕获代理后,使用以下步骤验证复制是否正常工作
- 在 AWS Management Console 中,导航到迁移 ECS 集群。
- 导航到捕获代理服务。
- 验证捕获代理以期望的代理计数运行。如果不是,请更新服务以将其增加到至少 1 个,然后等待启动。
- 在运行状况和指标 > 负载均衡器运行状况下,验证所有目标都健康。这表示应用程序负载均衡器能够通过捕获代理连接到源集群。
- 导航到迁移控制台终端。
- 运行
console kafka describe-topic-records
。等待 30 秒,进行另一次应用程序负载均衡器健康检查。 - 再次运行
console kafka describe-topic-records
,并验证两次运行之间的 RECORDS 数量有所增加。 - 运行
console replay start
以启动流量重放器。 - 运行
tail -f /shared-logs-output/traffic-replayer-default/*/tuples/tuples.log | jq '.targetResponses[]."Status-Code"'
以确认 Kafka 请求已发送到目标并按预期响应。如果响应未出现- 通过运行
./catIndices.sh
检查迁移控制台是否可以访问目标集群,该命令应显示源和目标中的索引。 - 确认消息仍在记录到 Kafka。
- 使用 CloudWatch 检查流量重放器日志 (
/migration/STAGE/default/traffic-replayer-default
) 中的错误。
- 通过运行
- (重置)在 Amazon ECS 中将捕获代理服务的期望计数更新回其原始值。
故障排除
使用本指南排查以下任何复制验证问题。
状态码为 401/403 的健康检查响应
如果源集群配置为需要身份验证,则捕获代理将无法验证复制,除了收到应用程序负载均衡器健康检查的 401/403 状态码。有关更多信息,请参阅 故障模式。
流量未到达源集群
验证源集群允许来自捕获代理安全组的入站流量。
通过导航到流量捕获代理 ECS 查找失败的任务。将筛选期望状态更改为任何期望状态以查看所有任务,并导航到已停止任务的日志。
快照和 S3 存储桶问题
使用迁移助手的 CDK 部署时,在快照创建和删除过程中可能会遇到以下错误。
存储桶权限
为确保在 CDK 部署过程中能够删除和创建快照,请确认 OSMigrations-dev-<region>-CustomS3AutoDeleteObjects
堆栈具有 S3 对象删除权限。然后,验证 OSMigrations-dev-<region>-default-SnapshotRole
具有以下 S3 权限
- 列出存储桶内容
- 读取/写入/删除对象
快照冲突
为防止快照冲突,请使用迁移控制台中的 console snapshot delete
命令。如果您在迁移控制台以外的位置删除快照或快照存储库,则可能会遇到“已存在”错误。
迁移前重置
在所有验证完成后,在使用迁移助手进行实际迁移之前,请重置所有资源。
以下步骤概述了在执行实际迁移之前如何使用迁移助手重置资源。此时,所有验证都应已完成。这些步骤可以在访问迁移控制台之后执行。
流量重放器
要停止运行流量重放器,请使用以下命令
console replay stop
Kafka
要清除 Kafka 主题中所有捕获的流量,可以运行以下命令。
此命令将导致丢失捕获代理到目前为止捕获的任何流量数据,因此应谨慎使用。
console kafka delete-topic
目标集群
要清除目标集群中可能因测试而创建的非系统索引,可以运行以下命令
此命令将导致目标集群中所有数据丢失,因此应谨慎使用。
console clusters clear-indices --cluster target