【发布时间】:2022-07-11 22:18:28
【问题描述】:
我正在使用 Scylla 版本 4.6.3。我在单个 DC 中有一个由 3 个节点组成的集群。我已按照https://docs.scylladb.com/operating-scylla/procedures/cluster-management/add-dc-to-existing-dc/ 中的说明在新 DC 中添加 3 个新节点。新 DC 中的节点启动后,我检查 nodetool 状态并确保所有节点都已启动并运行。现在由于所有节点都是同一个集群的一部分,我假设查询结果应该是相同的,无论我在哪个节点上运行 cql 查询,不是吗?但是我看到当查询在不同的节点上运行时数据是不同的。事实上,在同一个 DC 的不同节点上查询时,查询结果也是不同的!观察到以下差异(虽然这不是一个完整的列表):
- 在 N1 上,一些主键没有记录,但在 N2 上,同一主键有几条记录。
- 在 N1 上,记录计数显示的值与在 N2 上不同。
- 在同一 DC 中的不同节点之间以及跨 DC 中都可以观察到这种差异。
我的密钥空间之前使用了复制因子为 2 的 SimpleStrategy。在添加新 DC 时,作为文档中描述的步骤的一部分,我对其进行了修改,以在两个 DC 中使用复制因子为 2 的 NetworkTopologyStrategy:
ALTER KEYSPACE ks WITH replication = { \'class\' : \'NetworkTopologyStrategy\', \'existing-dc\' : 2, \'new-dc\' : 2};为什么会有这种差异?我错过了什么?这是一个示例键空间和表定义:
CREATE TABLE ks.cf ( hourofyear int, operationtime bigint, action text, entityid text, entitytype text, operatorid text, PRIMARY KEY (hourofyear, operationtime) ) WITH CLUSTERING ORDER BY (operationtime DESC) AND bloom_filter_fp_chance = 0.01 AND caching = {\'keys\': \'ALL\', \'rows_per_partition\': \'ALL\'} AND comment = \'\' AND compaction = {\'class\': \'LeveledCompactionStrategy\'} AND compression = {\'sstable_compression\': \'org.apache.cassandra.io.compress.LZ4Compressor\'} AND crc_check_chance = 1.0 AND dclocal_read_repair_chance = 0.0 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 = \'99.0PERCENTILE\'; CREATE INDEX auditid ON ks.cf (entityid); CREATE INDEX agentid ON ks.cf (operatorid); CREATE INDEX auditaction ON ks.cf (action);示例查询:
select count(*) from ks.cf where hourofyear = 4444;此查询在不同的运行(即使在同一分钟内)给出不同的结果。有时它在所有 ndo 上显示相同的结果。数据不再写入此键空间。为什么我在多次运行中看到这种差异?
cqlsh> select count(*) from ks.cf where hourofyear = 4446; count ------- 1072 cqlsh> select count(*) from ks.cf where hourofyear = 4446; count ------- 1545两次运行仅相隔几秒钟。为什么有区别?有人可以对此有所了解吗?
标签: scylla