跨集群复制
ECE ECK Elastic Cloud Hosted Self Managed
通过跨集群复制,您可以跨集群复制索引以
- 在数据中心中断的情况下继续处理搜索请求
- 防止搜索量影响索引吞吐量
- 通过在地理位置上靠近用户的位置处理搜索请求,从而降低搜索延迟
跨集群复制使用主动-被动模型。您索引到领导者索引,数据被复制到一个或多个只读关注者索引。在将关注者索引添加到集群之前,您必须配置包含领导者索引的远程集群。
当领导者索引接收到写入时,关注者索引从远程集群上的领导者索引拉取更改。您可以手动创建关注者索引,或者配置自动关注模式以自动为新的时间序列索引创建关注者索引。
您可以在单向或双向设置中配置跨集群复制集群
- 在单向配置中,一个集群仅包含领导者索引,另一个集群仅包含关注者索引。
- 在双向配置中,每个集群都包含领导者索引和关注者索引。
在单向配置中,包含关注者索引的集群必须运行与远程集群相同或更新的 Elasticsearch 版本。如果更新,则版本也必须兼容,如下列矩阵中所述。
版本兼容性矩阵
本地集群 | |||||||||
远程集群 | 5.0–5.5 | 5.6 | 6.0–6.6 | 6.7 | 6.8 | 7.0 | 7.1–7.16 | 7.17 | 8.0–9.0 |
5.0–5.5 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
5.6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
6.0–6.6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
6.7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
6.8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
7.0 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
7.1–7.16 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
7.17 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
8.0–9.0 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
使用跨集群复制在 Elastic Stack 中构建多个多集群架构
- 灾难恢复,以防主集群发生故障,辅助集群充当热备份
- 数据本地性,用于维护靠近应用程序服务器(和用户)的数据集的多个副本,并减少昂贵的延迟
- 集中式报告,用于最大限度地减少查询多个地理分布式 Elasticsearch 集群中的网络流量和延迟,或者通过将搜索卸载到辅助集群来防止搜索负载干扰索引
观看跨集群复制网络研讨会,了解有关以下用例的更多信息。然后,在本地机器上设置跨集群复制并完成网络研讨会的演示。
灾难恢复为您的关键任务应用程序提供了承受数据中心或区域中断的容忍度。此用例是跨集群复制最常见的部署。您可以在不同的架构中配置集群以支持灾难恢复和高可用性
在此配置中,数据从生产数据中心复制到灾难恢复数据中心。由于关注者索引复制领导者索引,因此如果生产数据中心不可用,您的应用程序可以使用灾难恢复数据中心。

您可以将数据从一个数据中心复制到多个数据中心。此配置既提供灾难恢复又提供高可用性,确保在主数据中心关闭或不可用时,数据在两个数据中心中复制。
在下图中,来自数据中心 A 的数据被复制到数据中心 B 和数据中心 C,它们都具有来自数据中心 A 的领导者索引的只读副本。

您可以跨多个数据中心复制数据以形成复制链。在下图中,数据中心 A 包含领导者索引。数据中心 B 从数据中心 A 复制数据,数据中心 C 从数据中心 B 中的关注者索引复制数据。这些数据中心之间的连接形成链式复制模式。

在双向复制设置中,所有集群都可以访问以查看所有数据,并且所有集群都有一个索引可以写入,而无需手动实现故障转移。应用程序可以写入每个数据中心内的本地索引,并跨多个索引读取以获得所有信息的全局视图。
当集群或数据中心不可用时,此配置不需要手动干预。在下图中,如果数据中心 A 不可用,您可以继续使用数据中心 B 而无需手动故障转移。当数据中心 A 恢复在线时,集群之间的复制将恢复。

此配置对于仅索引工作负载特别有用,其中不会发生对文档值的更新。在此配置中,由 Elasticsearch 索引的文档是不可变的。客户端位于每个数据中心以及 Elasticsearch 集群旁边,并且不与不同数据中心中的集群通信。
将数据拉近您的用户或应用程序服务器可以减少延迟和响应时间。此方法也适用于在 Elasticsearch 中复制数据。例如,您可以将产品目录或参考数据集复制到全球 20 个或更多数据中心,以最大限度地减少数据和应用程序服务器之间的距离。
在下图中,数据从一个数据中心复制到另外三个数据中心,每个数据中心都在自己的区域中。中心数据中心包含领导者索引,其他数据中心包含复制该特定区域中的数据的关注者索引。此配置使数据更接近访问它的应用程序。

当跨大型网络查询效率低下时,使用集中式报告集群很有用。在此配置中,您可以将数据从许多较小的集群复制到集中式报告集群。
例如,一家大型全球银行可能在全球拥有 100 个 Elasticsearch 集群,这些集群分布在每个银行分支机构的不同区域。使用跨集群复制,银行可以将来自所有 100 家银行的事件复制到中央集群,以在本地分析和聚合事件以进行报告。银行可以使用跨集群复制来复制特定索引,而不是维护镜像集群。
在以下示意图中,来自不同区域的三个数据中心的数据被复制到一个集中式报告集群。此配置允许您将数据从区域中心复制到中央集群,您可以在本地运行所有报告。

