知识库

上游策略行为变更

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

在 3.4 版本之前,在多数据中心架构的上下文中,策略插件是一组规则,用于定义读取副本如何联系集群中的服务器以同步事务日志。 在 3.4 版本之后,这扩展到了核心实例,这意味着您可以主动选择希望核心实例从中拉取更新的策略。

如果您有一个 用户定义的策略,该策略限制了读取副本从中拉取更新的实例,则这一点尤为重要。

想象以下场景

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

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

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

请注意,上面定义的上游策略仅在您在实例上定义服务器组时有效。 在图中,南区数据中心的所有实例都属于服务器组 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 拉取更新,无论 Leader 位于何处。

此外,您可以通过逗号 (",") 分隔多个上游策略。 将以下配置设置为完全可以接受的

causal_clustering.upstream_selection_strategy=user-defined, leader-only

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