Redis 哨兵模式搭建教程
本文通过3台CentOS服务器搭建Redis哨兵高可用集群。介绍了准备环境、安装配置Redis和哨兵的步骤,以及启动、测试数据同步和主节点故障切换的过程,是一份完整的Redis哨兵模式实践指南。
一、介绍
本文实战搭建一主两从三哨兵,通过使用哨兵模式,可以有效避免某台服务器的 Redis 挂掉出现的不可用问题,保障系统的高可用。
本文通过虚拟机搭建的三台 Centos7 服务器进行测试,使用的 Redis 版本为 6.25。
二、准备环境
IP 地址 | 角色 |
---|---|
10.211.55.4 | redis-master,sentinel |
10.211.55.5 | redis-slave1,sentinel |
10.211.55.6 | redis-slave2,sentinel |
三、安装 Redis
本文在一台服务器上展示安装,另外两台同理
3.1、安装 C/C++ 环境,编译 Redis 安装包使用
yum -y install gcc gcc-c++ make
3.2、下载 Redis 安装包
# 切换软件安装目录
cd /usr/local/
# 新建 redis 安装目录
mkdir redis
# 切换到 redis 安装目录
cd redis
# 下载 redis 安装包
wget http://download.redis.io/releases/redis-6.2.5.tar.gz
# 解压 redis 安装包
tar -zxvf redis-6.2.5.tar.gz
3.3、编译 redis
# 进入解压后的 redis 目录
cd redis-6.2.5/
# 编译
make
# 进入编译好的目录(编译成功后 src 目录下会出现编译后的 redis 服务程序 redis-server)
cd src
四、配置 Redis
4.1、配置主节点 & 哨兵
# 进入 Redis 的主目录
cd /usr/local/redis/redis-6.2.5
# 创建工作目录 tmp
mkdir tmp
# 创建日志目录 log
mkdir log
# 编辑 Redis 配置
vim redis.conf
# 编辑哨兵配置
vim sentinel.conf
redis.conf 配置信息如下(这里仅列举了需要修改的地方,其他地方保持默认即可)
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0
# 允许redis后台运行
daemonize yes
# 设置redis日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379.log"
# 设置为no,允许外部网络访问
protected-mode no
# 修改redis监听端口(可以自定义)
port 6379
# pid存放目录
pidfile /var/run/redis_6379.pid
# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp
# 设置redis密码
requirepass 123456
# 主从同步master的密码
masterauth 123456
哨兵的配置如下(这里仅列举了需要修改的地方,其他地方保持默认即可)
# 修改Sentinel监听端口
port 26380
# 允许Sentinel后台运行
daemonize yes
# 设置Sentinel日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379_sentinel.log"
# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp
# Sentinel 监听 redis 主节点, mymaster:master名称可自定义,127.0.0.1 6379 :redis主节点IP和端口,2 :表示多少个Sentinel认为redis主节点失效时,才算真正失效
sentinel monitor mymaster 127.0.0.1 6379 2
# 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒
sentinel down-after-milliseconds mymaster 10000
# 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。
sentinel failover-timeout mymaster 60000
# 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。
sentinel parallel-syncs mymaster 2
# 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同
sentinel auth-pass mymaster 123456
4.2、配置从节点 & 哨兵
这里只演示配置一个从节点,另一个从节点和这个从节点配置一样。
首先需要在从节点的服务器上安装 redis,安装 redis 的方法和在主节点服务器上安装 redis 方法一样。
# 进入 Redis 的主目录
cd /usr/local/redis/redis-6.2.5
# 创建工作目录 tmp
mkdir tmp
# 创建日志目录 log
mkdir log
# 编辑 Redis 配置
vim redis.conf
# 编辑哨兵配置
vim sentinel.conf
redis.conf 配置信息如下(这里比主节点只多了一行,用于追随主节点)
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0
# 允许redis后台运行
daemonize yes
# 设置redis日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379.log"
# 设置为no,允许外部网络访问
protected-mode no
# 修改redis监听端口(可以自定义)
port 6379
# pid存放目录
pidfile /var/run/redis_6379.pid
# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp
# 设置redis密码
requirepass 123456
# 主从同步master的密码
masterauth 123456
# 多了这一行,用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点,Redis5.0前版本可使用slaveof
replicaof 10.211.55.4 6379
哨兵的配置如下(和主节点的配置一样)
# 修改Sentinel监听端口
port 26380
# 允许Sentinel后台运行
daemonize yes
# 设置Sentinel日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379_sentinel.log"
# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp
# Sentinel 监听 redis 主节点, mymaster:master名称可自定义,127.0.0.1 6379 :redis主节点IP和端口,2 :表示多少个Sentinel认为redis主节点失效时,才算真正失效
sentinel monitor mymaster 127.0.0.1 6379 2
# 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒
sentinel down-after-milliseconds mymaster 10000
# 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。
sentinel failover-timeout mymaster 60000
# 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。
sentinel parallel-syncs mymaster 2
# 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同
sentinel auth-pass mymaster 123456
五、启动 Redis 集群
5.1、启动 redis 集群,主 -> 从
启动 redis 命令如下(从节点类似),下面这条命令执行后没有出错,一般就是启动成功了
/usr/local/redis/redis-6.2.5/src/redis-server /usr/local/redis/redis-6.2.5/redis.conf
查看启动是否成功,如果失败可以看下log文件夹下的日志
ps aux | grep redis
查看集群信息
#切换到主库目录下
/usr/local/redis/redis-6.2.5/src
#连接redis
./redis-cli
#验证密码
auth 123456
#查看集群
info replication
5.2、启动哨兵
启动 redis 命令如下(从节点类似),下面这条命令执行后没有出错,一般就是启动成功了
/usr/local/redis/redis-6.2.5/src/redis-sentinel /usr/local/redis/redis-6.2.5/sentinel.conf
查看启动是否成功,如果失败可以看下log文件夹下的日志
ps aux | grep redis
六、哨兵模式测试
6.1、数据同步测试
使用可视化工具在 10.211.55.4 服务器上新增 key:wahaha 的键值对,查看另外两台从服务器是否同步了数据。
6.2、主节点宕机测试
先模拟一下挂掉 redis 主节点。
- 使用 ps aux | grep redis 找到 redis 主节点对应的进程 id
- 使用 kill -9 xxx 杀掉 redis 主节点 id
查看从库数据库的哨兵集群状态
七、SpringBoot 项目使用 demo
要在Spring Boot项目中连接到你搭建的Redis哨兵,你需要使用Spring Data Redis,它提供了对Redis操作的高级抽象。以下是通过Spring Boot连接到Redis哨兵的基本步骤:
7.1、引入依赖
首先,确保你的pom.xml
文件中包含了Spring Data Redis和连接池(如Lettuce或Jedis)的依赖。以Lettuce为例:
<dependencies>
<!-- Spring Boot Starter Data Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Lettuce Core, 用于Redis客户端连接 -->
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
</dependencies>
7.2、配置application.properties
或application.yml
在你的application.properties
或application.yml
文件中,配置哨兵的地址和主节点名称。例如,使用application.yml
配置如下:
spring:
redis:
sentinel:
master: redis-master
nodes:
- 10.211.55.4:26379
- 10.211.55.5:26379
- 10.211.55.6:26379
password: yourPassword # 如果设置了密码
这里,你需要替换yourPassword
为实际的密码(如果你的Redis设置了密码)。
7.3、使用RedisTemplate或ReactiveRedisTemplate
在Spring Boot应用程序中,你可以通过RedisTemplate
或者对于反应式编程的ReactiveRedisTemplate
来操作Redis。
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class RedisComponent {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void setValue(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public String getValue(String key) {
return redisTemplate.opsForValue().get(key);
}
}
八、最后
我是 xiucai,一位后端开发工程师。
如果你对我感兴趣,请移步我的个人博客,进一步了解。
- 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
- 本文首发于个人博客,未经许可禁止转载💌
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)