当前位置: 首页 > 知识库问答 >
问题:

卡桑德拉复制节点在尝试从密钥空间读取时失败

王俊哲
2023-03-14

我的Cassandra (3.0.2)复制集中有3个节点。我的一致性水平是“一”。开始时,我所有的键空间的复制因子都等于1。我通过改变表来改变它,并在所有节点上运行“nodetool repair”。现在,当我试图选择一些数据(不是在每个键空间上)时,我得到类似这样的结果(select * from keyspace.table):

回溯(最近调用最后):文件“/usr/bin/cqlsh.py”,第 1258 行,perform_simple_statement 结果 = future.result() 文件“cassandra/cluster.py”,第 3781 行,在 cassandra.cluster.ResponseFuture.result (cassandra/cluster.c:73073) 引发self._final_exception 读取失败:来自服务器的错误:代码=1300 [副本无法执行读取] 消息=“操作失败 - 收到 0 个响应和 1 个失败” 信息={“失败”:1,“received_responses”: 0, 'required_responses': 1, '一致性': 'ONE'}

在“/var/log/cassandra/system.log”中,我得到:

另外,我得到:

DEBUG[SharedPool-Worker-1] 2017-04-07 13:20:30,002ReadCallback.java:126-超时;收到0/1的回复

我检查了端口9042和7000上的节点之间是否存在连接。我更改了“/etc/cassandra/cassandra.yml”中的选项,如“read_request_timeout_in_ms”、“range_requeste_timeoout_in_ns”、“write_request _timeout_in_s”或“truncate_request_temeout_in _ms”。我更改了文件“~/.cassandra/cqlshrc”和选项“client_timeout=3600”。另外,当我这样做时,例如“从keyspace.table中选择*,其中column1='value',column2=value”,我得到:

ReadTimeout:来自服务器的错误:code = 1200[协调器节点等待副本节点响应超时] message= "操作超时-仅收到0个响应。"info={'received_responses': 0,' required_responses': 1,' consistency': 'ONE'}

有什么想法吗?

共有3个答案

司空浩邈
2023-03-14

固定!我将卡桑德拉版本从3.0.2更改为3.0.9,问题解决了。

晁聪
2023-03-14

Markošvaljek,是的,我将复制因子从1更改为3(因为我的复制中有3个节点)。你是对的;你改变了密钥空间的复制因子,这就是我所做的。这里有我的密钥空间的描述,通常我会在这里遇到一些错误(当然,在其他密钥空间中也会发生这种情况):

soi@cqlsh> desc keyspace engine;

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

