我们在 AWS 上托管 Cassandra 2.0.2 集群。我们最近开始通过引导新节点和停用旧节点来从普通驱动器升级到 SSD 驱动器。除了两个节点在退役时永远挂起之外,它进行得相当不错。现在,在新的 6 个节点运行后,我们注意到一些使用 phpcassa 的旧工具停止工作。安全组没有任何改变,所有端口 TCP/UDP 都打开,telnet 可以通过 9160 连接,cqlsh 可以“使用”集群,选择数据,但是,“描述集群”失败,在 cli 中,“显示密钥空间”也失败 -失败,我的意思是永远不会退出提示,也不会返回任何结果。查询从新节点完美运行,但即使是等待退役的旧节点也无法执行它们。生产系统,同样使用 phpcassa,
所有 cassandra 都具有相同的配置、相同的版本、相同的安装包。由于种子节点更改,所有节点最近都重新启动。
版本:
在####.compute-1.amazonaws.com:9160 连接到###。[cqlsh 4.1.0 | 卡桑德拉 2.0.2 | CQL 规范 3.1.1 | 节俭协议 19.38.0]
我已经没有想法了。任何提示将不胜感激。
更新:
经过一些随机调查,这里有一个更详细的描述。
如果我对任何机器进行 cassandra-cli 并执行“显示键空间”,它就可以工作。
如果我 cassandra-cli 连接到远程机器,并执行“显示密钥空间”,它会无限期挂起。
如果我 cqlsh 到远程 cassandra,并执行描述键空间,它会挂起。ctrl+c,重复同样的查询,它会立即响应。
如果我 cqlsh 到本地 cassandra,并做一个描述键空间,它就可以工作。
如果我 cqlsh 到本地 cassandra,并从键空间限制 x 中选择 *,它将返回数据达到一定的限制。我能够返回限制为 760 的数据,但 761 会失败。
如果我做一个一致性,并选择相同的,它会挂起。
如果我进行跟踪,不同的机器会返回数据,尽管有时 source_elapsed 是“null”
不要忘记,查询集群的应用程序有时会在多次尝试后得到结果。
更新 2
进一步的游戏引入了两个节点的引导失败,一个在引导上挂了 4 天,最终失败,可能是由于滚动重启,另一个在 2 天后完全失败。修复不起作用,并引入了“流失败”错误,以及“线程 Thread[StorageServiceShutdownHook,5,main] java.lang.NullPointerException 中的异常”。此外,执行修复后,开始出现“读取无效帧大小 0。您是否在客户端使用 tframedtransport?”,所以..
解决方案
将 rpc_server_type 从 hsha 切换到 sync。所有的问题都过去了。我们与 hsha 合作了几个月,没有任何问题。
如果有人也在这里绊倒: http ://planetcassandra.org/blog/post/hsha-thrift-server-corruption-cassandra-2-0-2-5/