尽管您在索引级别设置跨集群复制,但Elasticsearch在分片级别实现复制。创建跟随者索引时,该索引中的每个分片都会从领导者索引中相应的分片拉取更改,这意味着跟随者索引具有与领导者索引相同数量的分片。领导者上的所有操作都由跟随者复制,例如创建、更新或删除文档的操作。这些请求可以由领导者分片的任何副本(主分片或副本分片)提供服务。
当跟随者分片发送读取请求时,领导者分片会响应任何新操作,但受您在配置跟随者索引时建立的读取参数的限制。如果没有新的操作可用,领导者分片将等待最长配置的超时时间以查找新的操作。如果超时时间已过,领导者分片会响应跟随者分片,表明没有新的操作。跟随者分片更新分片统计信息,并立即向领导者分片发送另一个读取请求。此通信模型确保远程集群和本地集群之间的网络连接持续使用,避免被外部源(例如防火墙)强制终止。
如果读取请求失败,则会检查失败的原因。如果失败的原因被认为是可恢复的(例如网络故障),则跟随者分片将进入重试循环。否则,跟随者分片会暂停直到您恢复它。
您无法手动修改跟随者索引的映射或别名。要进行更改,您必须更新领导者索引。由于它们是只读的,因此跟随者索引拒绝所有配置中的写入。
尽管领导者索引上的别名更改会复制到跟随者索引,但写入索引将被忽略。跟随者索引无法接受直接写入,因此如果任何领导者别名的is_write_index
设置为true
,则该值将被强制设置为false
。
例如,您在数据中心 A 中索引一个名为 doc_1
的文档,该文档会复制到数据中心 B。如果客户端连接到数据中心 B 并尝试更新 doc_1
,则请求将失败。要更新 doc_1
,客户端必须连接到数据中心 A 并在领导者索引中更新文档。
当跟随者分片从领导者分片接收操作时,它会将这些操作放入写入缓冲区。跟随者分片使用写入缓冲区中的操作提交批量写入请求。如果写入缓冲区超过其配置的限制,则不会发送其他读取请求。此配置提供了针对读取请求的反压力,允许跟随者分片在写入缓冲区不再满时恢复发送读取请求。
要管理如何从领导者索引复制操作,您可以在创建跟随者索引时配置设置。
领导者索引上索引映射的更改会尽快复制到跟随者索引。索引设置也是如此,但领导者索引本地的一些设置除外。例如,更改领导者索引上的副本数量不会被跟随者索引复制,因此可能无法检索该设置。
如果将跟随者索引需要的非动态设置更改应用于领导者索引,则跟随者索引将关闭自身,应用设置更新,然后重新打开自身。在此周期内,跟随者索引不可用于读取,也无法复制写入。
创建跟随者索引后,必须等到它完全初始化才能使用。 *远程恢复* 过程通过从领导者集群中的主分片复制数据,在跟随者节点上构建分片的新副本。
Elasticsearch 使用此远程恢复过程,使用来自领导者索引的数据来引导跟随者索引。此过程为跟随者提供领导者索引当前状态的副本,即使由于 Lucene 段合并,领导者上没有完整的更改历史记录。
远程恢复是一个网络密集型过程,它将所有 Lucene 段文件从领导者集群传输到跟随者集群。跟随者请求在领导者集群中的主分片上启动恢复会话。然后,跟随者同时从领导者请求文件块。默认情况下,该过程同时请求五个 1MB 文件块。此默认行为旨在支持领导者和跟随者集群之间具有高网络延迟。
您可以修改动态远程恢复设置以限制传输的数据速率并管理远程恢复消耗的资源。
使用包含跟随者索引的集群上的恢复 API来获取有关正在进行的远程恢复的信息。由于 Elasticsearch 使用快照和恢复基础架构来实现远程恢复,因此正在运行的远程恢复在恢复 API 中标记为 type snapshot
。
跨集群复制的工作原理是重放领导者索引的分片上执行的各个写入操作的历史记录。 Elasticsearch 需要在领导者分片上保留这些操作的历史记录,以便它们可以被跟随者分片任务拉取。用于保留这些操作的底层机制是*软删除*。
每当现有文档被删除或更新时,就会发生软删除。通过将这些软删除保留到可配置的限制,可以在领导者分片上保留操作的历史记录,并使其可用于跟随者分片任务,因为它会重放操作的历史记录。
index.soft_deletes.retention_lease.period
设置定义了在分片历史记录保留租约被视为过期之前的最长时间。此设置确定包含跟随者索引的集群可以脱机的时间长度,默认值为 12 小时。如果在保留租约过期后恢复分片副本,但领导者索引上仍然存在丢失的操作,那么 Elasticsearch 将建立新的租约并复制丢失的操作。但是,Elasticsearch 不保证保留未租用的操作,因此也可能领导者已丢弃一些丢失的操作,现在完全不可用。如果发生这种情况,则跟随者无法自动恢复,因此您必须重新创建它。
对于要用作领导者索引的索引,必须启用软删除。 默认情况下,在 Elasticsearch 7.0.0 或更高版本上创建的新索引上启用软删除。
跨集群复制不能用于使用 Elasticsearch 7.0.0 或更早版本创建的现有索引,在这些索引中,软删除已禁用。 您必须将您的数据重新索引到已启用软删除的新索引中。
以下部分提供了有关如何配置和使用跨集群复制的更多信息
跨集群复制旨在仅复制用户生成的索引,并且当前不复制以下任何内容
如果要复制任何这些数据,则必须手动将其复制到远程集群。
可搜索快照索引的数据存储在快照存储库中。 跨集群复制不会完全复制这些索引,即使它们在 Elasticsearch 节点上部分或完全缓存。 要在远程集群中实现可搜索快照,请在远程集群上配置快照存储库,并使用来自本地集群的相同索引生命周期管理策略,将数据移动到远程集群上的冷层或冻结层。