Cassandra启用PasswordAuthenticator后出现连接超时与CPU满载问题
解决方案
- 修正system_auth键空间复制策略(核心根因)
默认system_auth键空间的复制因子为1,3节点集群下绝大多数节点本地没有完整的角色、权限、认证数据,每次身份校验都需要跨节点查询,请求量过大时直接打满CPU。执行以下命令调整复制策略:
ALTER KEYSPACE system_auth WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };
如果是多机房部署,改用NetworkTopologyStrategy为每个机房单独设置复制因子,修改完成后执行全量修复:
nodetool repair -full system_auth
确保所有节点都同步了完整的system_auth数据。
- 优化认证缓存配置避免雪崩
你当前将所有缓存有效期与更新间隔都设为相同的60秒,会导致所有缓存同时过期,瞬间产生大量system_auth查询请求,触发缓存雪崩。建议调整配置为有效期大于更新间隔,后台异步提前刷新缓存,避免同时失效的尖峰:
roles_validity_in_ms: 120000 roles_update_interval_in_ms: 60000 permissions_validity_in_ms: 120000 permissions_update_interval_in_ms: 60000 credentials_validity_in_ms: 120000 credentials_update_interval_in_ms: 60000
如果角色变更频率极低,可进一步将有效期上调至5-10分钟,大幅降低system_auth查询频率。
检查客户端连接配置
确认客户端的认证重试次数未设置过高,避免连接失败时大量重试请求放大负载。同时建议升级Cassandra驱动到对应大版本的最新稳定版,旧版本驱动存在开启密码认证时的连接泄漏已知问题。临时缓解连接超时
如果调整完上述配置后仍偶发连接超时,可临时调大cassandra.yaml中的native_transport_max_threads参数,增加处理客户端连接请求的线程数,避免请求排队超时。
内容的提问来源于stack exchange,提问作者Vitul Goyal
相关产品推荐
相关产品推荐

