我正在试验一个4节点Cassandra(1.2)群集,我刚刚在4个虚拟机上安装了CentOS 6.4。首先,我创建了3个复制因子密钥空间,并在其中创建了情侣对表,人口每一个与行的少数 - 全部使用Cqlsh。简单的INSERT,SELECT和UPDATE似乎工作正常。对Cassandra中特定行的更新似乎不见了
然后我开始随机断开一些节点以查看集群的实际功能。虽然其中两个节点脱机,但我运行了几个返回正确结果的SELECT。随后,我试图更新现有的行,而根据“nodetool getendpoints”是在离线节点以及上Cqlsh正在运行的本地节点上托管。在将两个节点重新联机后,对更新的行运行SELECT操作而不是返回更新的数据值。我等了一会儿,再次尝试SELECT,但仍然保持返回原始数据。 我也试过以下,其中没有返回更新后的数据:
- 重新运行更新几次
- UPDATEing同一行中不同的列 - 没有更新领域
- 重新启动集群中的所有四个节点
对不同行中同一列的更新工作正常,这与上述#2一起导致我认为这是行数据的问题。
下面的代码片段显示了一个SELECT之前和之后的一个看似成功的UPDATE返回原始数据:
cqlsh:demo> select email, active from users where email = '[email protected]';
email | active
--------------------+--------
[email protected] | True
cqlsh:demo> update users set active = false where email = '[email protected]';
cqlsh:demo> select email, active from users where email = '[email protected]';
email | active
--------------------+--------
[email protected] | True
我是新来卡桑德拉所以我很可能是失去了一些东西。任何建议或故障排除技巧(要检查的文件或命令来运行),以帮助发现是怎么回事,这里将不胜感激。
如果你使用的一致性级别的所有返回您更新的资料?你可以用'CONSISTENCY ALL'在cqlsh中设置它。 – Richard
不幸的是,它不。 – Aeham
在这种情况下,更新失败。当你用节点进行更新时,你有没有cqlsh输出? – Richard