Cassandra遇ReadTimeoutException及连接关闭问题,求排查建议
Cassandra连接超时与IO等待飙升问题排查方向
客户端错误日志
java.util.concurrent.ExecutionException: org.springframework.cassandra.support.exception.CassandraConnectionFailureException: [DNS/IP:PORT] Connection has been closed; nested exception is com.datastax.driver.core.exceptions.TransportException: [DNS/IP:PORT] Connection has been closed at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357) at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
Cassandra服务端错误日志
ERROR [Native-Transport-Requests-37] 2022-07-19 09:11:38,152 ErrorMessage.java:384 - Unexpected exception during request com.google.common.util.concurrent.UncheckedExecutionException: java.lang.RuntimeException: org.apache.cassandra.exceptions.ReadTimeoutException: Operation timed out - received only 0 responses. at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203) ~[guava-18.0.jar:na] at com.google.common.cache.LocalCache.get(LocalCache.java:3937) ~[guava-18.0.jar:na] at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) ~[guava-18.0.jar:na] at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) ~[guava-18.0.jar:na] at org.apache.cassandra.auth.AuthCache.get(AuthCache.java:108) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.auth.PermissionsCache.getPermissions(PermissionsCache.java:45) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.auth.AuthenticatedUser.getPermissions(AuthenticatedUser.java:104) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.service.ClientState.authorize(ClientState.java:439) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.service.ClientState.checkPermissionOnResourceChain(ClientState.java:368) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.service.ClientState.ensureHasPermission(ClientState.java:345) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.service.ClientState.hasAccess(ClientState.java:332) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.service.ClientState.hasColumnFamilyAccess(ClientState.java:310) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.cql3.statements.ModificationStatement.checkAccess(ModificationStatement.java:211) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:221) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:255) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:240) ~[apache-cassandra-3.11.2.jar:3.11.2] at org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:116) ~[apache-cassandra-3.11.2.jar:3.11.2]
监控指标异常
- CPU IO等待飙升:错误发生时间(9:11左右)CPU IO等待占比急剧上升,其他指标(CPU使用率、内存使用率、每分钟读取查询数等)均正常,且当时无压缩任务运行。
- GC活动异常:8:20左右GC活动出现异常波动,但9:11错误发生时GC状态正常。
- 集群环境:出错节点为VM实例,相邻节点资源利用率较低。
排查方向建议
- 存储层IO瓶颈排查:
- 检查VM宿主机的存储IO性能,确认9:11左右是否出现磁盘IO队列堆积、吞吐量突降或延迟飙升情况,IO等待飙升直接指向存储系统无法及时响应Cassandra读写请求。
- 验证Cassandra数据目录所在磁盘的健康状态,排查是否存在坏块、磁盘控制器故障或存储链路问题。
- 权限缓存相关问题排查:
- 服务端日志显示错误触发于权限缓存加载时的ReadTimeout,检查system_auth库下表的副本分布是否合理,确认出错节点所在副本集是否存在异常。
- 调整权限缓存参数(如
authenticator_cache_validity_in_ms、authorizer_cache_validity_in_ms),缩短缓存过期时间,避免缓存加载时出现长时间阻塞。
- GC后续影响排查:
- 虽9:11时GC正常,但8:20的异常GC可能导致Cassandra内部状态未完全恢复,检查此时段后的线程池、连接池指标是否有异常波动。
- 分析8:20异常GC的原因(如内存溢出、大对象分配),确认是否存在内存配置不合理(堆内存过大、新生代比例不当)导致的隐性性能问题。
- 网络层排查:
- 检查出错节点与其他节点间的网络连通性,排查9:11左右是否出现丢包、延迟升高等情况,权限缓存加载需读取system_auth表,跨节点网络异常会引发ReadTimeout。
- 验证VM虚拟网络配置,排查是否存在宿主机网络资源争抢、虚拟网卡故障等问题。
- Cassandra版本特定问题排查:
- 当前使用Cassandra 3.11.2,查阅该版本官方Bug列表,确认是否存在权限缓存或IO相关已知Bug,考虑升级到3.11.x系列稳定版本(如3.11.14)修复潜在问题。
内容的提问来源于stack exchange,提问作者Anurag Rana
相关产品推荐
相关产品推荐

