我的团队为内部应用程序运行 Cassandra。这是我们的设置:
- 我们正在运行 Cassandra 版本 3.11.13。
- 我们有多个键空间;每个微服务都有自己的微服务。
- 我们在两个 AWS 区域拥有主动-主动架构。
- 每个区域有 4 个节点:2 个种子节点和 2 个成员节点。
- 该拓扑在每个数据中心/区域中的复制因子为 4,因此所有节点都拥有 100% 的数据。
- 我们的读一致性是LOCAL_QUORUM,我们的串行一致性是LOCAL_SERIAL,以保持双活状态。
我们最近发生了一个事件,我们在应用程序客户端的查询期间看到读取超时。它们似乎只与一个键空间相关。经过大量故障排除后,我们发现nodetool repair
问题已得到解决。日志文件中没有任何异常让我们了解到存在数据不一致或损坏,因此我们只能假设是这种情况,因为它已通过修复修复。也没有出现表明磁盘问题的 EC2 硬件或操作系统故障。结果,我们没有真正的根本原因,也不知道将来如何预防这种情况。
我们确实注意到的一个症状是以下日志消息针对该特定键空间不断重复:
INFO [Native-Transport-Requests-1] 2023-07-04 11:53:15,913 MigrationManager.java:286 - Update Keyspace '[REDACTED]' From KeyspaceMetadata ......
修复后该症状消失。
我们想知道是否有人了解可能发生的情况以及随后如何预防它。
值得注意的是,我们没有根据指南进行足够频繁的维修。我们大约每三个月执行一次,但建议匹配gc_grace_seconds
您正在使用的值,目前为 10 天。
同样重要的是要知道,由于我们定期运行批处理作业,我们怀疑事件发生时存在较高程度的负载,但我们没有在 Cassandra 节点上看到压力迹象。