知识库

上游策略行为变更

从版本 3.4 开始,我们更改了实例与 Leader 同步的行为。根据您的配置,此更改可能会在使用策略插件时影响集群的行为。

在 3.4 之前(在多数据中心架构的背景下),策略插件是定义读取副本 (Read Replicas) 如何联系集群中的服务器以同步事务日志的一组规则。3.4 之后,此功能也扩展到了核心实例 (Core instances),这意味着您可以主动选择核心实例从中拉取更新的所需策略。

如果您有用户定义的策略,限制了读取副本 (Read Replicas) 从哪些实例拉取更新,这一点尤为重要。

设想以下场景

North & South DCs
图 1:北部与南部数据中心

假设您希望阻止南部数据中心 (South DC) 的读取副本 (Read Replica) 从北部数据中心 (North DC) 拉取更新。您可以设置 causal_clustering.upstream_selection_strategy=user-defined 并配置以下策略:

causal_clustering.user_defined_upstream_strategy=groups(south); halt()

请注意,上面定义的上游策略仅在您为实例定义了服务器组 (server groups) 时才有效。图中,南部数据中心的所有实例都属于服务器组 south,而北部数据中心的实例属于服务器组 north。您可以在此处阅读更多关于服务器组的信息。

这将有效阻止读取副本连接到北部数据中心。然而,我们在一些实现中发现,为了方便或保持一致性,客户会把 causal_clustering.upstream_selection_strategy 设置为所有实例都相同,因为他们知道该设置仅适用于读取副本。在 3.5 之后,如果您这样做,则上述示例中南部数据中心的核心实例将无法从北部数据中心的 Leader 拉取更新。

因此,建议您为核心实例配置一个限制较少的上游策略。您可以使用开箱即用的策略:

  • connect-to-random-core-server - 连接到任何核心服务器,从当前可用的核心服务器中随机选择。

  • typically-connect-to-random-read-replica - 连接到任何可用的读取副本,但在大约 10% 的时间里连接到任何随机的核心服务器。

  • connect-randomly-to-server-group - 随机连接到逗号分隔列表 causal_clustering.connect-randomly-to-server-group 中指定的任何服务器组中的任何可用读取副本。

  • leader-only - 仅连接到核心服务器当前的 Raft Leader。

将核心实例的上游策略设置为 leader-only 将使 Neo4j 的行为类似于 3.4 之前的版本,但您可以选择其他策略。重要的是要确保您选择的策略允许核心实例无论 Leader 位于何处都能从中拉取更新。

此外,您可以通过逗号 (",") 分隔来选择多个上游策略。以下配置是完全可接受的:

causal_clustering.upstream_selection_strategy=user-defined, leader-only

这将首先尝试 user-defined 策略,然后尝试 leader-only 策略。

© . All rights reserved.