检查Redis哨兵模式状态可以通过以下几种方式:
1. 连接哨兵节点查询信息
# 连接哨兵节点(默认端口26379)
redis-cli -h <sentinel-ip> -p 26379
# 查看哨兵基本信息
INFO sentinel
# 查看监控的所有主节点
SENTINEL masters
# 查看特定主节点的详细信息
SENTINEL master <master-name>
# 查看主节点的从节点信息
SENTINEL slaves <master-name>
# 查看其他哨兵节点信息
SENTINEL sentinels <master-name>
2. 关键命令详解
# 获取当前主节点地址
SENTINEL get-master-addr-by-name <master-name>
# 检查仲裁是否满足(多数哨兵存活)
SENTINEL ckquorum <master-name>
# 强制故障转移(谨慎使用)
SENTINEL failover <master-name>
# 重置主节点状态
SENTINEL reset <pattern>
3.重要状态指标检查**
# 检查主节点状态关键字段
127.0.0.1:26379> SENTINEL master mymaster
重点关注:
flags:master表示正常,s_down主观下线,o_down客观下线num-slaves:从节点数量num-other-sentinels:其他哨兵数量quorum:达成客观下线所需的投票数failover-state:故障转移状态
4.系统层面检查**
# 检查哨兵进程状态
ps aux | grep redis-sentinel
# 检查端口监听(哨兵默认端口26379)
netstat -tlnp | grep 26379
# 或使用ss命令
ss -tlnp | grep 26379
# 查看哨兵日志(路径取决于配置)
tail -f /var/log/redis/sentinel.log
tail -f /usr/local/redis/log/sentinel.log
5.自动化检查脚本**
#!/usr/bin/env python3
import redis
import sys
def check_sentinel_status(host='localhost', port=26379, master_name='mymaster'):
try:
sentinel = redis.Redis(host=host, port=port, socket_connect_timeout=5)
# Ping测试连通性
if not sentinel.ping():
print("ERROR: Cannot connect to sentinel")
return False
# 获取主节点信息
master_addr = sentinel.sentinel_get_master_addr_by_name(master_name)
if not master_addr:
print(f"ERROR: Master {master_name} not found")
return False
print(f"✓ Current Master: {master_addr[0]}:{master_addr[1]}")
# 检查主节点详情
master_info = sentinel.sentinel_master(master_name)
print(f"✓ Master status: {master_info['flags']}")
print(f"✓ Connected slaves: {master_info['num-slaves']}")
print(f"✓ Other sentinels: {master_info['num-other-sentinels']}")
# 检查从节点
slaves = sentinel.sentinel_slaves(master_name)
print(f"✓ Slaves count: {len(slaves)}")
# 检查仲裁
try:
quorum_check = sentinel.execute_command('SENTINEL', 'ckquorum', master_name)
print(f"✓ Quorum: {quorum_check.decode()}")
except:
print("✗ Quorum check failed")
return True
except Exception as e:
print(f"ERROR: {e}")
return False
if __name__ == "__main__":
check_sentinel_status()
6.完整健康检查流程**
#!/bin/bash
SENTINEL_HOST="localhost"
SENTINEL_PORT=26379
MASTER_NAME="mymaster"
echo "=== Redis Sentinel Health Check ==="
# 1. 检查哨兵连接
echo "1. Connecting to Sentinel..."
redis-cli -h $SENTINEL_HOST -p $SENTINEL_PORT PING || exit 1
# **2.**获取主节点信息**
echo "2. Getting master info..."
MASTER_ADDR=$(redis-cli -h $SENTINEL_HOST -p $SENTINEL_PORT --raw SENTINEL get-master-addr-by-name $MASTER_NAME)
echo "Current Master: $MASTER_ADDR"
# **3.**检查仲裁**
echo "3. Checking quorum..."
redis-cli -h $SENTINEL_HOST -p $SENTINEL_PORT SENTINEL ckquorum $MASTER_NAME
# **4.**详细状态**
echo "4. Detailed status:"
redis-cli -h $SENTINEL_HOST -p $SENTINEL_PORT SENTNIEL master $MASTER_NAME | grep -E "(ip|port|flags|num-slaves|num-other-sentinels)"
echo "=== Check Complete ==="
通过这些方法可以全面监控Redis哨兵集群的健康状态,及时发现潜在问题。
内容由零声教学AI助手提供,问题来源于学员提问




