Cassandra节点无法相互通信,导致ReadTimeout
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cassandra节点无法相互通信,导致ReadTimeout相关的知识,希望对你有一定的参考价值。
这是在Datastax Cassandra(dse)版本:4.8.5-1 这相当于(我相信)Cassandra:2.1.x
从我们的应用程序查询时,我收到了很多以下错误:
ReadTimeout: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'data_retrieved': False, 'required_responses': 1, 'consistency': 1}
进一步深入研究;示例查询(在每个节点上使用本地cqlsh运行)返回环中的3个节点,但在其余节点上失败并显示ReadTimeout。似乎只有包含副本的节点返回响应,而其他节点根本不知道如何找到它们。
是否有一些配置或已知问题我应该考虑解决此问题?
当其他节点发生故障时,我在日志中看到此错误:
ERROR [MessagingService-Outgoing-/10.0.10.14] 2016-04-25 20:46:46,818 CassandraDaemon.java:229 - Exception in thread Thread[MessagingService-Outgoing-/10.0.10.14,5,
main]
java.lang.AssertionError: 371205
at org.apache.cassandra.utils.ByteBufferUtil.writeWithShortLength(ByteBufferUtil.java:290) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.composites.AbstractCType$Serializer.serialize(AbstractCType.java:393) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.composites.AbstractCType$Serializer.serialize(AbstractCType.java:382) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.filter.ColumnSlice$Serializer.serialize(ColumnSlice.java:271) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.filter.ColumnSlice$Serializer.serialize(ColumnSlice.java:259) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.filter.SliceQueryFilter$Serializer.serialize(SliceQueryFilter.java:503) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.filter.SliceQueryFilter$Serializer.serialize(SliceQueryFilter.java:490) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.SliceFromReadCommandSerializer.serialize(SliceFromReadCommand.java:168) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.ReadCommandSerializer.serialize(ReadCommand.java:143) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.db.ReadCommandSerializer.serialize(ReadCommand.java:132) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.net.MessageOut.serialize(MessageOut.java:121) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.net.OutboundTcpConnection.writeInternal(OutboundTcpConnection.java:330) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.net.OutboundTcpConnection.writeConnected(OutboundTcpConnection.java:282) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
at org.apache.cassandra.net.OutboundTcpConnection.run(OutboundTcpConnection.java:218) ~[cassandra-all-2.1.13.1131.jar:2.1.13.1131]
Nodetool状态输出
Datacenter: primary
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 10.0.10.224 557.95 GB 1 ? d1b984b0-50d4-4faa-b349-08bc0cf36447 RAC1
UN 10.0.10.225 740.11 GB 1 ? 16ab3c8c-476e-46c2-837c-6dbb89b7d40d RAC1
UN 10.0.10.12 748.23 GB 1 ? 4127f0d7-6bd0-4dc8-b6a0-3b261e55b44e RAC1
UN 10.0.10.45 629.27 GB 1 ? f4499c5d-f892-43b8-97f3-dcce5be51fb8 RAC2
UN 10.0.10.13 592.57 GB 1 ? 41b58044-942d-4e77-a8de-95495b88a073 RAC1
UN 10.0.10.14 616.45 GB 1 ? d2b568fb-13e1-4ff7-a247-3751a8ca49cf RAC1
UN 10.0.10.15 623.23 GB 1 ? fb10e521-8359-409b-bfd8-b27829157a80 RAC1
UN 10.0.10.21 538.56 GB 1 ? 72288b4c-bd1d-4398-9d95-5af312c2f904 RAC2
UN 10.0.10.25 616.63 GB 1 ? 4a8f04ff-a198-44d1-baf4-72cc430cd8a9 RAC2
UN 10.0.10.218 562.98 GB 1 ? c00c375d-90bb-48c5-a8d0-7102a13db468 RAC2
UN 10.0.10.219 632.58 GB 1 ? 1e2ea144-35bd-412b-89b5-41544a347a75 RAC2
UN 10.0.10.220 746.85 GB 1 ? d40f59c1-430a-4d96-9d7e-1e846b8eb1fc RAC2
UN 10.0.10.221 575.89 GB 1 ? 7e407d6b-2bd5-43b4-9116-96ee72a926b2 RAC2
UN 10.0.10.222 639.98 GB 1 ? bfd04ab8-7679-4474-8d47-984950bdd2c7 RAC1
UN 10.0.10.223 652.58 GB 1 ? 6366cd3e-7910-40bb-8a12-926c53adf95b RAC1
这个断言的代码在这里:
- 在查看
system.local
或system.peers
表时,没有明显的模式不匹配。 nodetool describecluster
从某些节点返回UNREACHABLE
你可能达到64K最大密钥大小限制,http://wiki.apache.org/cassandra/FAQ#max_key_size
寻找你的应用程序代码,可能有人发送cassandra 371205字节长数据作为主键,也许有人试图破解你的应用程序我不知道,因为不太可能370k数据作为主键是明智的,在你的应用程序代码中限制这一点,
我不知道是否存在任何关于此问题的错误或修复或解决方法。
1.检查复制因子。 2.检查不同的一致性级别。 3.大多数配置你可能做错了是每个节点只提供一个令牌。如果每个节点有256个令牌,那么cassandra会将负载分配给每个节点。
以上是关于Cassandra节点无法相互通信,导致ReadTimeout的主要内容,如果未能解决你的问题,请参考以下文章
Cassandra - 开发中心无法连接到 Cassandra 集群的所有 3 个节点
Cassandra - Dev中心无法连接到Cassandra集群的所有3个节点
将节点添加到 Cassandra 集群会导致现有节点上的 CPU 过载