KeyDB集群监控:使用redis-cli cluster命令详解
【免费下载链接】KeyDB 项目地址: https://gitcode.com/gh_mirrors/key/KeyDB
你是否在管理KeyDB集群时遇到过节点状态不明、槽位分布混乱的问题?作为分布式内存数据库,KeyDB集群的健康状态直接影响业务稳定性。本文将系统介绍如何使用redis-cli cluster命令集监控集群状态,通过10个核心命令解析,帮助你快速定位问题、优化性能。读完本文你将掌握:节点健康检查、槽位分布分析、数据迁移监控、故障自动恢复验证等实用技能。
集群基础与监控必要性
KeyDB集群采用分布式架构,将16384个哈希槽(Hash Slot)分布在多个主节点(Master)上,每个槽位对应一部分数据。集群状态通过Gossip协议同步,节点间通过集群总线(默认端口+10000)通信[src/cluster.h#L16]。实时监控需关注三个维度:节点存活状态、槽位分配均衡性、数据复制进度。
核心监控命令实战
1. 集群状态概览:cluster info
执行redis-cli cluster info可获取集群关键指标,重点关注:
cluster_state: 应为ok(正常)而非fail(故障)cluster_size: 主节点数量cluster_slots_assigned: 已分配槽位数量(应为16384)cluster_slots_ok: 健康槽位数量
$ redis-cli -h 127.0.0.1 -p 6379 cluster info
cluster_state:ok
cluster_size:3
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
...
2. 节点拓扑发现:cluster nodes
该命令返回所有节点详细信息,包含节点ID、地址、角色、槽位分布等[src/cluster.cpp#L58]。输出格式解析:
<node-id> <ip:port@cluster-port> <flags> <master-id> <ping-sent> <pong-recv> <config-epoch> <link-state> <slots...>
关键标志位(flags)说明:
myself: 当前连接节点master/slave: 节点角色fail/pfail: 故障状态[src/cluster.h#L54-L55]
$ redis-cli cluster nodes | grep -v myself
abc123... 192.168.1.100:6379@16379 master - 0 1620000000000 1 connected 0-5460
def456... 192.168.1.101:6379@16379 master - 0 1620000001000 2 connected 5461-10922
ghi789... 192.168.1.102:6379@16379 master - 0 1620000002000 3 connected 10923-16383
jkl012... 192.168.1.103:6379@16379 slave abc123... 0 1620000003000 4 connected
3. 槽位分布检查:cluster slots
以数组形式返回所有槽位的分配情况,包括主从节点信息。正常集群应满足:
- 槽位连续无重叠
- 每个主节点负责1-16384个槽位
- 从节点正确关联主节点
$ redis-cli cluster slots
1) 1) (integer) 0
2) (integer) 5460
3) 1) "192.168.1.100"
2) (integer) 6379
3) "abc123..."
4) 1) "192.168.1.103"
2) (integer) 6379
3) "jkl012..."
...
4. 故障节点排查:cluster failover
手动触发故障转移,用于验证从节点能否正确升级为主节点。执行前需确保:
- 从节点已连接主节点
- 集群多数节点在线
- 主节点确实不可用
# 在从节点执行
$ redis-cli cluster failover
OK
5. 槽位迁移监控:cluster migrating/slot
当执行槽位迁移时(如扩容/缩容),使用以下命令跟踪进度:
cluster setslot <slot> migrating <target-node-id>: 标记迁出cluster setslot <slot> importing <source-node-id>: 标记迁入cluster setslot <slot> node <node-id>: 完成迁移
迁移过程中,通过cluster nodes检查槽位范围变化,通过cluster info的cluster_migrating_slots指标确认迁移状态。
高级监控技巧
自定义监控脚本
结合redis-cli和awk编写简易监控脚本,监控关键指标:
#!/bin/bash
# 检查所有主节点槽位分布是否均衡
nodes=$(redis-cli cluster nodes | grep master | grep -v myself | awk '{print $1}')
for node in $nodes; do
slots=$(redis-cli cluster nodes | grep $node | awk '{for(i=9;i<=NF;i++)print $i}')
count=0
for slot in $slots; do
if [[ $slot == *-* ]]; then
start=${slot%-*}
end=${slot#*-}
count=$((count + end - start + 1))
else
count=$((count + 1))
fi
done
echo "Node $node: $count slots"
done
性能监控集成
将集群监控指标接入Prometheus,需部署Redis Exporter并添加以下配置:
scrape_configs:
- job_name: 'keydb-cluster'
static_configs:
- targets: ['192.168.1.100:9121', '192.168.1.101:9121', '192.168.1.102:9121']
关键监控指标:
redis_cluster_nodes{state="master"}: 主节点数量redis_cluster_slots_assigned: 已分配槽位redis_cluster_slots_fail: 故障槽位
常见问题诊断流程
当集群状态异常时,建议按以下步骤排查:
- 检查基础连接:
redis-cli -h <node-ip> -p <port> ping - 查看集群状态:
cluster info确认cluster_state - 分析节点健康:
cluster nodes检查fail/pfail节点 - 槽位完整性:
cluster slots验证16384个槽位均已分配 - 日志深入分析:查看节点日志文件(通常在
/var/log/keydb/)
例如,当cluster_state为fail时,常见原因为存在未分配槽位或多数主节点故障。可通过cluster addslots手动分配槽位,或使用cluster forget移除故障节点。
总结与最佳实践
KeyDB集群监控核心在于持续跟踪节点状态、槽位分布和数据流动。日常运维建议:
- 每小时执行
cluster info和cluster nodes检查基础健康度 - 槽位迁移时实时监控
cluster slots和节点日志 - 定期演练故障转移(
cluster failover)验证高可用能力 - 配置监控告警,当
cluster_slots_fail>0或cluster_state=fail时触发通知
通过本文介绍的redis-cli cluster命令集,你可以构建完整的集群监控体系。更多命令细节可参考src/cluster.cpp中的实现代码,或执行redis-cli cluster help查看官方帮助。
下期预告:《KeyDB集群性能优化:从网络延迟到内存分配》,深入探讨集群调优参数与实践案例。
【免费下载链接】KeyDB 项目地址: https://gitcode.com/gh_mirrors/key/KeyDB
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



