上游策略行为变更
从 3.4 版本开始,我们改变了实例与 Leader 同步的方式。 此更改可能会影响您的集群在使用 策略插件 时的行为,具体取决于您的配置。
在 3.4 版本之前,在多数据中心架构的上下文中,策略插件是一组规则,用于定义读取副本如何联系集群中的服务器以同步事务日志。 在 3.4 版本之后,这扩展到了核心实例,这意味着您可以主动选择希望核心实例从中拉取更新的策略。
如果您有一个 用户定义的策略,该策略限制了读取副本从中拉取更新的实例,则这一点尤为重要。
想象以下场景

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