架构Redis主从哨兵架构保障高可用(redis的主从哨兵)

2023-05-17 03:26:14 架构 哨兵 主从

架构Redis主从哨兵架构保障高可用

Redis是一款开源的内存数据结构存储系统,它支持常见的数据结构,如string、list、set、hash等。而且Redis还支持多种数据持久化方式,例如RDB和AOF,可以在断电等异常情况下保证数据的不丢失。但是,由于Redis在内存中存储数据,当主节点发生故障时,从节点无法接管主节点,造成数据的不可用。因此,对于Redis应用来说,高可用性非常重要。

为了保障Redis的高可用性,我们可以采用主从复制和哨兵架构。主从复制是指将一个Redis实例的数据复制到多个Redis从节点上,从节点只能读取数据并不能写入数据,同时Redis主节点挂掉时,Redis从节点可以自动接管主节点的写入请求。哨兵架构是在主从复制基础上加上监控和自动故障转移,一旦主节点出现故障,哨兵会自动将从节点提升为主节点,保证Redis的高可用性。

下面是一个典型的Redis主从哨兵架构:

![](https://img-blog.csdn.net/20180522152000556?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0l0aWxpdGFyeV9uYXZlcnlz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/100)

仔细观察上图可以看到,整个集群中由一主两从三哨兵组成,其中主节点负责读写,从节点只负责读,哨兵节点负责监控集群中各节点的状态,并在主节点故障的情况下进行自动切换。

接下来,我们将详细介绍如何构建一个Redis主从哨兵架构。

一、安装Redis

首先下载Redis,解压之后进入redis目录,执行以下命令安装:

make
make install

二、配置Redis主从节点

修改主节点的配置文件`redis.conf`,配置文件位置在Redis的安装目录下,找到以下几个配置:

port 6379 # 端口
bind 127.0.0.1 # 绑定IP,建议指定本机IP或0.0.0.0
daemonize yes # 以守护进程模式运行
pidfile /var/run/redis_6379.pid # PID文件位置
logfile "/var/log/redis_6379.log" # 日志文件位置

修改完毕保存,运行Redis:

redis-server /path/to/redis.conf

新开一个终端,连接到Redis主节点,并执行以下命令将该Redis节点设置为主节点:

127.0.0.1:6379> CONFIG SET protected-mode no # 关闭保护模式
OK
127.0.0.1:6379> SLAVEOF NO ONE # 取消从节点配置
OK

接下来在两个从节点上复制主节点的配置文件`redis.conf`,并修改以下配置:

port 6380 # 端口,需与主节点不同
bind 127.0.0.1 # 绑定IP,建议指定本机IP或0.0.0.0
daemonize yes # 以守护进程模式运行
pidfile /var/run/redis_6380.pid # PID文件位置
logfile "/var/log/redis_6380.log" # 日志文件位置
slaveof 127.0.0.1 6379 # 主从复制配置

修改完毕保存,运行Redis:

redis-server /path/to/redis.conf

三、配置Redis哨兵节点

在第一步中,我们已经配置了三个节点的配置文件,只需要将三个节点的配置文件中的端口号和日志文件名按照顺序修改即可。以配置文件sentinel1.conf为例,修改以下配置:

port 26379 # 端口
daemonize yes # 以守护进程模式运行
pidfile /var/run/redis-sentinel_26379.pid # PID文件位置
logfile "/var/log/redis-sentinel_26379.log" # 日志文件位置
sentinel monitor mymaster 127.0.0.1 6379 2 # 配置主节点
sentinel down-after-milliseconds mymaster 3000 # 主节点超时时间
sentinel flover-timeout mymaster 180000 # 自动故障转移时间

修改完毕保存,运行Redis哨兵:

redis-server /path/to/sentinel1.conf --sentinel

然后在另外两个哨兵节点上复制样例哨兵配置文件,修改其中端口和日志文件名,启动哨兵。最后使用以下命令检查哨兵的状态:

127.0.0.1:26379> SENTINEL masters
1) 1) "name"
2) "mymaster"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6379"
...

以上就是Redis主从哨兵架构的步骤,有了它可以保证Redis的高可用,同时也可以缓解访问压力,提高应用程序的性能。

相关文章