我有两个节点,我创建了一个这样的密钥空间:
DESCRIBE uzzstore
CREATE KEYSPACE uzzstore WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2'} AND durable_writes = true;
CREATE TABLE uzzstore.chunks (
id blob PRIMARY KEY,
size bigint
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'}
AND comment = ''
AND compaction = {'class': 'SizeTieredCompactionStrategy'}
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';
字符串
当前我只有节点1在接收查询(读/写),根据我对文档的理解,所有的写操作都应该被复制;因此,我假设两个节点的数据相同,我在第二个节点上添加了第二个节点,并多次刷新和修复这些节点,但是,我看到节点1大约有213,435,988行,而节点2只有206,916行,617行。
nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 192.168.1.51 17.5 GB 256 ? 15450683-e34b-475d-a393-ad25611398d8 rack1
UN 192.168.1.100 17.92 GB 256 ? 6cad2ba2-b22e-4947-a952-dc65c616a08f rack1
Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless
型
这是一种预期的行为吗?我对副本的理解是否不正确?(注意,我给群集留了几次时间来配对)。
1条答案
按热度按时间nbnkbykc1#
你是对的,如果你有一个两节点的集群和一个
replication_factor
2的键空间,那么实际上每一段数据都将在两个节点上,如果你使用CL=ALL
,你可以确定这在写操作完成时已经发生了-但是即使你使用CL=ONE
,写操作仍然会 * 最终 * 发生在第二个节点上-通常非常快,但是在修复之后(你说你做了),你可以确保相同的数据出现在两个节点上,两个节点应该有完全相同的行数。然而,您说“我看到节点1大约有213,435,988行,节点2只有206,916,617行。"。您对这些数字有多大把握?您是如何得到这些数字的?您真的扫描了表吗(你是如何将扫描限制在一个节点上的?),还是使用了某种“大小估计”功能?如果是后者,您应该注意,在Cassandra和Scylla上,这只是一个估计。(参见https://github.com/scylladb/scylladb/issues/9083),但在这两个例子中,是否进行了主要压缩(
nodetool compact
)的问题会影响估计。您说您“刷新并修复”了表,但没有说您压缩了它。无论如何,我想再次强调,即使压缩影响分区数量的估计,如果您使用
SELECT * FROM table
扫描整个表或使用SELECT COUNT(*) FROM table
计数,则它不会对正确性或数据或您看到的准确行数产生任何影响。如果 * 提示切换 *,则 * 可能 * 需要修复未启用,并且您的群集在写入过程中出现连接问题-但既然您确实说您进行了修复,那么应该没有问题。