eclipse怎么做网站,晋城市企业网站,短视频获客,营销信息在当今的数据驱动时代#xff0c;搜索引擎的快照功能在数据保护和灾难恢复中至关重要。本文将对 EasySearch、Elasticsearch 和 Amazon OpenSearch 的快照兼容性进行比较#xff0c;分析它们在快照创建、恢复、存储格式和跨平台兼容性等方面的特点#xff0c;帮助大家更好地…在当今的数据驱动时代搜索引擎的快照功能在数据保护和灾难恢复中至关重要。本文将对 EasySearch、Elasticsearch 和 Amazon OpenSearch 的快照兼容性进行比较分析它们在快照创建、恢复、存储格式和跨平台兼容性等方面的特点帮助大家更好地理解这些搜索引擎的差异从而选择最适合自己需求的解决方案。
启动集群
Easysearch
sysctl -w vm.max_map_count262144Amazon OpenSearch
Elasticsearch
由于这个docker compose没有关于kibana的配置所以我们还是用Console添加原生的Elasticsearch集群
集群信息 快照还原的步骤
快照前的准备
插件安装
本次测试选择把索引快照备份到Amazon S3所以需要使用S3 repository plugin这个插件添加了对使用 Amazon S3 作为快照/恢复存储库的支持。
Easysearch和OpenSearch集群自带了这个插件所以无需额外安装。
对于自己部署的三节点Elasticsearch则需要进入每一个节点运行安装命令然后再重启集群建议使用自动化运维工具来做这步安装命令如下:
sudo bin/elasticsearch-plugin install repository-s3如果不再需要这个插件可以这样删除。
sudo bin/elasticsearch-plugin remove repository-s3由于需要和Amazon Web Services打交道所以我们需要设置IAM凭证这个插件可以从EC2 IAM instance profileECS task role 以及EKS的Service account读取相应的凭证。
对于托管的Amazon OpenSearch来说我们无法在托管的EC2上绑定我们的凭证所以需要新建一个OpenSearchSnapshotRole然后通过当前的用户把这个角色传递给服务也就是我们说的IAM:PassRole。
创建OpenSearchSnapshotRole策略如下
{Version: 2012-10-17,Statement: [{Action: [s3:ListBucket],Effect: Allow,Resource: [arn:aws:s3:::bucket-name]},{Action: [s3:GetObject,s3:PutObject,s3:DeleteObject],Effect: Allow,Resource: [arn:aws:s3:::bucket-name/*]}]
}信任关系如下
{Version: 2012-10-17,Statement: [{Effect: Allow,Principal: {Service: es.amazonaws.com},Action: sts:AssumeRole}]
}然后在我们的IAM user上加上PassRole的权限这样我们就可以把OpenSearchSnapshotRole传递给OpenSearch集群。
{Version: 2012-10-17,Statement: [{Effect: Allow,Action: iam:PassRole,Resource: arn:aws:iam::123456789012:role/OpenSearchSnapshotRole}]
}注册存储库
在源集群执行注册
PUT /_snapshot/snapshot-repo-name
{type: s3,settings: {bucket: bucket-name,base_path: bucket-prefix,在目标集群同样执行这个语句为了防止覆盖源集群存储库的数据将 “readonly”: true 添加到settings PUT 请求中这样就只有一个集群具有对存储库的写入权限。
PUT /_snapshot/snapshot-repo-name
{type: s3,settings: {bucket: bucket-name,base_path: bucket-prefix,readonly: true,对于OpenSearch来说还需要执行passrole所以还需要添加role_arn这个字段由于IAM:PassRole需要对HTTP 请求做signV4日签名所以这部常常使用Postman来完成。把角色传递过去之后接下来的快照还原操作就可以在OpenSearch Dashboard中进行操作了。 需要注意的是需要在auth这里输入AccessKeySecretKeyAWS RegionService Namees来做SignV4的签名。
请求体如下
{type: s3,settings: {bucket: bucket-name,base_path: bucket-prefix,readonly: true,role_arn: arn:aws:iam::123456789012:role/OpenSearchSnapshotRole}
}查看所有注册的存储库 GET _snapshot这个命令返回所有已注册的快照存储库列表及其基本信息。
GET _snapshot{es_repository: {type: s3,settings: {bucket: your-s3-bucket-name,region: your-s3-bucket-region}}
}查看特定存储库的详细信息 GET _snapshot/es_repository这个命令返回名为es_repository的存储库的详细配置信息包括存储桶名称、区域和其他设置。
GET _snapshot/es_repository{es_repository: {type: s3,settings: {bucket: your-s3-bucket-name,region: your-s3-bucket-region,access_key: your-access-key,secret_key: your-secret-key}}
}查看特定存储库中的快照 GET _cat/snapshots/es_repository?v这个命令返回es_repository存储库中的所有快照及其详细信息包括快照ID、状态、开始时间、结束时间、持续时间、包含的索引数量、成功和失败的分片数量等。
GET _cat/snapshots/es_repository?vid status start_epoch start_time end_epoch end_time duration indices successful_shards failed_shards total_shards
snapshot_1 SUCCESS 1628884800 08:00:00 1628888400 09:00:00 1h 3 10 0 10
snapshot_2 SUCCESS 1628971200 08:00:00 1628974800 09:00:00 1h 3 10 0 10创建索引快照
# PUT _snapshot/my_repository/my_snapshot_{now/d}
PUT _snapshot/my_repository/my_snapshot
{indices: my-index,logs-my_app-default,
}根据快照的大小不同完成快照可能需要一些时间。默认情况下create snapshot API 只会异步启动快照过程该过程在后台运行。要更改为同步调用可以将 wait_for_completion 查询参数设置为 true。
PUT _snapshot/my_repository/my_snapshot?wait_for_completiontrue另外还可以使用 clone snapshot API 克隆现有的快照。要监控当前正在运行的快照可以使用带有 _current 请求路径参数的 get snapshot API。
GET _snapshot/my_repository/_current如果要获取参与当前运行快照的每个分片的完整详细信息可以使用 get snapshot status API。
GET _snapshot/_status成功创建快照之后就可以在S3上看到备份的数据块文件这个是正确的快照层级结构
需要注意的是 “base_path”: 这里最好不要加/虽然不影响同集群迁移这个会为我们在不同厂商的搜索引擎中迁移遇到问题可能是这样的所以需要注意。所以在Open Search中还原Elasticsearch就遇到了这个问题
{error: {root_cause: [{type: snapshot_missing_exception,reason: [easy_repository:2/-jOQ0oucQDGF3hJMNz-vKQ] is missing}],type: snapshot_missing_exception,reason: [easy_repository:2/-jOQ0oucQDGF3hJMNz-vKQ] is missing,caused_by: {type: no_such_file_exception,reason: Blob object [11111/indices/7fv2zAi4Rt203JfsczUrBg/meta-YGnzxZABRBxW-2vqcmci.dat] not found: The specified key does not exist. (Service: S3, Status Code: 404, Request ID: R71DDHX4XXM0434T, Extended Request ID: d9M/HWvPvMFdPhB6KXwYCW3ZFqeFo9EoscWPkulOXWaTnovAE5PlemtuVzKXjlCrrgskXAus)}},status: 404
}
恢复索引快照
POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
{indices: my-index,logs-my_app-default,
}各个集群的还原 Elasticsearch 7.10.2 的快照可以还原到Easysearch和Amazon OpenSearch 从Easysearch 1.8.2还原到Elasticsearch 7.10.2报错如下
{error: {root_cause: [{type: snapshot_restore_exception,reason: [s3_repository:1/a2qV4NYIReqvgW6BX_nxxw] cannot restore index [my_indexs] because it cannot be upgraded}],type: snapshot_restore_exception,reason: [s3_repository:1/a2qV4NYIReqvgW6BX_nxxw] cannot restore index [my_indexs] because it cannot be upgraded,caused_by: {type: illegal_state_exception,reason: The index [[my_indexs/ALlTCIr0RJqtP06ouQmf0g]] was created with version [1.8.2] but the minimum compatible version is [6.0.0-beta1]. It should be re-indexed in Elasticsearch 6.x before upgrading to 7.10.2.}},status: 500
}从Amazon OpenSearch 2.1.3还原到Elasticsearch 7.10.2报错如下无论是否开启兼容模式
{error: {root_cause: [{type: snapshot_restore_exception,reason: [aos:2/D-oyYSscSdCbZFcmPZa_yg] the snapshot was created with Elasticsearch version [36.34.78-beta2] which is higher than the version of this node [7.10.2]}],type: snapshot_restore_exception,reason: [aos:2/D-oyYSscSdCbZFcmPZa_yg] the snapshot was created with Elasticsearch version [36.34.78-beta2] which is higher than the version of this node [7.10.2]},status: 500
}从Easysearch 1.8.2还原到Amazon OpenSearch2.13报错如下无论是否开启兼容模式
{error: {root_cause: [{type: snapshot_restore_exception,reason: [easy_repository:2/LE18AWHlRJu9rpz9BJatUQ] cannot restore index [my_indexs] because it cannot be upgraded}],type: snapshot_restore_exception,reason: [easy_repository:2/LE18AWHlRJu9rpz9BJatUQ] cannot restore index [my_indexs] because it cannot be upgraded,caused_by: {type: illegal_state_exception,reason: The index [[my_indexs/VHOo7yfDTRa48uhQvquFzQ]] was created with version [1.8.2] but the minimum compatible version is OpenSearch 1.0.0 (or Elasticsearch 7.0.0). It should be re-indexed in OpenSearch 1.x (or Elasticsearch 7.x) before upgrading to 2.13.0.}},status: 500
}以下是兼容性对比每行第一列代表源集群第一行代表目标集群
快照兼容对比Easysearch 1.8.2Elasticsearch 7.10.2OpenSearch 2.13Easysearch 1.8.2兼容不兼容不兼容Elasticsearch 7.10.2兼容兼容兼容OpenSearch 2.13不兼容不兼容兼容
Elasticsearch的兼容列表官方的列表如下
参考文献
开始使用 Elastic Stack 和 Docker Compose第 1 部分 https://www.elastic.co/cn/blog/getting-started-with-the-elastic-stack-and-docker-compose
Docker Compose 部署多节点Elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#docker-compose-file
repository-s3 教程
https://www.elastic.co/guide/en/elasticsearch/reference/8.14/repository-s3.html
https://www.elastic.co/guide/en/elasticsearch/plugins/7.10/repository-s3.html
snapshot-restore
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/snapshot-restore.html
在亚马逊 OpenSearch 服务中创建索引快照
https://docs.amazonaws.cn/zh_cn/opensearch-service/latest/developerguide/managedomains-snapshots.html#managedomains-snapshot-restore
教程迁移至 Amazon OpenSearch Service
https://docs.amazonaws.cn/zh_cn/opensearch-service/latest/developerguide/migration.html