2016-11-18 5 views
0

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に接続しようとしましたが、別のノードに通信する時間があります。だから私はここに何が欠けている:]

ありがとう!

答えて

0

データの複製レベルは?ノードが失われているにも関わらずデータを稼働させたい場合は、バックアップが必要です。 例。

<hazelcast> 
    <map name="default"> 
    <backup-count>1</backup-count> 
    </map> 
</hazelcast> 

デフォルトのバックアップは1です。つまり、すべてのエンティティは1回だけ格納されるため、1つのノードにのみ存在します。したがって、前述のノードが失敗した場合、すべてのデータが失われます。これは役に立ちます:

+0

"データが2つのノード間で適切に配布され、格納され、他のノードにバックアップされていることを確認しました。"私のデータは他のノードにバックアップされています。 – kamiseq

+0

SPIに基づいて私自身のサービスを使用していると付け加えておきます。 – kamiseq

+0

とにかく、クラスタ内のノード間でデータが複製されていることがわかります – kamiseq

0

データが失われていないようですが、ノードの1つをシャットダウンした直後にクライアント側で多くの接続喪失エラーが発生しました。このような例外を処理したビジネスロジックは間違っていました。 シャットダウンはクライアントに何も返信しないので、これは公正です。

他の誤ったリードは、他のノードで取得したパーティションが失われたイベントでした。私はまだこの仕組みを理解していないし、HZの文書にはもっと説明があることを望む。

@Reveka感謝しています! :]

関連する問題