Cassandra 因任意命令而挂起

标签 cassandra cql phpcassa

我们在 AWS 上托管 Cassandra 2.0.2 集群。我们最近开始通过引导新节点和退役旧节点来从普通驱动器升级到 SSD 驱动器。除了两个节点永远卡在退役状态之外,一切进展顺利。现在,在新的 6 个节点投入运行后,我们注意到一些使用 phpcassa 的旧工具停止工作。安全组没有任何变化,所有端口 TCP/UDP 都打开,telnet 可以通过 9160 连接,cqlsh 可以“使用”集群,选择数据,但是,“描述集群”失败,在 cli 中,“显示 key 空间”也失败 -所谓失败,是指永远不会退出到提示符,也不会返回任何结果。查询在新节点上可以完美运行,但即使是等待退役的旧节点也无法执行它们。生产系统也使用 phpcassa,执行正常的数据请求 - 工作正常。

所有 cassandra 都具有相同的配置、相同的版本、相同的安装包。由于种子节点更改,所有节点最近重新启动。

版本:

已连接到位于 ####.compute-1.amazonaws.com:9160 的 ###。 [cqlsh 4.1.0 | Cassandra 2.0.2 | CQL 规范 3.1.1 | Thrift协议(protocol)19.38.0]

我已经没有主意了。任何提示将不胜感激。

更新:

经过一些随机调查,这里有一些更详细的描述。

如果我将 cassandra-cli 连接到任何机器,并执行“show keyspaces”,它就会起作用。

如果我将 cassandra-cli 连接到远程计算机,并执行“show keyspaces”,它会无限期挂起。

如果我 cqlsh 到远程 cassandra,并执行描述键空间,它会挂起。 ctrl+c,重复相同的查询,它立即响应。

如果我 cqlsh 到本地 cassandra,并执行描述键空间,它就会起作用。

如果我 cqlsh 到本地 cassandra,并从 Keyspace limit x 中执行 select *,它将返回达到特定限制的数据。我能够返回限制为 760 的数据,761 将失败。

如果我对所有内容进行一致性处理,并选择相同的内容,它就会挂起。

如果我进行跟踪,不同的机器会返回数据,尽管有时 source_elapsed 为“null”

不要忘记,查询集群的应用程序有时在多次尝试后确实会得到结果。

更新2

进一步的游戏引入了两个节点的引导失败,其中一个节点卡在引导上 4 天,最终失败,可能是由于滚动重启,另一个节点在 2 天后失败。修复不起作用,并引入“Stream failed”错误,以及“线程 Thread[StorageServiceShutdownHook,5,main] java.lang.NullPointerException 中的异常”。另外,执行修复后,开始收到“读取无效的帧大小 0。您在客户端使用 tframedtransport 吗?”,所以..

解决方案

将 rpc_server_type 从 hsha 切换为同步。所有问题都消失了。我们与 hsha 合作了几个月,没有出现任何问题。

如果有人也在这里绊倒: http://planetcassandra.org/blog/post/hsha-thrift-server-corruption-cassandra-2-0-2-5/

最佳答案

cassandra.yaml中:

rpc_server_typehsha 切换为 sync

关于Cassandra 因任意命令而挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019741/

相关文章:

Cassandra 无效的 Yaml 尽管有有效值

php - 使用 phpcassa 显示所有键

cassandra - 为什么Cassandra群集需要节点之间的同步时钟?

javascript - 获取刚刚插入的行的id

cql - 如何在cassandra中构建范围查询?

cassandra - 了解 Cassandra 的存储开销

cassandra - 将 UUID1 与 phpcassa 一起使用

cassandra - 支持 .7 Cassandra 的 PHP 客户端?

java - 如何与 Hector 设置 Cassandra 中列的生存时间?

cassandra - 比较 Cassandra 的 CQL、Spark/Shark 查询与 Hive/Hadoop(DSE 版本)