跨集群复制编辑

借助跨集群复制,您可以跨集群复制索引,从而:

  • 在数据中心发生故障时继续处理搜索请求
  • 防止搜索量影响索引吞吐量
  • 通过在地理位置上靠近用户的区域处理搜索请求来减少搜索延迟

跨集群复制使用主动-被动模型。您将数据索引到_领导者_索引,并且数据会被复制到一个或多个只读_追随者_索引。在将追随者索引添加到集群之前,您必须配置包含领导者索引的_远程集群_。

当领导者索引接收到写入时,追随者索引会从远程集群上的领导者索引中拉取更改。您可以手动创建追随者索引,或配置自动跟随模式以自动为新的时间序列索引创建追随者索引。

您可以使用单向或双向设置来配置跨集群复制集群

  • 在单向配置中,一个集群仅包含领导者索引,而另一个集群仅包含追随者索引。
  • 在双向配置中,每个集群都包含领导者索引和追随者索引。

在单向配置中,包含追随者索引的集群必须运行与远程集群相同或更新版本的 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–8.14

5.0–5.5

Yes

Yes

No

No

No

No

No

No

No

5.6

Yes

Yes

Yes

Yes

Yes

No

No

No

No

6.0–6.6

No

Yes

Yes

Yes

Yes

No

No

No

No

6.7

No

Yes

Yes

Yes

Yes

Yes

No

No

No

6.8

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

No

7.0

No

No

No

Yes

Yes

Yes

Yes

Yes

No

7.1–7.16

No

No

No

No

Yes

Yes

Yes

Yes

No

7.17

No

No

No

No

Yes

Yes

Yes

Yes

Yes

8.0–8.14

No

No

No

No

No

No

No

Yes

Yes

多集群架构编辑

使用跨集群复制可以在 Elastic Stack 中构建多种多集群架构

  • 在主集群发生故障时进行灾难恢复,并使用辅助集群作为热备份
  • 数据本地化,以便在靠近应用程序服务器(和用户)的位置维护数据集的多个副本,并减少代价高昂的延迟
  • 集中式报告,用于最大程度地减少查询多个地理分布式 Elasticsearch 集群时的网络流量和延迟,或通过将搜索卸载到辅助集群来防止搜索负载干扰索引

观看跨集群复制网络研讨会,详细了解以下用例。然后,在您的本地机器上设置跨集群复制,并完成网络研讨会中的演示。

在所有这些用例中,您都必须配置安全性,每个集群独立配置。为灾难恢复配置跨集群复制时,不会复制安全配置。要确保备份 Elasticsearch security 功能状态,请定期创建快照。然后,您可以从安全配置中还原本机用户、角色和令牌。

灾难恢复和高可用性编辑

灾难恢复为您的关键任务应用程序提供了承受数据中心或区域中断的容错能力。此用例是跨集群复制最常见的部署。您可以在不同的架构中配置集群,以支持灾难恢复和高可用性

单个灾难恢复数据中心编辑

在此配置中,数据从生产数据中心复制到灾难恢复数据中心。由于追随者索引会复制领导者索引,因此如果生产数据中心不可用,您的应用程序可以使用灾难恢复数据中心。

Production datacenter that replicates data to a disaster recovery datacenter
多个灾难恢复数据中心编辑

您可以将数据从一个数据中心复制到多个数据中心。此配置提供了灾难恢复和高可用性,确保如果主数据中心关闭或不可用,数据将在两个数据中心中复制。

在下图中,数据中心 A 中的数据被复制到数据中心 B 和数据中心 C,这两个数据中心都有数据中心 A 中领导者索引的只读副本。

Production datacenter that replicates data to two other datacenters
链式复制编辑

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

Three datacenters connected to form a replication chain
双向复制编辑

双向复制设置中,所有集群都可以访问所有数据,并且所有集群都有一个索引可以写入,而无需手动实施故障转移。应用程序可以写入每个数据中心内的本地索引,并跨多个索引读取以全局查看所有信息。

