协调器节点可以将三种类型的读取请求发送给副本:
- 直接读取请求
- 摘要请求
- 后台读取修复请求
在直接读取请求中,协调器节点联系一个副本节点。在摘要请求中,协调器节点首先联系一致性级别指定的副本。协调器节点将请求发送到响应速度最快的副本。联系的节点以请求数据的摘要作为响应。如果联系了多个节点,则会比较每个副本中的行在内存中的一致性。
如果任何副本节点中的数据已过期,则协调器节点将发送后台读取修复,该操作会将来自副本的结果与最新数据(基于时间戳)一起转发给客户端。读取修复请求确保与读取查询中涉及的所有副本上的请求行保持一致。
有关读取请求的图解示例,请参阅读取一致性级别示例。
使用speculative_retry的快速读取保护
当最初选择的副本节点出现故障或响应时间太长时,快速读取保护功能使Apache Cassandra™(DDAC)的DataStax分发仍可以传递读取请求。如果已使用speculative_retry属性配置了表,则如果原始副本节点超过可配置的超时值以完成读取请求,则读取请求的协调器节点将与另一个副本节点重试该请求。
协调节点
选择节点
读取一致性级别示例
- 单个数据中心中的QUORUM
- 一个数据中心中的一个
- 两个数据中心中的QUORUM
- 在两个数据中心中的LOCAL_QUORUM
- 两个数据中心中的一个
- 两个数据中心中的LOCAL_ONE
快速读取保护图显示了推测性重试表属性如何影响一致性。
具有QUORUM一致性级别的单数据中心集群
在复制因子为3且读取一致性级别为的单数据中心群集中,给定行QUORUM
的3个副本((3/2)+1 = 2
)中的2个必须响应才能满足读取请求。如果联系的副本具有不同的行版本,则具有最新版本的副本将返回请求的数据。在后台,检查第三个副本与前两个副本的一致性,如果需要,将为过期的副本启动读取修复。
协调节点
选择节点
阅读回应
阅读维修
一致性级别为ONE的单数据中心集群
在复制因子为3且读取一致性级别为的单数据中心群集中ONE
,将联系给定行的最接近副本以满足读取请求。根据read_repair_chance
表的设置,可能在其他副本的后台启动读取修复。
协调节点
选择节点
阅读回应
阅读维修
具有QUORUM一致性级别的两个数据中心集群
在复制因子为3且读取一致性为的两个数据中心群集中, QUORUM
给定行的4个副本必须响应才能满足读取请求。4个副本可以来自任何数据中心。在后台,检查其余副本与前四个副本的一致性。如果需要,将为过期的副本启动读取修复。
协调节点
选择节点
阅读回应
阅读维修
具有LOCAL_QUORUM一致性级别的两个数据中心集群
在复制因子为3且读取一致性为的双数据中心群集中,与 LOCAL_QUORUM
给定行的协调器节点相同的数据中心中的2个副本必须响应才能满足读取请求。在后台,检查其余副本与前两个副本的一致性。如果需要,将对过期的副本启动读取修复。
协调节点
选择节点
阅读回应
阅读维修
一致性级别为ONE的两个数据中心集群
在复制因子为3且读取一致性为的两个数据中心群集中, ONE
将联系给定行的最接近副本(无论数据中心如何)来满足读取请求。根据read_repair_chance
表的设置,可能在其他副本的后台启动读取修复。
协调节点
选择节点
阅读回应
阅读维修
具有LOCAL_ONE一致性级别的两个数据中心集群
在复制因子为3且读取一致性为的两个数据中心群集中, LOCAL_ONE
联系与协调器节点位于同一数据中心中给定行的最接近副本,以满足读取请求。根据read_repair_chance
表的 设置,可能在其他副本的后台启动读取修复。
协调节点
选择节点
阅读回应
阅读维修