1

我在 Spring MVC 应用程序中使用 Neo4j 1.9.M01,该应用程序公开了一些特定于域的 REST 服务(读取、更新)。Web 应用程序在同一个 Web 容器(Tomcat 6)中部署了三次,每个“节点”都有自己的嵌入式 Neo4j HA 实例部分,属于同一个集群。

三个 Neo4j 配置:

#node 1
ha.server_id=1
ha.server=localhost:6361
ha.cluster_server=localhost:5001
ha.initial_hosts=localhost:5001,localhost:5002,localhost:5003

#node 2
ha.server_id=2
ha.server=localhost:6362
ha.cluster_server=localhost:5002
ha.initial_hosts=localhost:5001,localhost:5002,localhost:5003

#node 3
ha.server_id=3
ha.server=localhost:6363
ha.cluster_server=localhost:5003
ha.initial_hosts=localhost:5001,localhost:5002,localhost:5003

问题:在其中一个节点上执行更新时,更改仅复制到另一个节点,第三个节点保持旧状态,破坏了集群的一致性。

我正在使用里程碑,因为它不允许在 web 容器之外运行任何东西,所以我不能依赖 1.9 之前版本中基于旧 ZooKeeper 的协调。我是否在这里遗漏了一些配置,或者这可能是 1.9 中引入的新协调机制的问题?

4

2 回答 2

4

此行为(仅复制到一个其他实例)与 1.8 中的默认值相同。这是由以下控制的:

ha.tx_push_factor=1

这是默认设置。

从站通过几种方式从主站获取更新:

  • 通过配置更高的推送因子,例如:
   ha.tx_push_factor=2

(而是在每个实例上,因为正在使用的实例是当前主实例上的实例)。

  • 通过配置从属服务器的拉取间隔以从其主服务器获取更新,例如:
   ha.pull_interval=1s
  • 通过使用 Java API 手动拉取更新

  • 通过从从站发出写事务

请参阅http://docs.neo4j.org/chunked/milestone/ha-configuration.html

于 2012-11-22T09:32:17.497 回答
1

第一个猜测是设置

ha.discovery.enabled = false

有关说明,请参见http://docs.neo4j.org/chunked/milestone/ha-configuration.html#_different_methods_for_participating_in_a_cluster

请您提供data/graph.db/messages.log所有三个集群成员的完整分析。

旁注:也应该可以使用 1.8 来满足您的要求。您也可以直接从 tomcat 生成 zookeeper,只需模仿它的作用:在 Web 应用程序启动时在单独的线程中bin/neo4j-coordinator运行类。org.apache.zookeeper.server.quorum.QuorumPeerMain

于 2012-11-21T20:30:28.840 回答