【问题标题】:Cassandra Consistency Level and Replication FactorCassandra 一致性级别和复制因子
【发布时间】:2017-08-05 14:37:30
【问题描述】:

我是 Cassandra 的新手。 假设我有 3 个节点,并且密钥空间的复制因子(RF)为 3。

  1. 我是否可以安全地假设,如果 2/3 节点出现故障,无论一致性级别如何,我仍然可以获得查询的完整数据?
  2. 保持 2/3 节点关闭,哪种一致性级别可以确保我获得完整的查询数据?

【问题讨论】:

    标签: cassandra cassandra-2.0 data-consistency


    【解决方案1】:

    这取决于您用于写入和读取请求的一致性级别。

    For strong consistency: R + W > N    
    For eventual consistency: R + W =< N, where     
        - R is the consistency level of read operations     
        - W is the consistency level of write operations    
        - N is the number of replicas 
    

    在我们的照顾下 R + W 现在假设,我们使用 QUORUM 进行读操作,使用 ONE 进行写操作。

        quorum = (sum_of_replication_factors / 2) + 1 = (3/2) + 1 = 2     
        read = 1   
        R + W <=3 is satisfied in our case.
    

    您可以根据需要配置一致性级别,但请记住延迟。
    你可以阅读更多consistency-handingconsistency-configuration

    回到您的问题,如果只使用一个节点,那么您将不会获得最终的一致性。您可以将 ONE 用于读取和写入,但它会破坏目的。假设节点将再次启动,我宁愿使用 LOCAL_QUORUM 进行写入,使用 TWO 进行读取。

    【讨论】:

    • 那么如果我写入表(RF 为 3)且写入一致性为 ONE,Cassandra 是否会复制我的数据?
    • 是的,因为节点及时启动。你应该阅读这个概念hinted-handoff 这对于理解当你有一些节点关闭时读/写会发生什么非常关键。
    【解决方案2】:

    在您的情况下,由于有 3 个节点,并且复制因子也是 3,因此,每个节点都将拥有所有数据。因此,即使只有 1/3 的节点在运行,您仍然可以获取完整的数据。但是,在这种情况下,数据的一致性(即您是否获得最新数据)将取决于所使用的写入一致性(我假设由于只有 1/3 节点可操作,因此读取一致性是1)。为了得到一致的数据,写一致性应该是3(使用条件,R+W>N为强一致性)。只有这样,您才能在读取时获得一致的数据,即使只有 1/3 节点可操作。

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 2018-07-01
      • 2018-12-24
      • 2015-09-25
      • 2016-07-05
      • 2016-04-06
      • 1970-01-01
      • 2017-01-09
      • 2018-06-13
      相关资源
      最近更新 更多