2013-05-27 48 views
0

我有一個非常簡單的Neo4j HA設置,帶有一個主實例和一個嵌入式HA實例,我想用它來批量加載數據。這裏的主實例配置(一個我推出「正常」,作爲Windows服務):Neo4j HA(2.0-快照),超時等待羣集選舉主人

node_auto_indexing=true 
node_keys_indexable=key,entity,annotation 
relationship_auto_indexing=true 
relationship_keys_indexable=key, weight, label 
keep_logical_logs=true 
online_backup_enabled=true 

ha.server_id=1 
ha.initial_hosts=:5001 
ha.server=0.0.0.0:6001 
ha.cluster_server=:5001 
ha.pull_interval=10 
ha.tx_push_factor=0 
ha.tx_push_strategy=fixed 

cypher_parser_version=2.0 
remote_shell_enabled=true 
remote_shell_port=1377 

org.neo4j.server.database.mode=HA 

我希望能夠啓動和停止對需求的嵌入式之一。因此,這裏是我在Java應用程序中加載配置:

node_auto_indexing=true 
node_keys_indexable=key,annotation 
relationship_auto_indexing=true 
relationship_keys_indexable=key, weight, label 
keep_logical_logs=true 

org.neo4j.server.database.mode=HA 
ha.server_id=2 
ha.slave_only=true 

ha.initial_hosts=:5001 
ha.server=:6002 
ha.cluster_server=:5002 

ha.pull_interval=10 
cypher_parser_version=2.0 

的想法是能夠推出第一(窗口服務)的實例作爲單一/獨立的節點並在需要時啓動批量加載器。

問題

我能成功地推出Windows服務和消防查詢如常。當我開始我的應用程序時,它連接得很好並且扮演一個從節點的角色。我可以加載我的數據沒有問題,主節點似乎是同步的,工作正常。現在,如果Java應用程序崩潰以任何理由或飾面和關閉,主實例停止工作,對任何的Cypher查詢將返回以下跟蹤:

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(Unknown Source) 
org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112) 

難道我做錯什麼事在我的配置?

Btw .:如果我重新啓動第二個實例,則主實例返回到「normal」。

回答

3

這是預期的行爲。就集羣而言,集羣中有兩個實例,如果有一個實例沒有達到法定人數,那麼出於安全原因它就變得不可用。在你的設置中,解決這個問題的方法是在主實例上啓動一個獨立的仲裁器,以便總共有3個可用實例中的2個,因此該羣集被視爲處於啓動狀態。

+0

感謝您的信息。因此,任何HA設置的最小值都是兩個節點,它們必須始終保持一致。 – Michael

+0

@ rickard-berg您能否提供一些指導,如何啓動仲裁實例?我也瀏覽了官方文檔,但無法在上面回答。 – agpt