2017-07-17 75 views

回答

1

如果您沒有使用EACH_QUORUM,並且接受寫入的目標節點關閉,則協調器節點正在將寫入保存爲「已提示的切換」

當目的節點再次可用,協調重播暗示的目的地切換。

對於任何暗示切換丟失的場合,您必須對集羣進行修復。

而且你要知道,存儲的提示是允許通過默認最長不超過3小時。

如需進一步信息請參閱文檔:

http://www.datastax.com/dev/blog/modern-hinted-handoff http://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRepairNodesHintedHandoff.html

希望這有助於。

+0

THX,所以這也是用於跨DC複製? – silverwen

+0

是的,當你使用多個數據中心,唯一的區別是,你有更多的一致性級別可供選擇。例如,當執行讀寫時,LOCAL_QUORUM將嘗試在本地達成一致。 [卡桑德拉一致性水平](http://docs.datastax.com/en/cassandra/latest/cassandra/dml/dmlConfigConsistency.html) – Oresztesz

0

當你發出的卡桑德拉寫,協調並將寫入到所有在線副本,然後塊。塊的持續時間對應於一致性級別 - 如果您說「全部」,它會阻塞,直到所有節點都確認寫入。如果使用「EACH_QUORUM」,則會阻塞,直到每個數據中心的法定節點數達到寫入的數量。

對於沒有確認寫入的任何副本,協調員將編寫一個提示,並在稍後嘗試提供該提示(分鐘,小時,無法保證)。

但是,請注意,所有寫入都是在同一時間發送的 - 您沒有的是保證所發送的是哪一個。您的保證符合一致性水平。

當你閱讀時,你會做類似的事情 - 你會阻止,直到你有一個適當數量的副本應答。如果您使用EACH_QUORUM編寫代碼,則可以使用LOCAL_QUORUM進行讀取並保證一致性。如果你用QUORUM編寫,你可以用QUORUM讀取。如果您使用ONE編寫,如果您使用ALL閱讀,仍然可以保證強大的一致性。爲了保證最終的一致性,你不需要做任何事情 - 只要你用CL> = ONE(CL ANY並不是真正的保證)來寫就可以最終達到目標。

+0

Thx,我明白這一部分。我感到困惑的是C *如何處理跨DC複製。由於它是異步的,它是最好的努力還是有其他機制來保證數據最終被複制? – silverwen

+0

沒有其他機制。在編寫,讀取修復,主動修復和提示時發送突變。除此之外,沒有其他複製機制(DC內或DC間)。 –