Redis(46) 如何搭建Redis哨兵?

搭建 Redis 哨兵(Sentinel)集群,确保 Redis 服务具有高可用性。以下是详细的步骤,从 Redis 安装、配置主从复制到配置和启动 Sentinel 集群,并结合相关的代码示例。

步骤 1:安装 Redis

首先,需要在服务器上安装 Redis。以下以 Linux 系统为例。

sh 复制代码
sudo apt update
sudo apt install redis-server

步骤 2:配置主从复制

配置主节点

创建并编辑主节点配置文件 redis-master.conf

plaintext 复制代码
port 6379
bind 0.0.0.0
dir /var/lib/redis
appendonly yes

启动主节点:

sh 复制代码
redis-server redis-master.conf

配置从节点

创建并编辑从节点配置文件 redis-slave.conf

plaintext 复制代码
port 6380
bind 0.0.0.0
dir /var/lib/redis
appendonly yes
slaveof 127.0.0.1 6379

启动从节点:

sh 复制代码
redis-server redis-slave.conf

步骤 3:配置和启动 Sentinel

创建并编辑 Sentinel 配置文件 sentinel.conf

plaintext 复制代码
port 26379
dir /tmp
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000

启动 Sentinel:

sh 复制代码
redis-sentinel sentinel.conf

以下是 Sentinel 配置文件中各参数的解释:

  • port 26379:指定 Sentinel 监听的端口。
  • dir /tmp:用于保存 Sentinel 配置文件的目录。
  • sentinel monitor <master-name> <ip> <port> <quorum>:定义要监控的主节点,其中 <quorum> 是判断主节点失效所需的 Sentinel 数量。
  • sentinel down-after-milliseconds <master-name> <milliseconds>:定义在多少毫秒之后认为主节点不可用。
  • sentinel parallel-syncs <master-name> <number>:在故障转移时,允许多少个从节点同时与新主节点进行同步。
  • sentinel failover-timeout <master-name> <milliseconds>:故障转移的超时时间。

步骤 4:测试故障转移

为了测试 Sentinel 的故障转移功能,可以手动停止主节点,然后观察 Sentinel 是否能够将从节点提升为新的主节点。

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

观察 Sentinel 日志输出,确认它已经成功将从节点提升为新的主节点。

Java 客户端示例

使用 Jedis 库连接 Redis 哨兵集群,并进行简单的 Redis 操作。

引入 Jedis 库

在 Maven 项目中添加 Jedis 依赖:

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

Java 代码示例

以下 Java 代码展示了如何使用 Jedis 库连接和操作带有 Sentinel 的 Redis 集群。

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

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

public class RedisSentinelExample {
    private static final String MASTER_NAME = "mymaster";

    public static void main(String[] args) {
        // 定义 Sentinel 节点
        Set<String> sentinels = new HashSet<>();
        sentinels.add("127.0.0.1:26379");

        // 创建 JedisSentinelPool 对象
        try (JedisSentinelPool sentinelPool = new JedisSentinelPool(MASTER_NAME, sentinels);
             Jedis jedis = sentinelPool.getResource()) {

            // Perform Redis operations
            jedis.set("mykey", "myvalue");
            String value = jedis.get("mykey");
            System.out.println("mykey: " + value);

            // Output details of connected master node
            System.out.println("Connected to master: " + jedis.getClient().getHost() + ":" + jedis.getClient().getPort());
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}

总结

通过上述步骤和代码示例,成功搭建了 Redis 哨兵集群,实现了高可用性的 Redis 服务。主要步骤包含:

  1. 安装 Redis。
  2. 配置主从复制。
  3. 配置和启动 Sentinel。
  4. 测试故障转移。
  5. 使用 Jedis 库连接和操作 Redis 哨兵集群。

这些步骤确保了 Redis 服务的高可用性和可靠性,在主节点出现故障时,Sentinel 能够自动进行故障转移,提升从节点为新的主节点,保证系统的正常运行。

相关推荐
JIngJaneIL18 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
小信啊啊18 小时前
Go语言切片slice
开发语言·后端·golang
Victor35620 小时前
Netty(20)如何实现基于Netty的WebSocket服务器?
后端
缘不易20 小时前
Springboot 整合JustAuth实现gitee授权登录
spring boot·后端·gitee
Kiri霧20 小时前
Range循环和切片
前端·后端·学习·golang
WizLC20 小时前
【Java】各种IO流知识详解
java·开发语言·后端·spring·intellij idea
Victor35620 小时前
Netty(19)Netty的性能优化手段有哪些?
后端
爬山算法21 小时前
Netty(15)Netty的线程模型是什么?它有哪些线程池类型?
java·后端
白宇横流学长21 小时前
基于SpringBoot实现的冬奥会科普平台设计与实现【源码+文档】
java·spring boot·后端
Python编程学习圈1 天前
Asciinema - 终端日志记录神器,开发者的福音
后端