ZBLOG

如何检查redis 哨兵模式的状态

检查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

重点关注:

  • flagsmaster表示正常,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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24407

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?