【问题标题】:Impact of increasing roles_validity_in_ms & permissions_validity_in_ms增加 roles_validity_in_ms 和 permissions_validity_in_ms 的影响
【发布时间】: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) 缓存。缓存在小范围内非常有效 持续时间。

【问题讨论】:

    标签: cassandra datastax


    【解决方案1】:

    这些参数控制权限和角色列表在当前会话期间保持有效的时间。它在很大程度上取决于您的业务需求 - 如果您的应用程序需要在工作期间“在线”更改角色和权限,那么您需要具有较低的值,如果可以在下次重新连接/重新启动应用程序之前拥有相同的角色和权限,那么你可以去更高的值。

    但您也可以将两者结合使用,如果您将使用 roles_update_interval_in_mscredentials_update_interval_in_mspermissions_update_interval_in_ms 以低于 roles_validity_in_mscredentials_interval_in_mspermissions_interval_in_ms 的值(请参阅 doc )。如果指定了这些值,则角色、权限和凭据将在后台以给定的时间间隔检查,如果请求成功,则更新缓存,如果失败,则仍将使用缓存的值。例如,您可以将 roles_validity_in_ms 设置为 1 天,将 roles_update_interval_in_ms 设置为 10 分钟,这样您就可以相对快速地对给定用户的角色变化做出反应。

    【讨论】:

    • 我还有一个问题 - 有什么方法可以重现此异常吗?我曾尝试使用 cassandra-stress,但没有看到“操作超时”错误。
    • 它可能很难重现 - 你需要让你的机器超载。如果您使用具有多个节点的 cassandra 用户,最有可能发生这种情况,因为对于此用户,使用了 QUORUM CL(如果您为 system_auth 密钥空间设置了正确的复制)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2015-01-20
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多