我試圖找出爲什麼當我放下一個節點時丟失了數據。我有2個運行hazelcast 3.6應用程序的節點的開發集羣。 HZ應用程序被配置爲擁有271個分區,並且我通過遠程客戶端編寫了271個唯一的密鑰來集羣。我驗證了數據在兩個節點之間正確分佈並存儲並備份到其他節點上。hazelcast 3.6正確關閉節點
一段時間,我停止寫入集羣,我只從它讀之後,然後我關閉從這個集羣中的節點之一。在此之前我調用實例的關閉方法,然後檢查集羣是否安全。
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,它有時間回傳給其他節點。那麼,要我在這裏失蹤:]
的感謝!
「我確認數據在兩個節點之間正確分佈並存儲並備份到其他節點上。」所以我的數據在其他節點上備份。 – kamiseq
我可能應該補充一點,我正在使用基於SPI的自己的服務。 – kamiseq
無論如何,我可以看到數據正在集羣中的節點之間複製 – kamiseq