一致性级别如何配置?
可以将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
,集群中的每个数据中心都必须基于该数据中心的复制因子达到一个仲裁,以使写入请求成功。对于群集中的每个数据中心,一定数量的副本节点必须响应协调器节点,写请求才能成功。