当集群或数据中心不可用时,此配置不需要手动干预。在下图中,如果数据中心 A 不可用,您可以继续使用数据中心 B,而无需手动故障转移。当数据中心 A 联机时,集群之间将恢复复制。

Bi-directional configuration where each cluster contains both a leader index and follower indices

此配置对于仅索引的工作负载特别有用,在这种情况下,不会对文档值进行更新。在此配置中,Elasticsearch 索引的文档是不可变的。客户端与 Elasticsearch 集群一起位于每个数据中心中,并且不与不同数据中心中的集群通信。

数据本地化编辑

将数据移近用户或应用程序服务器可以减少延迟和响应时间。这种方法也适用于在 Elasticsearch 中复制数据。例如,您可以将产品目录或参考数据集复制到全球 20 个或更多数据中心,以最大程度地减少数据与应用程序服务器之间的距离。

在下图中,数据从一个数据中心复制到另外三个数据中心,每个数据中心位于自己的区域中。中央数据中心包含领导者索引,其他数据中心包含复制该特定区域中数据的追随者索引。此配置使数据更接近访问它的应用程序。

A centralized datacenter replicated across three other datacenters

集中式报告编辑

当跨大型网络进行查询效率低下时,使用集中式报告集群非常有用。在此配置中,您可以将数据从许多较小的集群复制到集中式报告集群。

例如,一家大型全球银行可能在全球拥有 100 个 Elasticsearch 集群,这些集群分布在不同地区,每个银行分行一个。使用跨集群复制,银行可以将所有 100 家银行的事件复制到中央集群,以便在本地分析和汇总事件以进行报告。银行可以使用跨集群复制来复制特定索引,而不是维护镜像集群。

在下图中,来自不同地区三个数据中心的数据被复制到集中式报告集群。此配置使您可以将数据从区域中心复制到中央集群,您可以在其中本地运行所有报告。

Three clusters in different regions sending data to a centralized reporting cluster for analysis

复制机制编辑

尽管您在索引级别设置跨集群复制,但 Elasticsearch 在分片级别实现复制。创建追随者索引时,该索引中的每个分片都会从领导者索引中相应的分片中拉取更改,这意味着追随者索引与其领导者索引具有相同数量的分片。领导者上的所有操作都由追随者复制,例如创建、更新或删除文档的操作。这些请求可以由领导者分片的任何副本(主副本或副本)提供服务。

当追随者分片发送读取请求时,领导者分片会使用任何新操作进行响应,这些操作受您在配置追随者索引时建立的读取参数的限制。如果没有新的操作可用,领导者分片将等待最多配置的超时时间以获取新的操作。如果超时,领导者分片会响应追随者分片,指出没有新的操作。追随者分片更新分片统计信息,并立即向领导者分片发送另一个读取请求。此通信模型确保远程集群和本地集群之间的网络连接持续使用,避免被外部源(如防火墙)强制终止。

如果读取请求失败,则会检查失败原因。如果失败原因被认为是可恢复的(例如网络故障),则追随者分片将进入重试循环。否则,追随者分片将暂停,直到您恢复它

处理更新编辑

您不能手动修改追随者索引的映射或别名。要进行更改,您必须更新领导者索引。由于它们是只读的,因此追随者索引在所有配置中都拒绝写入。

尽管领导者索引上对别名的更改会被复制到追随者索引,但写入索引会被忽略。追随者索引不能接受直接写入,因此如果任何领导者别名将 is_write_index 设置为 true,则该值将强制为 false

例如,您在数据中心 A 中索引了一个名为 doc_1 的文档,该文档会复制到数据中心 B。如果客户端连接到数据中心 B 并尝试更新 doc_1,则请求会失败。要更新 doc_1,客户端必须连接到数据中心 A 并在主索引中更新文档。

