Cassandra 卡桑德拉当地法定人数

Cassandra 卡桑德拉当地法定人数,cassandra,datastax,cql,cassandra-2.0,nosql,Cassandra,Datastax,Cql,Cassandra 2.0,Nosql,我很难理解/找到有关如何在cassandra中计算各种定量的信息 假设我有一个16节点的集群,它跨2个数据中心使用网络拓扑策略。每个数据中心的复制系数为2(DC1:2,DC2:2) 在本例中,如果我使用本地仲裁写入数据,我会将数据写入4个节点(每个数据中心2个),但确认何时发生?写入1个数据中心中的2个节点后 此外,为了保持强大的读取一致性,我需要写入节点+读取节点>复制因子。在上面的示例中,如果读取和写入都是本地仲裁,则我将使用2+2,这将不能保证强读取一致性。我理解正确吗?那么,我需要什么级

我很难理解/找到有关如何在cassandra中计算各种定量的信息

假设我有一个16节点的集群,它跨2个数据中心使用网络拓扑策略。每个数据中心的复制系数为2(DC1:2,DC2:2)

在本例中,如果我使用本地仲裁写入数据,我会将数据写入4个节点(每个数据中心2个),但确认何时发生?写入1个数据中心中的2个节点后

此外,为了保持强大的读取一致性,我需要写入节点+读取节点>复制因子。在上面的示例中,如果读取和写入都是本地仲裁,则我将使用2+2,这将不能保证强读取一致性。我理解正确吗?那么,我需要什么级别来确保强大的读取一致性


这里的目标是确保如果数据中心出现故障,读/写操作可以继续,同时最大限度地减少延迟

在协调器从协调器的同一DC收到来自2个节点的确认后,写入将成功


如果相同的DC将用于读写,并且仅用于此DC,则在读写时使用本地仲裁将获得很强的一致性

前面的回答是正确的:“协调器从协调器的同一DC收到来自2个节点的确认后,写入将成功。”读操作也是如此

仲裁始终按N/2+1(N为复制因子)计算,拥有本地仲裁可避免其他数据中心的延迟

据我所知,在RF为2和LOCAL_QUORUM的情况下,您具有更好的本地一致性,但在分区的情况下没有可用性:如果一个节点丢失,该节点及其副本的范围令牌的所有写入和读取都将失败


因此,如果您打算使用Quorum,我建议RF为3。对于2个副本,您最好使用一个。

一旦本地仲裁在任何一个数据中心完成其工作,客户端将从corrdinator节点获得写或读确认

如果写入一致性级别为LOCAL_ONE或LOCAL_QUORUM,则只有与协调器节点位于同一数据中心的节点必须响应客户端请求,请求才能成功


使用本地仲裁或本地仲裁来减少地理延迟,减少对客户端写入请求响应时间的影响。

我如何更改此设置以能够从两个数据中心读取并保持强一致性?请改用每个仲裁。在写入时使用每个仲裁,在读取时不使用每个仲裁,因为读取时的本地仲裁已足够。或者,在您的环境中,使用QUORUM进行写入和读取的操作大致相同,但会容忍单节点故障(每个DC中的RF=2,如果任何副本出现故障,则您无法满足该DC的QUORUM要求-但是,群集范围的QUORUM是4个副本中的任意3个,可能满足您的需要)。更多:人们经常混淆暗示与CL和可用性。示例:3上有2个节点处于活动状态,而向下的节点正在为1/2的数据提供令牌(因为RF为2),因此有一半的写查询和读查询会在一致性仲裁中失败。如果您希望RF为2且具有极高的可用性,则应将CL更改为一个或任意一个,以便查询成功。或者,您可以将RF更改为3以解决法定人数问题。参考和官方文件:。