知识库

上游策略行为变更

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

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

如果您使用了限制读取副本拉取更新来源的 用户自定义策略,这一点尤为重要。

想象以下情景

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

假设您想阻止南部数据中心的读取副本从北部数据中心拉取更新。您可以设置 causal_clustering.upstream_selection_strategy=user-defined 并配置以下策略

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

请注意,上述上游策略仅在您对实例定义服务器组时有效。在图中,南部数据中心的所有实例属于服务器组 south,而北部数据中心的实例属于服务器组 north。您可以在 此处了解更多关于服务器组的信息。

这将有效阻止读取副本连接到北部数据中心。然而,在多个实现中我们发现——出于简化或一致性的考虑——客户会在 ALL 实例上设置 causal_clustering.upstream_selection_strategy 为相同的值,明知该设置仅对读取副本生效。3.5 之后,如果如此操作,上述示例中南部数据中心的 Core 实例将无法从北部数据中心的 Leader 拉取更新。

因此,建议对 Core 实例配置更宽松的上游策略。您可以使用开箱即用的策略

  • connect-to-random-core-server - 从当前可用的任意 Core 服务器中随机选择进行连接。

  • typically-connect-to-random-read-replica - 连接到任意可用的读取副本,但约 10% 的时间会连接到任意随机的 Core 服务器。

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

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

将 Core 实例的上游策略设置为 leader-only 将使 Neo4j 行为类似于 3.4 之前的版本,但您也可以选择其他策略。关键是确保所选策略能够让 Core 实例无论 Leader 位于何处都能拉取更新。

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

causal_clustering.upstream_selection_strategy=user-defined, leader-only

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

© . This site is unofficial and not affiliated with Neo4j, Inc.