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 能够自动进行故障转移,提升从节点为新的主节点,保证系统的正常运行。

相关推荐
追逐时光者4 分钟前
一款开源免费、组件丰富的 WPF UI 控件库,提供了 100 多款常用控件!
后端·.net
小旺不正经5 分钟前
数据库表实现账号池管理
数据库·后端·算法
Penge6666 分钟前
结构体内存计算:从字段到中文字符深挖
后端
流星稍逝7 分钟前
后端实现增删改查功能
后端
s9123601017 分钟前
[rust] temporary value dropped while borrowed
开发语言·后端·rust
流星稍逝9 分钟前
前端&后端解决跨域的方法
前端·后端
滴水寸金11 分钟前
优雅地构建动态、复杂且安全的 SQL 查询
后端
滴水寸金14 分钟前
讯飞语音转文本:定位阅读进度与高亮文本的技术实现
后端
karry_k18 分钟前
Java的类加载器
后端
ZZHHWW22 分钟前
高性能架构01 -- 开篇
后端·架构