一致性級別如何配置?
可以將Apache Cassandra™(DDAC)的DataStax Distribution中的一致性級別配置為管理可用性與數據准確性。為會話或每個單獨的讀取或寫入操作配置一致性。
在中cqlsh
,使用CONSISTENCY設置當前cqlsh
會話中所有查詢的一致性級別。對於客戶端應用程序編程,請使用適當的驅動程序設置一致性級別。例如,使用Java驅動程序,調用QueryBuilder.insertInto
with setConsistencyLevel
來設置每個插入的一致性級別。
ONE
所有寫和讀操作的一致性級別默認為。
在此頁:
- 寫一致性級別
- 讀取一致性級別
- 如何計算QUORUM
下表描述了寫入一致性級別。
水平 | 描述 | 用法 |
---|---|---|
ALL |
必須將寫入操作寫入提交日志,並 在該分區的集群中的所有副本節點上對其進行存儲。 | 提供任何其他級別的最高一致性和最低可用性。 |
EACH_QUORUM |
必須將寫入寫入提交日志,並且必須將其寫入每個 數據中心中一定數量的副本節點上。 | 在多個數據中心群集中使用,可以嚴格保持每個數據中心處於同一級別的一致性。例如,如果您希望在數據中心關閉且該數據中心無法訪問時寫入失敗,請選擇此級別QUORUM 。一致性強。 |
QUORUM |
必須將寫入寫入提交日志,並且必須將其寫入所有數據中心的副本節點的法定人數。 | 在單個或多個數據中心集群中使用,以保持整個集群的強一致性。如果您可以容忍某種程度的故障,請使用。 |
LOCAL_QUORUM |
必須將寫入操作寫入提交日志,並且必須在與協調程序位於同一數據中心的副本節點的法定數量上進行寫入。避免數據中心間通信的延遲。 | 通過機架感知的副本放置策略(例如NetworkTopologyStrategy)和正確配置的告密功能,用於維護多數據中心集群中單個數據中心內的一致性。一致性強。 |
ONE |
必須將寫入寫入 至少一個副本節點的提交日志和內存表中。 | 由於一致性要求不嚴格,因此可以滿足大多數用戶的需求。 |
TWO |
必須將寫入寫入 至少兩個副本節點的提交日志和內存表。 | 類似於ONE 。 |
THREE |
必須將寫入寫入 至少三個副本節點的提交日志和內存表中。 | 類似於TWO 。 |
LOCAL_ONE |
必須將寫入發送到本地數據中心中的至少一個副本節點並由其成功確認。 | 達到ONE 沒有跨數據中心流量的一致性級別,這對於多個數據中心群集而言是理想的。出於安全和質量的原因,請在脫機數據中心中使用此一致性級別。如果離線節點出現故障,請LOCAL_ONE 防止自動連接到其他數據中心中的在線節點。 |
ANY |
寫操作必須至少寫入一個節點。如果給定分區鍵的所有副本節點均已關閉,則在寫入提示的切換后,寫入仍然可以成功。如果所有副本節點在寫入時均已關閉,則在ANY 該分區的副本節點恢復之前,該寫入不可讀。 |
提供低延遲,並保證寫入永不失敗。提供最低的一致性和最高的可用性。 |
下表描述了讀取一致性級別。
水平 | 描述 | 用法 |
---|---|---|
ALL |
所有副本均響應后,返回記錄。如果副本沒有響應,則讀取操作將失敗。 | 提供所有級別的最高一致性和所有級別的最低可用性。 |
EACH_QUORUM |
每個 數據中心中有一定數量的副本節點響應后,返回記錄。 | 在多個數據中心中使用,以為從每個數據中心返回的數據提供嚴格的讀取一致性。 |
QUORUM |
來自所有數據中心的一定數量的副本已響應后,返回記錄。 | 用於單個或多個數據中心集群中,以在整個集群中保持強一致性。如果您可以容忍某種程度的故障,則可以確保強一致性。 |
LOCAL_QUORUM |
協調器報告后,在當前數據中心的一定數量的副本后返回記錄。避免數據中心間通信的延遲。 | 通過機架感知的副本放置策略(例如NetworkTopologyStrategy)和正確配置的告密功能,用於維護多數據中心集群中單個數據中心內的一致性。 |
LOCAL_ONE |
返回本地數據中心中最接近的副本的響應。 | 達到ONE 沒有跨數據中心流量的一致性級別,這對於多個數據中心群集而言是理想的。出於安全和質量的原因,請在脫機數據中心中使用此一致性級別。如果離線節點出現故障,請LOCAL_ONE 防止自動連接到其他數據中心中的在線節點。 |
SERIAL |
允許在不建議新添加或更新的情況下讀取數據的當前(可能是未提交)狀態。如果SERIAL 讀取發現正在進行的未提交事務,它將作為讀取的一部分提交事務。與QUORUM類似。 |
用戶調用輕量級事務以寫入列后,用於讀取列的最新值。然后,數據庫檢查正在進行的輕量級事務處理是否有更新,如果找到,則返回最新數據。 |
LOCAL_SERIAL |
與相同SERIAL ,但僅限於本地數據中心。類似於 LOCAL_QUORUM 。 |
用於實現輕量級交易的線性化一致性。 |
ONE |
根據snitch確定,從最接近的副本返回響應。默認情況下,讀取修復在后台運行,以使其他副本保持一致。 | 如果您可以忍受讀取陳舊數據的可能性較高,則可以在所有級別中提供最高的可用性。聯系進行讀取的副本可能並不總是具有最新的寫入。 |
TWO |
返回兩個最近的副本中的最新數據。 | 類似於ONE 。 |
THREE |
返回三個最接近的副本中的最新數據。 | 類似於TWO 。 |
該QUORUM
級別寫入組成仲裁的節點數。計算法定人數,然后四舍五入為整數,如下所示:
quorum = (sum_of_replication_factors / 2) + 1
replication_factor
每個數據中心的所有設置 的總和為sum_of_replication_factors
。
sum_of_replication_factors = datacenter1_RF + datacenter2_RF + . . . + datacentern_RF
例如,使用3的復制因子,法定人數為2個節點((3 / 2) + 1 = 2
)。群集可以容忍一個副本。
例子:
- 使用6的復制因子,法定人數為4(
(6 / 2) + 1 = 4
)。群集可以容忍2個副本。 - 在每個數據中心的復制因子為3的兩個數據中心集群中,法定人數為4個節點(
(6 / 2) + 1 = 4
)。群集最多可以容忍2個副本節點。 - 在五個數據中心群集中,其中兩個數據中心的復制因子為3,三個數據中心的復制因子為2,法定人數為7個節點(
(12 / 2) + 1 = 7
)。
數據中心越多,成功操作需要響應的副本節點數量越多。
與相似QUORUM
,LOCAL_QUORUM
根據與協調節點相同的數據中心的復制因子來計算級別。即使群集具有多個數據中心,也僅使用本地副本節點來計算仲裁。
在中EACH_QUORUM
,集群中的每個數據中心都必須基於該數據中心的復制因子達到一個仲裁,以使寫入請求成功。對於群集中的每個數據中心,一定數量的副本節點必須響應協調器節點,寫請求才能成功。