【发布时间】:2020-02-02 15:00:25
【问题描述】:
我们在 3 节点 Cassandra 集群中看到很多操作超时异常。下面是错误堆栈的一部分。
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.PermissionsCache.getPermissions(PermissionsCache.java:72) ~[apache-cassandra-3.0.9.jar:3.0.9]
Caused by: java.lang.RuntimeException: org.apache.cassandra.exceptions.ReadTimeoutException: Operation timed out - received only 0 responses.
at org.apache.cassandra.auth.CassandraRoleManager.getRole(CassandraRoleManager.java:489) ~[apache-cassandra-3.0.9.jar:3.0.9]
at org.apache.cassandra.auth.CassandraRoleManager.isSuper(CassandraRoleManager.java:293) ~[apache-cassandra-3.0.9.jar:3.0.9]
at org.apache.cassandra.auth.Roles.hasSuperuserStatus(Roles.java:52) ~[apache-cassandra-3.0.9.jar:3.0.9]
at org.apache.cassandra.auth.AuthenticatedUser.isSuper(AuthenticatedUser.java:71) ~[apache-cassandra-3.0.9.jar:3.0.9]
at org.apache.cassandra.auth.CassandraAuthorizer.authorize(CassandraAuthorizer.java:76) ~[apache-cassandra-3.0.9.jar:3.0.9]
每次我们看到与 PermissionsCache 或 CassandraRoleManager 相关的异常时。经过少量研究,我找到了增加roles_validity_in_ms 和permissions_validity_in_ms 的解决方案。感谢Enable one time Cassandra Authentication and Authorization check and cache it forever
这里的问题是增加这个值有什么影响? Datastax 文档说缓存在短时间内有效。
缓存中的权限保持有效多长时间以管理性能 权限查询的影响。获取权限可以是资源 密集的。将缓存有效期设置为您的安全容限。 缓存用于标准身份验证和行级 访问控制 (RLAC) 缓存。缓存在小范围内非常有效 持续时间。
【问题讨论】: