什么可能导致 cassandra 中的表名"ghost"?

  • 本文关键字:ghost cassandra cassandra
  • 更新时间 :
  • 英文 :


运行时:

cqlsh> SELECT * FROM system_schema.tables WHERE keyspace_name = 'demo_fds';

我看到感兴趣的表名(afifarmrecord(:

demo_fds |   afifarmrecord |                   0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null |         | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} |                1 |               
0.1 |                    0 |           {} | {'compound'} |           864000 | 571c9960-3bba-11eb-93dc-9726102541d7 |               2048 |                           0 |          
128 |                  0 |      99PERCENTILE
demo_fds |      shactivity |                   0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null |         | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} |                1 |               
0.1 |                    0 |           {} | {'compound'} |           864000 | 57eb8220-3bba-11eb-93dc-9726102541d7 |               2048 |                           0 |          
128 |                  0 |      99PERCENTILE
demo_fds |  shrumandeating |                   0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null |         | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} |                1 |               
0.1 |                    0 |           {} | {'compound'} |           864000 | 581c0800-3bba-11eb-93dc-9726102541d7 |               2048 |                           0 |          
128 |                  0 |      99PERCENTILE
demo_fds |        sxrecord |                   0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null |         | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} |                1 |               
0.1 |                    0 |           {} | {'compound'} |           864000 | 585e1a10-3bba-11eb-93dc-9726102541d7 |               2048 |                           0 |          
128 |                  0 |      99PERCENTILE

然而,afifarmrecord和另一个空表之间的行为不同

cqlsh> select * from demo_fds.afifarmrecord   limit 20;
'afifarmrecord' not found in keyspace 'demo_fds'
cqlsh> select * from demo_fds.shactivity   limit 20;
mark | timestamp | serializedrecord
------+-----------+------------------
(0 rows)

一个只是空的,但另一个似乎不存在。我正试图弄清楚为什么会发生这种情况,因为我相信我正在以相同的方式创建所有表,所以奇怪的是,其中只有一个表出现这种症状。

更新1:集群和密钥空间的状态

$ nodetool describecluster
Cluster Information:
Name: Test Cluster
Snitch: org.apache.cassandra.locator.SimpleSnitch
DynamicEndPointSnitch: enabled
Partitioner: org.apache.cassandra.dht.Murmur3Partitioner
Schema versions:
24104e25-be79-3da1-a8b7-d7b0be9034b8: [127.0.0.1]

$ nodetool status demo_fds
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Owns (effective)  Host ID                               Token                                    Rack
UN  127.0.0.1  3.03 GiB   100.0%            e0bbc831-8686-43a6-b99c-8ea5596c8581  3840369556391221198                      rack1

我的猜测是,您正在根据表的创建时间(id列(以编程方式创建表:

afifarmrecord  - 571c9960-3bba-11eb-93dc-9726102541d7 = 6:08:27am PST
shactivity     - 57eb8220-3bba-11eb-93dc-9726102541d7 = 6:08:28am PST
shrumandeating - 581c0800-3bba-11eb-93dc-9726102541d7 = 6:08:29am PST
sxrecord       - 585e1a10-3bba-11eb-93dc-9726102541d7 = 6:08:29am PST

表ID是一个版本1的UUID,其中包括创建它的时间戳。在上面的例子中,所有表ID都是在12月11日创建的(太平洋(。

由于它们的创建时间很近,这让我相信您是在用程序在集群中创建表,而没有在调用下一个DDL更新之前首先检查每个DDL语句是否已在集群中成功传播。

因此,它导致了模式分歧,我怀疑这就是这里正在发生的事情。当您查询集群中的一个节点时,它不知道该表,因此返回";未找到";错误

您通常需要通过执行滚动重新启动来解决模式分歧。您可以检查所有节点是否与nodetool describecluster命令一致,并确保所有节点中只有一个架构版本。干杯

最新更新