Redis(113)Redis的哨兵机制如何使用?

Redis Sentinel 是 Redis 用于主从复制架构中实现高可用性管理的工具。Redis Sentinel 监控主从节点,并在主节点发生故障时自动进行故障转移,确保系统的高可用性。

下面是详细的 Redis Sentinel 使用讲解以及相关代码示例。

1. Redis Sentinel 结构

Redis Sentinel 主要功能包括:

  1. 监控:定期检查主节点和从节点是否正常运行。
  2. 通知:在检测到节点故障时,通知系统管理员或其他应用程序。
  3. 故障转移:当主节点发生故障时,自动将一个从节点提升为主节点。
  4. 配置提供:客户端可以通过 Sentinel 获取当前主节点的信息。

2. 配置 Redis 实例

假设我们有如下 Redis 实例:

  • 主节点:127.0.0.1:6379
  • 从节点1:127.0.0.1:6380
  • 从节点2:127.0.0.1:6381

配置主节点(无需特别配置,启动即可)

bash 复制代码
redis-server --port 6379

配置从节点

在从节点的 redis.conf 文件中添加如下配置:

conf 复制代码
replicaof 127.0.0.1 6379

启动从节点:

bash 复制代码
redis-server --port 6380
redis-server --port 6381

3. 配置 Redis Sentinel

创建三个 Sentinel 配置文件 sentinel-26379.conf、sentinel-26380.conf 和 sentinel-26381.conf。分别监听不同的端口。

sentinel-26379.conf

conf 复制代码
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

sentinel-26380.conf

conf 复制代码
port 26380
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

sentinel-26381.conf

conf 复制代码
port 26381
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

4. 启动 Redis Sentinel

使用以下命令启动 Sentinel 实例:

bash 复制代码
redis-sentinel sentinel-26379.conf
redis-sentinel sentinel-26380.conf
redis-sentinel sentinel-26381.conf

5. 测试 Sentinel

进行故障模拟

我们可以通过关闭主节点来模拟故障:

bash 复制代码
redis-cli -p 6379 shutdown

Sentinel 将检测到主节点故障,并自动进行故障转移,将其中一个从节点提升为新的主节点。

连接并验证新的主节点

使用 Redis Sentinel 命令获取当前主节点信息:

bash 复制代码
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

这将返回新的主节点的 IP 和端口。用这个信息连接新的主节点进行读写操作。

6. Java 示例代码

通过 Jedis 库在 Java 中实现 Sentinel 机制的客户端连接。

Jedis 配置

添加 Jedis 依赖到你的 pom.xml 文件中(如果使用 Maven):

xml 复制代码
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

连接 Redis Sentinel 并进行操作

java 复制代码
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

public class RedisSentinelExample {
    public static void main(String[] args) {
        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");

        try (JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
             Jedis jedis = pool.getResource()) {
            // 写操作
            jedis.set("key1", "value1");
            jedis.set("key2", "value2");

            // 读操作
            String value1 = jedis.get("key1");
            String value2 = jedis.get("key2");
            System.out.println("key1: " + value1);
            System.out.println("key2: " + value2);
        }
    }
}

7. Sentinel 高级配置

修改通知脚本

Sentinel 可以配置通知脚本,在发生故障转移时,执行自定义脚本以通知管理员或执行其他操作。例如:

conf 复制代码
sentinel notification-script mymaster /path/to/notification.sh

客户端重新配置脚本

Sentinel 还可以配置客户端重新配置脚本,当主节点发生变化时,通知相关客户端:

conf 复制代码
sentinel client-reconfig-script mymaster /path/to/reconfig.sh

8. Redis Sentinel 命令

以下是一些常用的 Redis Sentinel 命令:

  • SENTINEL MONITOR <name> <ip> <port> <quorum>:添加一个新的主节点监控。
  • SENTINEL REMOVE <name>:移除一个主节点监控。
  • SENTINEL FAILOVER <name>:手动触发故障转移。
  • SENTINEL SENTINELS <master-name>:列出监控某个主节点的所有 Sentinel 实例。
  • SENTINEL SLAVES <master-name>:列出某个主节点的所有从节点。

总结

Redis Sentinel 提供了一种有效的方式来监控 Redis 主从架构的高可用性,通过自动故障转移确保系统的稳定性。通过上述配置和代码示例,可以轻松实现 Redis Sentinel 机制并验证其功能。在实际生产环境中,可以根据需要进一步优化 Sentinel 配置,以满足具体的业务需求。

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
大勇前进4 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu4 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile4 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白804 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙4 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发4 天前
软件工程SOLID 五大设计原则
后端·软件工程