1

ドメイン固有の REST サービス (読み取り、更新) を公開する Spring MVC アプリケーションで Neo4j 1.9.M01 を使用しています。Web アプリケーションは同じ Web コンテナー (Tomcat 6) に 3 回デプロイされ、各「ノード」には同じクラスターの独自の組み込み Neo4j HA インスタンス部分があります。

3 つの 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

問題:ノードの 1 つで更新を実行すると、変更が他の 1 つのノードにのみレプリケートされ、3 番目のノードは古い状態のままになり、クラスターの一貫性が損なわれます。

マイルストーンを使用しているのは、Web コンテナーの外部で何かを実行することが許可されていないため、1.9 より前のバージョンの古い ZooKeeper ベースの調整に頼ることができないためです。ここでいくつかの設定が抜けているのでしょうか、それとも 1.9 で導入された新しい調整メカニズムの問題でしょうか?

4

2 に答える 2

4

この動作 (他の 1 つのインスタンスへの複製のみ) は、1.8 と同じデフォルトです。これは次によって制御されます。

ha.tx_push_factor=1

これがデフォルトです。

スレーブは、いくつかの方法でマスターから更新を取得します。

  • より高いプッシュ ファクターを構成することにより、たとえば、次のようになります。
   ha.tx_push_factor=2

(使用中のインスタンスは現在のマスター上のインスタンスであるため、むしろすべてのインスタンスで)。

  • スレーブがマスターから更新を取得するためのプル間隔を構成します。たとえば、次のようにします。
   ha.pull_interval=1s
  • Java API を使用して手動で更新をプルする

  • スレーブから書き込みトランザクションを発行することにより

詳しくはhttp://docs.neo4j.org/chunked/milestone/ha-configuration.htmlを参照してください。

于 2012-11-22T09:32:17.497 に答える
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完全な分析のために、3 つのクラスター メンバーすべてから情報を提供してください。

補足: 要件に対しても 1.8 を使用できるはずです。また、Tomcat から直接 ZooKeeper を生成することもできます。これは、Web アプリケーションの起動時に別のスレッドでbin/neo4j-coordinatorクラスを実行することを模倣するだけです。org.apache.zookeeper.server.quorum.QuorumPeerMain

于 2012-11-21T20:30:28.840 に答える