导读:本期聚焦于小伙伴创作的《Redis Sentinel高可用部署与配置:手把手教你搭建故障转移监控系统》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Redis Sentinel高可用部署与配置:手把手教你搭建故障转移监控系统》有用,将其分享出去将是对创作者最好的鼓励。

Redis Sentinel的使用方法

Redis Sentinel是Redis官方提供的高可用性解决方案,用于监控Redis主从实例的运行状态,当主节点出现故障时自动完成故障转移,无需人工介入,有效保障Redis服务的可用性。

Redis Sentinel核心功能

Redis Sentinel主要具备以下几项核心能力:

  • 监控:定期检查主节点和从节点的运行状态,判断实例是否可用

  • 通知:当被监控的Redis实例出现问题时,可以通过API向管理员或其他应用发送通知

  • 自动故障转移:当主节点无法正常工作时,Sentinel会自动将一个从节点升级为新的主节点,并让其他从节点重新指向新的主节点

  • 配置提供者:客户端连接Sentinel询问当前可用的主节点地址,Sentinel会返回当前的主节点信息,实现服务发现的动态更新

环境准备与配置

使用Redis Sentinel前需要先部署Redis主从复制环境,假设我们有1个主节点、2个从节点,再部署3个Sentinel节点避免单点故障,节点信息如下:

节点类型IP地址端口说明
Redis主节点127.0.0.16379主节点,负责处理写请求
Redis从节点1127.0.0.16380从节点,复制主节点数据
Redis从节点2127.0.0.16381从节点,复制主节点数据
Sentinel节点1127.0.0.126379监控Redis实例的Sentinel节点
Sentinel节点2127.0.0.126380监控Redis实例的Sentinel节点
Sentinel节点3127.0.0.126381监控Redis实例的Sentinel节点

Redis主从节点配置

主节点使用默认配置即可,从节点需要在配置文件中添加replicaof 127.0.0.1 6379指定主节点地址,或者启动从节点时通过命令行参数指定:

# 启动从节点1,指定主节点为127.0.0.1:6379
redis-server --port 6380 --replicaof 127.0.0.1 6379

# 启动从节点2,指定主节点为127.0.0.1:6379
redis-server --port 6381 --replicaof 127.0.0.1 6379

Sentinel节点配置

Sentinel节点可以通过配置文件启动,以下是Sentinel的基础配置示例,保存为sentinel.conf

# Sentinel端口
port 26379

# 后台运行
daemonize yes

# 日志文件路径
logfile "sentinel_26379.log"

# 监控的主节点名称、IP、端口,2表示至少2个Sentinel节点认为主节点不可用才判定故障
sentinel monitor mymaster 127.0.0.1 6379 2

# 主节点无响应超过30000毫秒(30秒)则判定不可用
sentinel down-after-milliseconds mymaster 30000

# 故障转移时同时向新主节点同步数据的从节点数量,越小故障转移越快
sentinel parallel-syncs mymaster 1

# 故障转移超时时间,单位毫秒
sentinel failover-timeout mymaster 180000

其他两个Sentinel节点只需要修改portlogfile为对应的值即可,其余配置保持一致。

启动Sentinel节点的命令如下:

# 启动Sentinel节点1
redis-sentinel sentinel_26379.conf

# 启动Sentinel节点2,配置文件为sentinel_26380.conf
redis-sentinel sentinel_26380.conf

# 启动Sentinel节点3,配置文件为sentinel_26381.conf
redis-sentinel sentinel_26381.conf

Sentinel基本操作命令

连接Sentinel节点后,可以执行以下常用命令查看状态或进行管理:

  • sentinel masters:查看所有被监控的主节点信息

  • sentinel master <主节点名称>:查看指定主节点的详细信息

  • sentinel slaves <主节点名称>:查看指定主节点的所有从节点信息

  • sentinel sentinels <主节点名称>:查看监控指定主节点的其他Sentinel节点信息

  • sentinel get-master-addr-by-name <主节点名称>:获取当前主节点的IP和端口

  • sentinel failover <主节点名称>:手动触发指定主节点的故障转移

  • sentinel remove <主节点名称>:移除对指定主节点的监控

示例:查看名称为mymaster的主节点地址:

# 连接Sentinel节点
redis-cli -p 26379

# 执行命令获取主节点地址
127.0.0.1:26379> sentinel get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6379"

客户端连接Sentinel

不同编程语言的Redis客户端都提供了对Sentinel的支持,以下是Java和Python的示例:

Java客户端(Jedis)示例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
import java.util.HashSet;
import java.util.Set;

public class SentinelExample {
    public static void main(String[] args) {
        // Sentinel节点集合
        Set<String> sentinels = new HashSet<>();
        sentinels.add("127.0.0.1:26379");
        sentinels.add("127.0.0.1:26380");
        sentinels.add("127.0.0.1:26381");
        
        // 创建Sentinel连接池,指定主节点名称、Sentinel集合、密码(如果没有密码可以省略)
        JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
        
        try (Jedis jedis = pool.getResource()) {
            // 执行Redis操作
            jedis.set("test_key", "sentinel_value");
            String value = jedis.get("test_key");
            System.out.println("获取到的值:" + value);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            pool.close();
        }
    }
}

Python客户端(redis-py)示例

from redis.sentinel import Sentinel

# 初始化Sentinel客户端,传入Sentinel节点列表
sentinel = Sentinel([('127.0.0.1', 26379), ('127.0.0.1', 26380), ('127.0.0.1', 26381)])

# 获取主节点连接,执行写操作
master = sentinel.master_for('mymaster', socket_timeout=0.1)
master.set('test_key', 'sentinel_value')

# 获取从节点连接,执行读操作
slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
value = slave.get('test_key')
print(f"获取到的值:{value.decode('utf-8')}")

注意事项

  • Sentinel节点建议部署奇数个,避免故障判定时出现平票情况

  • Sentinel监控的down-after-milliseconds参数需要根据实际网络情况调整,设置过短容易出现误判,过长则故障发现延迟高

  • 客户端需要支持Sentinel协议,否则无法自动获取更新后的主节点地址

  • 生产环境中Sentinel节点和Redis节点建议部署在不同的服务器上,避免同机器故障导致整体不可用

  • 如果Redis主节点设置了密码,需要在Sentinel配置中添加sentinel auth-pass mymaster <密码>,否则Sentinel无法连接主节点进行监控

RedisSentinel 高可用 故障转移 Redis监控 配置详解

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。