本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
跨集群复制 Amazon OpenSearch Service
Amazon OpenSearch Service 中的跨集群复制可让您将用户索引、映射和元数据从一个 OpenSearch Service 域复制到另一个。使用跨集群复制有助于确保在发生中断时进行灾难恢复,并允许您跨地理位置较远的数据中心复制数据以减少延迟。您需要为在域之间传输的数据支付标准的 AWS 数据传输费用
跨集群复制遵循主动-被动复制模型,其中本地索引或关注者索引(复制数据的位置)从远程索引或领导者索引中提取数据。领导者索引是指数据源,或者要从中复制数据的索引。关注者索引是指数据目标,或者要将数据复制到 的索引。
跨集群复制可在运行 Elasticsearch 7.10 或 OpenSearch 1.1 或更高版本的域上使用。
注意
本文档从 Amazon OpenSearch Service 的角度介绍了如何设置跨集群复制。这包括使用 AWS Management Console 来设置跨集群连接,自主管理型 OpenSearch 集群不支持此功能。有关完整文档,包括设置参考和全面的 API 参考,请参阅 OpenSearch 文档中的 Cross-cluster replication
限制
跨集群复制具有以下限制:
-
您无法在 Amazon OpenSearch Service 域和自托管 OpenSearch 和 Elasticsearch 集群之间复制数据。
-
您无法将索引从一个关注者域复制到另一个关注者域。如果要将索引复制到多个关注者域,则只能从单个领导者域中进行复制。
-
一个域可以通过入站和出站连接的组合连接到最多 20 个其他域。
-
最初设置跨集群连接时,领导者域的版本必须与关注者域相同或更高。
-
不能使用 AWS CloudFormation 连接域。
-
不能在 M3 和可突增(T2 和 T3)实例上使用跨集群复制。
-
您不能在 UltraWarm 索引或冷索引之间复制数据。这两个索引都必须位于热存储中。
-
删除领导者域的索引时,不会自动删除关注者域中对应的索引。
先决条件
在设置跨集群复制之前,请确保域满足以下要求:
权限要求
为了开始复制,必须包括对远程(领导者)域的 es:ESCrossClusterGet
权限。我们建议对远程域采取以下 IAM policy。此策略还允许您执行其他操作,例如编制文档索引和执行标准搜索:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/leader-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/leader-domain" } ] }
请确保对 /leader-domain
,而不是 /leader-domain/*
应用了 es:ESCrossClusterGet
权限。
为了让非管理员用户执行复制活动,还需要将他们映射到适当的权限。大多数权限对应于特定的 REST API 操作indices:admin/plugins/replication/index/_resume
权限可让您恢复索引的复制。有关权限的完整列表,请参阅 OpenSearch 文档中的复制权限
注意
开始复制和创建复制规则的命令是特殊情况。由于这些命令在领导者和关注者域上调用后台进程,因此您必须在请求中传递 leader_cluster_role
和 follower_cluster_role
。OpenSearch Service 将在所有后端复制任务中使用这些角色。有关映射和使用这些角色的信息,请参阅 OpenSearch 文档中的映射领导者和关注者集群角色
设置跨集群连接
要将索引从一个域复制到另一个域,您需要在域之间建立跨集群连接。连接域最简单的方法是通过域控制面板的 Connections(连接)选项卡。还可使用配置 API 或 AWS CLI。由于跨集群复制遵循“拉取”模型,因此您可从关注者域启动连接。
注意
如果您之前连接两个域来执行跨集群搜索,则无法使用同一连接进行复制。连接在控制台中将标记为 SEARCH_ONLY
。为了在以前连接的两个域之间执行复制,您必须先删除该连接,然后再重新创建它。完成此操作后,该连接可用于跨集群搜索和跨集群复制。
设置连接
-
在 Amazon OpenSearch Service 控制台中,选择关注者域,转到 Connections(连接)选项卡,然后选择 Request(请求)。
-
对于 Connection alias(连接别名),输入您的连接的名称。
-
选择连接您的 AWS 账户 和区域中的域还是其他账户或区域中的域。
-
要连接到您的 AWS 账户 和区域中的域,请选择该域,然后选择 Request(请求)。
-
要连接到另一个 AWS 账户 或区域中的域,请指定远程域的 ARN,然后选择 Request(请求)。
-
OpenSearch Service 会验证连接请求。如果域不兼容,则连接失败。如果验证成功,它将发送到目标域进行批准。目标域批准请求后,您可以开始复制。
跨集群复制支持双向复制。这意味着您可以创建从 A 域到 B 域的出站连接,以及从 B 域到 A 域的另一个出站连接。然后,您可以设置复制,使 A 域遵循 B 域中的索引,使 B 域遵循 A 域中的索引。
开始复制
建立跨集群连接后,您可以开始复制数据。首先,在领导者域中创建要复制的索引:
PUT leader-01
要复制该索引,请将以下命令发送到关注者域:
PUT _plugins/_replication/follower-01
/_start
{
"leader_alias": "connection-alias
",
"leader_index": "leader-01
",
"use_roles":{
"leader_cluster_role": "all_access
",
"follower_cluster_role": "all_access
"
}
}
您可以在域控制面板的连接选项卡上找到连接别名。
为简单起见,本例假设管理员正在发出请求并对 leader_cluster_role
和 follower_cluster_role
使用 all_access
。但是,在生产环境中,我们建议您在领导者和关注者索引上创建复制用户,并相应地进行映射。用户名必须完全相同。有关这些角色以及如何进行映射的信息,请参阅 OpenSearch 文档中的映射领导者和关注者集群角色
确认复制
要确认复制正在进行,请获取复制状态:
GET _plugins/_replication/follower-01
/_status
{
"status" : "SYNCING",
"reason" : "User initiated",
"leader_alias" : "connection-alias",
"leader_index" : "leader-01",
"follower_index" : "follower-01",
"syncing_details" : {
"leader_checkpoint" : -5,
"follower_checkpoint" : -5,
"seq_no" : 0
}
}
领导者和关注者检查点值以负整数开始,反映您拥有的分片数量(-1 表示一个分片,-5 表示 5 个分片,依此类推)。随着每次进行更改,这些值会递增为正整数。如果值相同,则意味着索引已完全同步。您可以使用这些检查点值来度量域之间的复制延迟。
要进一步验证复制,请将文档添加到领导者索引:
PUT leader-01
/_doc/1
{
"Doctor Sleep":"Stephen King"
}
然后确认其在关注者索引上显示:
GET follower-01
/_search
{
...
"max_score" : 1.0,
"hits" : [
{
"_index" : "follower-01",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"Doctor Sleep" : "Stephen King"
}
}
]
}
}
暂停和恢复复制
如果需要修复问题或减少领导域的负载,可以暂时暂停复制。将此请求发送到关注者域。确保包含空的请求体:
POST _plugins/_replication/follower-01
/_pause
{}
然后获取状态以确保复制已暂停:
GET _plugins/_replication/follower-01
/_status
{
"status" : "PAUSED",
"reason" : "User initiated",
"leader_alias" : "connection-alias",
"leader_index" : "leader-01",
"follower_index" : "follower-01"
}
完成更改后,恢复复制。将此请求发送到关注者域。确保包含空的请求体:
POST _plugins/_replication/follower-01
/_resume
{}
无法在复制暂停超过 12 个小时后恢复复制。您必须停止复制,删除从索引,然后重新启动主项的复制。
停止复制
完全停止复制后,关注者索引会取消关注领导者并成为标准索引。停止复制后,您无法重新启动复制。
停止从关注者域进行复制。确保包含空的请求体:
POST _plugins/_replication/follower-01
/_stop
{}
自动关注
您可以针对单个领导域定义一组复制规则,这些规则会自动复制匹配指定模式的索引。如果领导域上的索引符合任何一种模式(例如,books*
)时,系统将在关注者域上创建匹配的关注者索引。OpenSearch Service 会复制符合该模式的所有现有索引,以及您创建的新索引。它不会复制关注者域中已存在的索引。
要复制所有索引(系统创建的索引以及关注者域中已存在的索引除外),请使用通配符(*
)模式。
创建复制规则
在关注者域上创建复制规则并指定跨集群连接的名称:
POST _plugins/_replication/_autofollow
{
"leader_alias" : "connection-alias
",
"name": "rule-name
",
"pattern": "books*
",
"use_roles":{
"leader_cluster_role": "all_access
",
"follower_cluster_role": "all_access
"
}
}
您可以在域控制面板的连接选项卡上找到连接别名。
为简单起见,本例假设管理员正在发出请求并使用 all_access
作为领导者和关注者域角色。但是,在生产环境中,我们建议您在领导者和关注者索引上创建复制用户,并相应地进行映射。用户名必须完全相同。有关这些角色以及如何进行映射的信息,请参阅 OpenSearch 文档中的映射领导者和关注者集群角色
要检索域中现有复制规则的列表,请使用自动关注统计数据 API 操作
要测试规则,请创建一个与领导者域模式匹配的索引:
PUT books-are-fun
然后检查其副本是否出现在关注者域中:
GET _cat/indices
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open books-are-fun ldfHO78xYYdxRMULuiTvSQ 1 1 0 0 208b 208b
删除复制规则
删除复制规则后,OpenSearch Service 会停止复制匹配该模式的新索引,但继续现有复制活动,直到您停止复制这些索引。
从关注者域中删除复制规则:
DELETE _plugins/_replication/_autofollow
{
"leader_alias" : "connection-alias
",
"name": "rule-name
"
}
升级已连接的域
要升级具有跨集群连接的两个域的引擎版本,请先升级关注者域,然后再升级领导者域。不要删除两者之间的连接,否则复制会暂停,您将无法恢复。