当从属分片从主分片接收操作时,它会将这些操作放入写入缓冲区。从属分片使用写入缓冲区中的操作提交批量写入请求。如果写入缓冲区超过其配置的限制,则不会发送其他读取请求。此配置提供了一种针对读取请求的背压机制,允许从属分片在写入缓冲区不再满时恢复发送读取请求。

要管理如何从主索引复制操作,您可以在 创建从属索引 时配置设置。

主索引中索引映射的更改会尽快复制到从属索引。此行为也适用于索引设置,但某些特定于主索引的设置除外。例如,更改主索引上的副本数不会被从属索引复制,因此该设置可能无法检索。

如果您对从属索引所需的主索引应用非动态设置更改,则从属索引将自行关闭,应用设置更新,然后重新打开自身。在此循环期间,从属索引不可用于读取,并且无法复制写入。

使用远程恢复初始化从属编辑

创建从属索引后,在完全初始化之前,您无法使用它。_远程恢复_过程通过从主集群中的主分片复制数据,在从属节点上构建分片的新副本。

Elasticsearch 使用此远程恢复过程使用主索引中的数据引导从属索引。此过程为从属提供主索引当前状态的副本,即使由于 Lucene 段合并,主索引上没有完整的更改历史记录。

远程恢复是一个网络密集型过程,它将所有 Lucene 段文件从主集群传输到从属集群。从属请求在主集群中的主分片上启动恢复会话。然后,从属从主节点并发请求文件块。默认情况下,该过程并发请求五个 1MB 的文件块。此默认行为旨在支持主集群和从属集群之间具有高网络延迟的情况。

您可以修改动态 远程恢复设置 以限制传输数据的速率并管理远程恢复消耗的资源。

在包含从属索引的集群上使用 恢复 API 获取有关正在进行的远程恢复的信息。因为 Elasticsearch 使用 快照和恢复 基础结构实现远程恢复,所以在恢复 API 中,正在运行的远程恢复被标记为类型 snapshot

复制主节点需要软删除编辑

跨集群复制的工作原理是重放对主索引分片执行的各个写入操作的历史记录。Elasticsearch 需要在主分片上保留 这些操作的历史记录,以便从属分片任务可以提取它们。用于保留这些操作的底层机制是_软删除_。

每当删除或更新现有文档时,都会发生软删除。通过将这些软删除保留到可配置的限制,可以在主分片上保留操作历史记录,并在从属分片任务重放操作历史记录时将其提供给它。

index.soft_deletes.retention_lease.period 设置定义在将分片历史记录保留租约视为过期之前保留它的最长时间。此设置确定包含您的从属索引的集群可以离线多长时间,默认情况下为 12 小时。如果分片副本在其保留租约到期后恢复,但丢失的操作在主索引上仍然可用,则 Elasticsearch 将建立新的租约并复制丢失的操作。但是,Elasticsearch 不保证保留未租赁的操作,因此主节点也可能已丢弃某些丢失的操作,并且现在完全不可用。如果发生这种情况,则从属无法自动恢复,因此您必须 重新创建它

对于要用作主索引的索引,必须启用软删除。默认情况下,在 Elasticsearch 7.0.0 或更高版本上创建的新索引上启用软删除。

跨集群复制不能用于使用 Elasticsearch 7.0.0 或更早版本创建的现有索引,其中禁用了软删除。您必须使用启用了软删除的功能将数据 重新索引 到新索引中。

使用跨集群复制编辑

以下部分提供了有关如何配置和使用跨集群复制的更多信息

跨集群复制限制编辑

跨集群复制旨在仅复制用户生成的索引,并且当前不复制以下任何内容

如果要复制任何此类数据,则必须手动将其复制到远程集群。

可搜索快照 索引的数据存储在快照存储库中。即使这些索引在 Elasticsearch 节点上部分或全部缓存,跨集群复制也不会完全复制它们。要在远程集群中实现可搜索快照,请在远程集群上配置快照存储库,并使用本地集群中的相同索引生命周期管理策略将数据移动到远程集群上的冷层或冻结层。