我在这里得到了一个 neo4j HA 设置,其中两个实例在两台不同的机器上 + 一个嵌入在另一台机器上运行。
Neo4j 版本为 2.0.0-M03。
这是我的 neo4j.properties:
一审:192.168.1.187
keep_logical_logs=50M size
online_backup_enabled=true
ha.server_id=1
ha.server=192.168.1.187:6001
online_backup_server=192.168.1.187:6051
ha.cluster_server=192.168.1.187:5001
ha.initial_hosts=192.168.1.187:5001,192.168.1.222:5002
ha.pull_interval=2s
二审:192.168.1.222
keep_logical_logs=50M size
online_backup_enabled=true
ha.server_id=2
ha.server=192.168.1.222:6002
online_backup_server=192.168.1.222:6052
ha.cluster_server=192.168.1.222:5002
ha.initial_hosts=192.168.1.187:5001,192.168.1.222:5002
ha.pull_interval=2s
在嵌入式(192.168.1.130)中,我使用这些属性
org.neo4j.server.database.mode=HA
ha.server_id=3
ha.initial_hosts=192.168.1.187:5001,192.168.1.222:5002
ha.server=192.168.1.130:6003
ha.cluster_server=192.168.1.130:5003
ha.pull_interval=2s
现在,我./neo4j start
在192.168.1.187和192.168.1.222做一个,一切正常。集群起来了。
从那里开始,当我启动我的 java 项目时,嵌入式 neo4j 进入集群。当我停止它时,它会出来。没问题。如果我从嵌入式数据库中更改任何内容,这些更改将反映在每个成员上。如果我打开192.168.1.222的 webadmin 并从那里更改某些内容,它也会反映在我的嵌入式数据库中。
但是,如果我在192.168.1.187的网络管理员上做任何事情,它会给我一个超时错误。
TransactionFailureException
Timeout waiting for cluster to elect master
StackTrace:
org.neo4j.kernel.ha.HighlyAvailableGraphDatabase.beginTx(HighlyAvailableGraphDatabase.java:207)
org.neo4j.kernel.TransactionBuilderImpl.begin(TransactionBuilderImpl.java:39)
org.neo4j.kernel.InternalAbstractGraphDatabase.beginTx(InternalAbstractGraphDatabase.java:882)
org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:102)
org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:70)
org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:85)
org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:80)
org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:95)
java.lang.reflect.Method.invoke(Method.java:601)
org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)
192.168.1.222的网络管理员仍然非常好,嵌入式数据库也是如此。我仍然可以对其中一个进行更改并看到它反映在另一个中,但我无法从192.168.1.187做任何事情。
这应该发生吗?我错过了什么吗?):
更新:
我发现地址有一些问题。“postgresdb”将映射到192.168.1.222 AT 222但映射到192.168.1.22 AT 187。而且我没有在任何地方使用主机名,但不知何故它与主机名一起使用,这导致187尝试连接到192.168.1.22时出现问题。
为了纠正这个问题,我添加了
192.168.1.187 neodb1
192.168.1.222 neodb2
to 192.168.1.187/etc/hosts
and 192.168.1.222/etc/hosts
and 将所有属性更改为指向neodb1和neodb2而不是192.168.1.187和192.168.1.222。
但是,恐怕这并没有解决最初的问题。
“messages.log”很大,所以我把它们放在 pastebin 上(和 hastebin,因为当我粘贴第三个时,pastebin 抱怨负载很重),但它们是:
http://pastebin.com/ti4iYZ1V - 187
我可能还应该提到192.168.1.130只是一台测试机器,真正的嵌入式数据库(现在正在使用)也在192.168.1.187上运行。虽然我认为这不会有什么不同。