【问题标题】:Cannot achieve consistency level ONE: info={ 'required_replicas': 1, 'alive_replicas': 0, 'consistency': 1}无法达到一致性级别 ONE:info={ 'required_replicas': 1, 'alive_replicas': 0, 'consistency': 1}
【发布时间】:2014-12-30 17:23:04
【问题描述】:

我的 Cassandra 设置中的键空间复制似乎没有正确进行,我需要一些想法来解决这个问题。我已经配置了多数据中心集群,但首先我已将密钥空间设置为使用带有 RF 3 的 SimpleStrategy。

存在列族:

cqlsh:kairosdb> select columnfamily_name from system.schema_columnfamilies where keyspace_name = 'kairosdb';

 columnfamily_name
-------------------
       data_points
     row_key_index
      string_index

(3 rows)

但我无法查询它们:

cqlsh:kairosdb> select count(*) from data_points limit 100000;
 Traceback (most recent call last):
  File "/usr/bin/cqlsh", line 957, in perform_simple_statement
    rows = self.session.execute(statement, trace=self.tracing_enabled)
  File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.1.1.post.zip/cassandra-driver-2.1.1.post/cassandra/cluster.py", line 1282, in execute
    result = future.result(timeout)
  File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.1.1.post.zip/cassandra-driver-2.1.1.post/cassandra/cluster.py", line 2776, in result
    raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ONE" info={'required_replicas': 1, 'alive_replicas': 0, 'consistency': 1}

这就是我设置多数据中心设置的方式:

  1. 使用种子列表中每个 DC 的 2 个节点
  2. 为 Snitch 使用 org.apache.cassandra.locator.GossipingPropertyFileSnitch
  3. 在 cassandra-rackdc.properties 中为节点指定不同的 DC 名称

这是创建的键空间:

cqlsh:kairosdb> describe keyspace kairosdb;

CREATE KEYSPACE kairosdb WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'}  AND durable_writes = true;

有什么想法可以解决这个问题吗?

【问题讨论】:

  • 你可以试试本地一级吗?您是否在密钥空间中有数据并将其更改为 RF 3?
  • 什么是本地一级?
  • 在多 DC 中,您可以指定本地与每个以指定是否要等待来自远程数据中心的响应。 datastax.com/documentation/cassandra/2.0/cassandra/dml/…
  • 您能否分享有关您设置多直流和配置 RF 3 的过程的详细信息
  • 我编辑了原始帖子,描述了我如何设置多直流集群以及如何创建键空间。用于复制的 SimpleStrategy 是否与多 DC 设置兼容?由于这不起作用,我删除了两个环,移回 SimpleSnitch,这一次键空间被正确创建。所以我想知道键空间创建是否不正确。

标签: cassandra datastax


【解决方案1】:

在创建键空间时,您有以下语法:

CREATE KEYSPACE kairosdb WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'}  AND durable_writes = true;

但是,如果您希望使用跨数据中心 (DC) 的复制,则需要使用 NetworkTopologyStrategy,例如:

CREATE KEYSPACE kairosdb WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': 3, 'DC2': 3};

根据以下文档链接,“当您已经(或计划)跨多个数据中心部署集群时,请使用 NetworkTopologyStrategy...”

http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureDataDistributeReplication_c.html

【讨论】:

  • 多数据中心是下一个设置,目前它只有一个 DC。即使在同一个 DC 的两个节点之间,使用 SimpleStrategy 时,查看数据是否同步的最简单方法是什么。
  • 您好,一般来说,经验法则是以比您读取的数据更高的一致性级别写入数据。人们经常担心他们的数据在节点之间的一致性,但您需要考虑集群而不是单个节点。看看这个来自 Netflix 的很棒的幻灯片包,他们是 Cassandra 的主要采用者,有一些有趣的阅读:slideshare.net/planetcassandra/…
【解决方案2】:

首先在您的任何节点上运行以下命令:

描述键空间system_auth;

检查这个键空间的类,是SimpleStrategy还是NetworkTopologyStrategy

如果您已为多个 DC 配置 Cassandra,则应为 NetworkTopologyStrategy

如果输出返回类为SimpleStrategy,你需要ALTER这个keyspace

命令:

ALTER KEYSPACE "system_auth" WITH REPLICATION = 'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2};

完成此操作后,尝试创建一个新的键空间进行检查。 您将不再遇到您一直面临的一致性错误。

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 2016-07-20
    • 1970-01-01
    • 2018-08-14
    • 2019-05-08
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多