【发布时间】:2015-10-13 02:22:06
【问题描述】:
我有一个运行 cassandra 2.1.6 的六节点集群。昨天我尝试删除列族并收到消息“列族 ID 不匹配”。
我尝试运行 nodetool repair,但修复完成后,我收到了相同的消息。然后我尝试从列族中进行选择,但收到消息“找不到列族”。
我运行以下查询以获取架构中所有列族的列表
select columnfamily_name from system.schema_columnfamilies where keyspace_name = 'xxx';
此时我收到了消息
“Keyspace 'system' not found.”
我尝试了 describe keyspaces 命令,果然 system 不在键空间列表。
然后,我在缺少 system 键空间的节点之一上尝试了 nodetool resetlocalshema,当未能解决问题时,我尝试了 nodetool rebuild 但得到了重建完成后的相同消息。
我尝试停止缺少 system 键空间的节点并重新启动它们,一旦重新启动完成,system 键空间又回来了,我能够执行以上查询成功。但是,我之前尝试删除的表未列出,因此我尝试重新创建它并再次收到消息列族 ID 不匹配。
最后,我关闭了集群并重新启动它......一切都按预期工作。
我的问题是:
系统密钥空间如何/为什么消失了?
当六个节点中的两个节点缺少系统键空间时,插入我的列族的数据发生了什么? (我的应用程序似乎没有任何问题)
有没有一种方法可以自动检测此类问题,或者我是否必须每天手动检查我的键空间?
有没有办法在不重新启动整个集群的情况下修复丢失的 system 键空间和/或 列族 ID 不匹配?
编辑
根据 Jim Meyers 的建议,我在集群的每个节点上查询了 cf_id 并确认所有节点都返回相同的值。从 system.schema_columnfamilies 中选择 cf_id,其中 columnfamily_name = 'customer' 允许过滤;
cf_id
--------------------------------------
cbb51b40-2b75-11e5-a578-798867d9971f
然后我在我的数据目录上运行 ls,可以看到我的一些表有多个条目
客户-72bc62d0ff7611e4a5b53386c3f1c9f9
客户-cbb51b402b7511e5a578798867d9971f
我的应用程序在运行时动态创建表(总是使用 IF NOT EXISTS),似乎应用程序同时在不同的节点上发出了相同的创建表命令,从而导致架构不匹配。 自从我重新启动集群后,一切似乎都运行良好。
删除多余的文件是否安全?
即 customer-72bc62d0ff7611e4a5b53386c3f1c9f9
【问题讨论】:
-
请在此节点的数据目录中发布
ls。 -
我认为可能。将发布您需要采取的修复措施。
标签: cassandra