Neo4j v2.2.3 嵌入式 HA:无法创建集群

Neo4j v2.2.3 Embedded HA: can't create cluster

我有一个嵌入式 Neo4j v2.2.3 三个相同的服务器设置,我正在尝试将单个数据库转换为 HA 设置。我已经尝试使用数据库的每种组合开始 HA 过程:全部为空,除一个外全部为空,并且全部使用相同的数据库,但无济于事。 AFAIK 由于某种原因,Neo4j 实例无法相互连接。我已验证 IP 地址正确,端口 5001 应该是打开的。我也开了6001 for.

这是我的messages.log。

2015-06-25 20:37:16.461+0000 INFO  [o.n.k.i.DiagnosticsManager]: --- INITIALIZED diagnostics START ---
2015-06-25 20:37:16.462+0000 INFO  [o.n.k.i.DiagnosticsManager]: Neo4j Kernel properties:
2015-06-25 20:37:16.467+0000 INFO  [o.n.k.i.DiagnosticsManager]: ha.server_id=1
2015-06-25 20:37:16.467+0000 INFO  [o.n.k.i.DiagnosticsManager]: ha.server=:6001
2015-06-25 20:37:16.467+0000 INFO  [o.n.k.i.DiagnosticsManager]: online_backup_server=0.0.0.0:6362
2015-06-25 20:37:16.467+0000 INFO  [o.n.k.i.DiagnosticsManager]: ephemeral=false
2015-06-25 20:37:16.467+0000 INFO  [o.n.k.i.DiagnosticsManager]: ha.initial_hosts=[IP1]:5001,[IP2]:5001,[IP3]:5001
2015-06-25 20:37:16.467+0000 INFO  [o.n.k.i.DiagnosticsManager]: online_backup_enabled=true
2015-06-25 20:37:16.468+0000 INFO  [o.n.k.i.DiagnosticsManager]: ha.cluster_server=:5001
2015-06-25 20:37:16.468+0000 INFO  [o.n.k.i.DiagnosticsManager]: store_dir=/var/neo4j
2015-06-25 20:37:16.468+0000 INFO  [o.n.k.i.DiagnosticsManager]: org.neo4j.server.webserver.address=0.0.0.0
2015-06-25 20:37:16.468+0000 INFO  [o.n.k.i.DiagnosticsManager]: org.neo4j.server.database.mode=HA
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: Diagnostics providers:
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: org.neo4j.kernel.configuration.Config
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: org.neo4j.kernel.info.DiagnosticsManager
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: SYSTEM_MEMORY
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: JAVA_MEMORY
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: OPERATING_SYSTEM
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: JAVA_VIRTUAL_MACHINE
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: CLASSPATH
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: LIBRARY_PATH
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: SYSTEM_PROPERTIES
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: LINUX_SCHEDULERS
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: NETWORK
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: NodeCache
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: RelationshipCache
2015-06-25 20:37:16.469+0000 INFO  [o.n.k.i.DiagnosticsManager]: HighAvailabilityDiagnostics

.....

2015-06-25 21:55:36.502+0000 INFO  [o.n.k.i.DiagnosticsManager]: High Availability diagnostics
Member state:PENDING
State machines:
   AtomicBroadcastMessage:start
   AcceptorMessage:start
   ProposerMessage:start
   LearnerMessage:start
   HeartbeatMessage:start
   ElectionMessage:start
   SnapshotMessage:start
   ClusterMessage:start
Current timeouts:

最终在两分钟后我得到了一个交易异常:

Caused by: org.neo4j.graphdb.TransactionFailureException: Timeout waiting for database to become available and allow new transactions. Waited 2m. 2 reasons for blocking: Database is stopped, Cluster state is 'PENDING'.

我创建了一个graphDatabaseFactory = new HighlyAvailableGraphDatabaseFactory()用来创建

DatabaseServiceImpl(
    graphDatabaseFactory
      .newEmbeddedDatabaseBuilder(neo4jStoreDir)
      .loadPropertiesFromFile(configFileLocation)
      .newGraphDatabase())

这是我的 neo4j.properties 的样子:

online_backup_enabled=true
online_backup_server=0.0.0.0:6362
org.neo4j.server.webserver.address=0.0.0.0
org.neo4j.server.database.mode=HA
ha.server_id=1
ha.cluster_server=0.0.0.0:5001
ha.server=0.0.0.0:6001
ha.initial_hosts=[IP1]:5001,[IP2]:5001,[IP3]:5001

我尝试了很多不同的属性组合,还添加了来自 neo4-server.properties 的 suggested 值,但没有任何帮助。我应该把 neo4j-server.properties 放在嵌入模式的什么位置,或者不需要它们(这是我最初的猜测)?

可能出了什么问题?甚至可以使用嵌入式 Neo4j 设置 HA 集群吗?

编辑。我确保每个服务器都在同一个子网上,并且服务器可以无障碍地相互连接。

Neo4j 绝对支持嵌入式模式的集群——您甚至可以在同一个集群中混合使用服务器和嵌入式实例。

当 运行 处于嵌入模式时,您根本不需要 neo4j-server.properties 中的设置。

一些要检查的东西:

  1. 确保 3 个集群成员在同一个子网上。如果他们不是并且他们在物理上错位,请考虑建立一个 VPN(例如通过 openvpn)让他们在同一个子网上。
  2. 允许集群成员之间的任何 IP 流量,他们将打开额外的端口。

所以问题原来是我正在使用 new HighlyAvailableGraphDatabaseFactory().addKernelExtensions(myKernelExtensionsArray) 设置的内核扩展。 addKernelExtensions 方法已弃用,但这些扩展适用于单个服务器设置。但是,由于某种原因,在此 HA 服务器设置中它们失败了。

通过将对 addKernelExtensions 的调用替换为 registerTransacionEventHandler,我能够重用我的内核扩展。