我在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中引入的新协调机制有关?
答案 0 :(得分:4)
此行为(仅复制到另一个实例)与1.8中的默认值相同。这由以下人员控制:
ha.tx_push_factor=1
这是默认值。
Slaves以两种方式从master获取更新:
ha.tx_push_factor=2
(在每个实例上,因为正在使用的那个是当前主设备上的那个)。
ha.pull_interval=1s
使用Java API手动提取更新
通过从奴隶发出写入交易
请参阅http://docs.neo4j.org/chunked/milestone/ha-configuration.html
答案 1 :(得分:1)
首先猜测是设置
ha.discovery.enabled = false
如果需要完整分析,请提供所有三个集群成员的data/graph.db/messages.log
。
附注:根据您的要求,应该可以使用1.8。您也可以直接从tomcat生成zookeeper,只是模仿bin/neo4j-coordinator
的作用:在启动Web应用程序时在一个单独的线程中运行类org.apache.zookeeper.server.quorum.QuorumPeerMain
。