📦 Redis Cluster Analyzer — Redis 集群分析器
v1.0.0分析Redis Sentinel和Cluster配置以实现高可用性、性能和内存效率。检查哨兵拓扑,集群槽分配...
运行时依赖
安装命令
点击复制技能文档
Redis 集群分析器 分析 Redis Sentinel 和集群配置以实现高可用性、性能和内存效率。 审查哨兵拓扑、集群槽分配、复制健康状况、内存策略、持久性设置、连接池和键设计模式。 充当高级基础设施工程师,审计您的 Redis 部署以确保生产就绪。
使用 在需要审查 Redis 配置、验证高可用性设置、优化内存使用或排除故障转移问题时调用此技能。
基本调用: 分析 /etc/redis/ 中的 Redis 配置文件 审查此 Redis Sentinel 设置以实现高可用性 审查 Redis 集群配置以确保生产就绪
专注分析: 检查内存策略和驱逐策略 审查哨兵故障转移配置 审查集群槽分配以查找热点 分析连接池设置
代理读取 Redis 配置文件、哨兵配置、集群节点定义和应用程序连接代码,然后生成综合质量报告。
工作原理 步骤 1:发现和解析 Redis 配置 代理定位所有 Redis 相关配置: # 查找 Redis 配置文件 find /etc/redis/ -name ".conf" -type f find /path/to/project/ -name "redis.conf" -o -name "sentinel.conf" # 查找应用程序 Redis 连接代码 grep -rl "Redis\|redis\|ioredis\|redis-py\|RedisCluster" /path/to/app/ --include=".py" --include=".ts" --include=".js" --include="*.go" # 检查运行中的 Redis 进程 redis-cli INFO server 2>/dev/null redis-cli CLUSTER INFO 2>/dev/null redis-cli SENTINEL masters 2>/dev/null
代理解析每个配置以提取: 服务器配置(bind、port、requirepass、maxclients) 内存设置(maxmemory、maxmemory-policy、lazyfree) 持久性(RDB 快照、AOF、混合) 复制(replica-of、repl-backlog-size、min-replicas) 哨兵拓扑(masters、quorum、failover-timeout) 集群设置(cluster-enabled、node-timeout、migration-barrier) 连接池配置(从应用程序代码) 键模式(TTL、命名约定、数据结构)
步骤 2:审查哨兵配置 对于 Redis 哨兵部署,代理检查 HA 拓扑: 哨兵拓扑分析: 哨兵:3 个节点 sentinel-1:10.0.1.10:26379 sentinel-2:10.0.1.11:26379 sentinel-3:10.0.1.12:26379 监控主节点:2 个 mymaster:10.0.1.20:6379(2 个副本) cachemaster:10.0.1.30:6379(1 个副本) PASS:3 个哨兵 —— 满足最小 quorum 要求(需要 N/2 + 1) PASS:哨兵位于单独的主机上 —— 可以在单节点故障时幸存 FAIL:主节点 "cachemaster" 只有 1 个副本 RISK:如果副本失败,则没有故障转移目标可用 在对单个副本进行维护期间,主节点没有冗余 FIX:为 cachemaster 添加至少 1 个副本 FAIL:哨兵与 Redis 节点共置 sentinel-1(10.0.1.10)同时托管哨兵和 Redis 副本 RISK:节点故障会同时导致哨兵和数据节点故障 FIX:在独立基础设施上运行哨兵
哨兵配置审查: 主节点 "mymaster": sentinel monitor mymaster 10.0.1.20 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1 FAIL:down-after-milliseconds = 5000(5 秒) 过于激进 —— 网络闪烁触发不必要的故障转移 每次故障转移都会导致 ~10 秒的写入不可用性 FIX:sentinel down-after-milliseconds mymaster 30000(30 秒) 平衡检测速度与假阳性故障转移 WARN:failover-timeout = 60000(60 秒) 如果故障转移失败,重试等待 120 秒(2x 超时) 最坏情况下的总停机时间:3+ 分钟 CONSIDER:failover-timeout 180000(3 分钟)用于复杂的重新同步 防止在大数据集同步期间过早的故障转移中止 WARN:parallel-syncs = 1 只有 1 个副本从新主节点同步 对于 3 个副本,完整同步需要 3 倍的单个副本同步时间 FIX:parallel-syncs = 2(如果副本可以处理同步负载) 权衡:更快的恢复与新主节点在同步期间更高的负载 FAIL:没有配置哨兵 auth-pass 哨兵连接到主节点而不进行身份验证 RISK:未经授权的哨兵可以触发故障转移 FIX:sentinel auth-pass mymaster FAIL:没有配置哨兵 notification-script 没有故障转移事件的警报 FIX:sentinel notification-script mymaster /opt/redis/notify.sh 脚本接收:event-type、event-description 钩入 PagerDuty/Slack 以实现运营可见性 FAIL:没有配置哨兵 client-reconfig-script 应用程序不知道主节点更改 FIX:sentinel client-reconfig-script mymaster /opt/redis/reconfig.sh 或:使用哨兵感知客户端库(推荐): redis-py:Redis.from_url("redis+sentinel://...") ioredis:new Redis(...)