CREATE TABLE engine.messages (
    persistence_id text,
    partition_nr bigint,
    sequence_nr bigint,
    timestamp timeuuid,
    timebucket text,
    message blob,
    tag1 text,
    tag2 text,
    tag3 text,
    used boolean static,
    PRIMARY KEY ((persistence_id, partition_nr), sequence_nr, timestamp, timebucket)
) WITH CLUSTERING ORDER BY (sequence_nr ASC, timestamp ASC, timebucket ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'bucket_high': '1.5', 'bucket_low': '0.5', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'enabled': 'true', 'max_threshold': '32', 'min_sstable_size': '50', 'min_threshold': '4', 'tombstone_compaction_interval': '86400', 'tombstone_threshold': '0.2', 'unchecked_tombstone_compaction': 'false'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

CREATE MATERIALIZED VIEW engine.eventsbytag1 AS
    SELECT tag1, timebucket, timestamp, persistence_id, partition_nr, sequence_nr, message
    FROM engine.messages
    WHERE persistence_id IS NOT NULL AND partition_nr IS NOT NULL AND sequence_nr IS NOT NULL AND tag1 IS NOT NULL AND timestamp IS NOT NULL AND timebucket IS NOT NULL
    PRIMARY KEY ((tag1, timebucket), timestamp, persistence_id, partition_nr, sequence_nr)
    WITH CLUSTERING ORDER BY (timestamp ASC, persistence_id ASC, partition_nr ASC, sequence_nr ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

CREATE TABLE engine.config (
    property text PRIMARY KEY,
    value text
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

CREATE TABLE engine.metadata (
    persistence_id text PRIMARY KEY,
    deleted_to bigint,
    properties map<text, text>
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

通常我得到代码错误号1200或1300,如您在第一篇文章中看到的那样。这里有我的“节点工具状态”:

ubuntu@cassandra-db1:~$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns    Host ID                               Rack
UN  192.168.1.13  3.94 MB    256          ?       8ebcc3fe-9869-44c5-b7a5-e4f0f5a0beb1  rack1
UN  192.168.1.14  4.26 MB    256          ?       977831cb-98fe-4170-ab15-2b4447559003  rack1
UN  192.168.1.15  4.94 MB    256          ?       7515a967-cbdc-4d89-989b-c0a2f124173f  rack1

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

我不认为其他进程可以操纵磁盘上的数据。我要补充的是,我有类似的复制,我有更多的数据,我没有这样的问题。

殳经略
2023-03-14

这或多或少是一个评论,但既然有这么多话要说,它就不适合评论。

如果能说出您更改了值的复制因子,那将是非常好的。我只是假设它是3,因为它相当标准。然后,由于您只有3人的集群,有时会将RF设置为2。您还提到您更新了表上的复制因子。据我所知,复制因子是在密钥空间级别设置的。

如果您发布了发生错误的密钥空间的描述,这将非常有帮助。

考虑到select*from某物在集群中可能会变得非常密集,特别是如果您有大量数据的话。如果你在cqlsh中做这个查询,你可能会得到10000,然后你只提到cqlsh,没有应用程序代码,所以我只是注意到这一点。

请您提供<code>nodetool状态</code>,以确保您实际上没有在某些节点关闭的情况下运行查询。因为第一个错误看起来像这样。

到您发布堆栈跟踪的第二个错误时,它看起来就像您在磁盘上缺少一些稳定?是否有可能其他过程以某种方式操纵了稳定器?

你还改变了cassandra.yaml的很多属性,基本上你将预期响应时间减少了近50%,我想难怪节点没有时间响应……计算整个表通常需要3.6秒以上。

为什么这些值被改变的原因根本就不存在。

 类似资料:
  • Cassandra修复无法在节点1上运行,出现以下错误。我之前错误地并行启动了多个修复会话。我发现有一个错误https://issues.apache.org/jira/browse/CASSANDRA-11824已经解决了同样的情况。但我已经在使用cassandra 3.9,请确认运行nodetool scrub是否是唯一的解决方法?在运行scrub之前,我们需要记住什么注意事项,因为我需要直接

  • 我正在使用Cassandra作为我的一个应用程序。我想使用Cassandra通过cql提供的Prepared语句。如果我准备了一个查询,这是否在所有节点中都准备好了?。 任何帮助是值得赞赏的。

  • 在你否决之前,我想声明,我看了所有类似的问题,但我仍然得到可怕的“主键列不能被限制”错误。 下面是我的表结构: 谢谢,德尼兹

  • 我们有3个节点cassandra集群,我们添加了一个节点并停止了集群中的另一个节点。因为我们认为一切都很好,但我们开始看到提示表正在增长。 我们发现我们犯了一个错误,并从集群中删除节点,但仍然当我们运行nodetool八卦信息时,它会显示删除节点,但它的节点没有显示在状态命令中。 问题是什么,我们仍然看到提示表在增长。我们不知道集群发生了什么,2到3天没有错误,突然一个种子节点出现OOM错误。 j

  • 操作超时 - 仅收到 0 个响应“,信息:”表示来自服务器的错误消息“,代码:4608,一致性:1,已接收:0,阻止:1,isData 呈现:0,... 我每天尝试在我的cassandra集群上执行SELECT查询时都会遇到几次这样的错误。我们在m1.large aws实例上有一个3节点集群。他们大多数时候都能成功,但我们偶尔会遇到上述错误。我们还没有生产,所以所有的桌子都很小。我们没有超过几千行

  • 全能的开发者们。我在Spark中运行一些基本的分析,在这里我查询多节点Cassandra。我正在运行的代码以及我正在处理的一些非链接代码是: Spark的版本是1.6.0,Cassandra v3。0.10,连接器也是1.6.0。键空间有,表有5列,实际上只有一行。如您所见,有两个节点(OracleVM中制作的虚拟Macine)。 我的问题是,当我测量从spark到cassandra的查询时间时,