上游策略行为变更
从版本 3.4 开始,我们更改了实例与 Leader 同步的行为。根据您的配置,此更改可能会在使用策略插件时影响集群的行为。
在 3.4 之前(在多数据中心架构的背景下),策略插件是定义读取副本 (Read Replicas) 如何联系集群中的服务器以同步事务日志的一组规则。3.4 之后,此功能也扩展到了核心实例 (Core instances),这意味着您可以主动选择核心实例从中拉取更新的所需策略。
如果您有用户定义的策略,限制了读取副本 (Read Replicas) 从哪些实例拉取更新,这一点尤为重要。
设想以下场景

假设您希望阻止南部数据中心 (South DC) 的读取副本 (Read Replica) 从北部数据中心 (North DC) 拉取更新。您可以设置 causal_clustering.upstream_selection_strategy=user-defined
并配置以下策略:
causal_clustering.user_defined_upstream_strategy=groups(south); halt()
请注意,上面定义的上游策略仅在您为实例定义了服务器组 (server groups) 时才有效。图中,南部数据中心的所有实例都属于服务器组 |
这将有效阻止读取副本连接到北部数据中心。然而,我们在一些实现中发现,为了方便或保持一致性,客户会把 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
策略。
此页面有帮助吗?