1つのノードを停止したときにデータが失われている理由を理解しようとします。私はhazelcast 3.6アプリケーションを実行している2つのノードを持つ開発クラスタを持っています。 HZアプリは271のパーティションを持つように設定されており、リモートクライアント経由でクラスターに271個のユニークキーを書き込みます。私は、データが2つのノード間で適切に分配され、格納され、他のノードにバックアップされていることを確認しました。hazelcast 3.6ノードが正常にシャットダウンする
しばらくしてからクラスタへの書き込みを停止します。読み込みのみを行った後、このクラスタからノードの1つをシャットダウンします。その前に私はインスタンスのシャットダウンメソッドを呼び出し、私はクラスタが安全であるかどうかを確認します。
Hazelcast.shutdownAll();
for (int i = 0; i < 12; i++) {
log.info("Verifying whether it is safe to close this instance");
boolean isSafe = getResultsForAllInstances(hzi -> hzi
.getPartitionService()
.forceLocalMemberToBeSafe(10, TimeUnit.SECONDS));
if (isSafe) {
log.info("Verifying whether cluster is safe.");
isSafe = getResultsForAllInstances(hzi -> hzi
.getPartitionService()
.isClusterSafe());
if (isSafe) {
break;
}
}
Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
}
private boolean getResultsForAllInstances(Function<HazelcastInstance, Boolean> hazelcastInstanceBooleanFunction) {
return getAllHazelcastInstances().stream()
.map(hazelcastInstanceBooleanFunction)
.reduce(true, (old, next) -> old && next);
}
残念ながら他のノードがログアウトしているパーティションが失われ、データが失われます。
here私はグーグルグループで質問した質問ですが、誰もこれに答えなかったので、これは3.6の一般的な問題ですか、何か愚かなことをしています。
ノードが瞬時に終了したシナリオではbugのレポートが見つかりましたが、私の場合はshutdown node gracefullyに接続しようとしましたが、別のノードに通信する時間があります。だから私はここに何が欠けている:]
ありがとう!
"データが2つのノード間で適切に配布され、格納され、他のノードにバックアップされていることを確認しました。"私のデータは他のノードにバックアップされています。 – kamiseq
SPIに基づいて私自身のサービスを使用していると付け加えておきます。 – kamiseq
とにかく、クラスタ内のノード間でデータが複製されていることがわかります – kamiseq