如何使用Neo4j Ha集群配置Spring?

时间:2013-08-09 06:36:21

标签: java spring neo4j high-availability spring-data-neo4j

我已经在3台不同的机器上集成了3个Neo4j企业版(v1.8.2)实例,并且它们现在运行良好(通过Ha前端URL访问时)。
我想知道如何配置我的Spring配置(applicationContext.xml)以使用 Ha前端URL ,该目标是后端的3个neo4j服务器实例。
我经历了这个link。其中描述了以下几行:

<bean id="haDatabase" class="org.neo4j.kernel.HighlyAvailableGraphDatabase" destroy-method="shutdown">
<constructor-arg index="0" value="target/config-test"/>
<constructor-arg index="1">
<map>
<entry key="ha.server_id" value="1"/>
<entry key="ha.server" value="192.168.1.10:6001"/>
<entry key="ha.coordinators" value="192.168.1.10:2181,192.168.1.9:2182,192.168.1.8:2183"/>
</map>
</constructor-arg>
</bean>
<neo4j:config graphDatabaseService="haDatabase"/>

我没有得到,我应该如何以及为什么要在这里重新配置 server_id 协调员,这是我已经为所有neo4j服务器配置完成的。

更新#1

应用上述配置后,保持所有三个实例都使用Ha代理运行。我在Eclipse中获得了以下日志,并在调试我的应用程序时被挂在那里......

14:29:13.220 [pool-2-thread-1] DEBUG neo4j - Read HA server:192.168.1.10:6001 (for machineID 1) from zoo keeper
14:29:13.227 [pool-2-thread-1] DEBUG neo4j - Read HA server:192.168.1.8:6003 (for machineID 3) from zoo keeper 14:29:13.232 [pool-2-thread-1] DEBUG neo4j - Read HA server:192.168.1.9:6002 (for machineID 2) from zoo keeper 14:29:13.239 [pool-2-thread-1] DEBUG neo4j - Writing at flush-requested: -6 14:29:13.268 [pool-2-thread-1] DEBUG neo4j - getMaster 3 based on [MachineInfo[ID:1, sequence:29, last tx:97, server:(192.168.1.10, 6001), master for last tx:3], MachineInfo[ID:2, sequence:30, last tx:97, server:(192.168.1.9, 6002), master for last tx:3], MachineInfo[ID:3, sequence:31, last tx:97, server:(192.168.1.8, 6003), master for last tx:3]] 14:29:13.333 [pool-13-thread-1] DEBUG neo4j - org.neo4j.kernel.ha.zookeeper.ZooClient$WatcherImpl@169a0c5, Fri Aug 09 14:29:13 IST 2013 Got event: WatchedEvent state:SyncConnected type:None path:null (path=null)

更新#2
提出的另一个问题是,我在弹簧配置中的任何地方都没有使用直接的Haproxy前端URL。那么Haproxy在我的春季应用中扮演的角色是什么?我和我的一个朋友讨论过这个,根据他的建议,应该有一些方法来使用Ha代理网址。

更新#3
<bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase">
<constructor-arg index="0" value="http://192.168.1.46:81/db/data" />
</bean>

我也试过上面这个案例,但我觉得它的表现并没有达到标准( http://192.168.1.46:81 是我的haproxy前端网址,针对3个neo4j服务器实例) 。

任何线索,我被困在哪里?请帮忙

1 个答案:

答案 0 :(得分:3)

问题解决了,只需在applicationContext.xml弹簧配置中实现以下更改:
<bean id="graphDatabaseService" class="org.neo4j.kernel.HighlyAvailableGraphDatabase" destroy-method="shutdown">
<constructor-arg index="0" value="/opt/build/mydb/graph.db"/>
<constructor-arg index="1">
<map>
<entry key="ha.server_id" value="1"/>
<entry key="ha.server" value="192.168.1.10:6001"/>
<entry key="ha.coordinators" value="192.168.1.10:2181,192.168.1.9:2182,192.168.1.8:2183"/>
</map>
</constructor-arg>
</bean>
<neo4j:config graphDatabaseService="graphDatabaseService"/>

根据我的理解,我们需要至少提及graph.db的主要位置,然后是ha配置和协调员详细信息。
想要感谢迈克尔(link 1link 2)。感谢谢谢:)