1.9.M01上的Neo4j HA复制问题

时间:2012-11-21 13:21:53

标签: neo4j

我在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中引入的新协调机制有关?

2 个答案:

答案 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

请参阅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,只是模仿bin/neo4j-coordinator的作用:在启动Web应用程序时在一个单独的线程中运行类org.apache.zookeeper.server.quorum.QuorumPeerMain