Redis(47)如何配置Redis哨兵?

配置 Redis 哨兵(Sentinel)是一项确保 Redis 集群高可用性的关键任务。下面的指南将详细介绍如何配置 Redis 哨兵,包括配置主从复制、设置 Sentinel 监控以及测试故障转移过程,并结合相关代码示例。

步骤 1:安装 Redis

在所有参与的服务器上安装 Redis。以下以 Ubuntu 系统为例:

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

在每台运行 Redis Sentinel 的机器上,创建并编辑 Sentinel 配置文件 sentinel.conf:

plaintext 复制代码
port 26379
dir /tmp

# Sentinel 监控的主节点名称、IP 和端口
sentinel monitor mymaster 127.0.0.1 6379 2

# 定义 Sentinel 认为主节点不可用的时间(毫秒)
sentinel down-after-milliseconds mymaster 5000

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

# 故障转移超时时间
sentinel failover-timeout mymaster 60000

在每台 Sentinel 服务器上启动 Sentinel:

sh 复制代码
redis-sentinel sentinel.conf

测试故障转移

手动停止主节点,以测试 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()) {

            // 执行 Redis 操作
            jedis.set("mykey", "myvalue");
            String value = jedis.get("mykey");
            System.out.println("mykey: " + value);

            // 输出连接的主节点信息
            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:在所有服务器上安装 Redis。
  2. 配置主从复制:配置主节点和从节点,并启动它们。
  3. 配置和启动 Sentinel:配置 Sentinel,并在每台 Sentinel 服务器上启动它。
  4. 测试故障转移:通过手动停止主节点,验证 Sentinel 的故障转移功能。
  5. 使用 Jedis 库连接和操作 Redis 哨兵集群:在 Java 中使用 Jedis 连接和操作 Redis 哨兵集群。

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

相关推荐
学长毕设10 分钟前
基于springboot的社会志愿者管理系统-附源码
java·spring boot·后端
喵了几个咪11 分钟前
GoWind CMS 拆解:给 NL2SQL 上四把锁——智能问数的安全边界
开发语言·后端·安全·微服务·golang·gowind
用户83562907805129 分钟前
Python 操作 Excel:创建数组公式与 R1C1 公式
后端·python
乘风gg1 小时前
出事了,AI 提效后,老板让我裁员20%
前端·后端·ai编程
Rain的Java大神之路1 小时前
面了 50 个候选人,90% 都挂在 LeetCode 3 无重复字符的最长子串:滑动窗口的 5 个致命坑
java·后端·leetcode
狂师2 小时前
夯爆了!分享几个我在用的,基于业务场景接口串联测试Skill !
人工智能·后端·测试
北京地铁1号线2 小时前
后端开发:缓存(Cache)简介
后端·缓存·cache
IT_陈寒2 小时前
Vue项目实战经验分享:动态组件在Keep-Alive下的缓存陷阱
前端·人工智能·后端
程序猿乐锅2 小时前
【从0-1学习Python | 第九篇】继承
开发语言·后端·python·学习·fastapi
2601_954005622 小时前
11 种触发 × 18 种行为:ricon 交互编排系统全解
前端·后端·物联网·数学建模·信息可视化·交互