redis哨兵配置和使用场景

0x1 什么是哨兵模式

Redis Sentinel(哨兵)是Redis的高可用性解决方案之一,它允许Redis集群在主从复制模式下自动故障转移,从而实现高可用性。Redis Sentinel集群通常由多个哨兵和多个Redis实例组成,哨兵的作用是监控Redis主节点和从节点的状态,并在主节点出现故障时,自动将从节点升级为新的主节点,以便维护Redis集群的可用性。

当Redis Sentinel集群中的一个哨兵检测到主节点不可用时,它会向其他哨兵发送通知,以便集群中的所有哨兵都可以达成共识,并选择一个从节点升级为新的主节点。一旦新的主节点被选出,所有哨兵将向客户端广播通知,以便客户端可以重新连接到新的主节点。

Redis Sentinel还可以监控Redis实例的健康状态,如CPU、内存和网络使用情况,以便进行故障排除和性能优化。Redis Sentinel还支持动态配置,如添加或删除Redis实例,以便动态扩展和缩小Redis集群的规模。

0x2 需要什么知识储备

  • redis的使用和redis的配置
  • redis-sentinel命令的使用和配置
  • 熟悉变成语言连接redis的操作

0x3 架构设计

现在只用一台服务器模拟,所以采用统一服务器不同端口的方案

应用ipport
redis127.0.0.16379
redis127.0.0.16380
redis127.0.0.16381
redis-sentinel127.0.0.126379
redis-sentinel127.0.0.126380
redis-sentinel127.0.0.126381

0x4 redis的配置和搭建

要有redis哨兵首先要有redis集群,在哨兵模式下我们一般采用单数个redis实例,这是因为在Redis Sentinel中,故障转移的机制是通过哨兵之间的投票来实现的。当一个哨兵检测到主节点不可用时,它会向其他哨兵发送通知,询问其他哨兵对于进行故障转移的候选从节点的意见,最后根据投票结果选举一个从节点作为新的主节点。

如果使用偶数个Redis实例,则在哨兵之间进行投票时可能会出现平局的情况,从而导致无法进行故障转移。因此,使用单数个Redis实例可以避免这种情况的发生,确保故障转移的可靠性。

同时,使用单数个Redis实例还可以避免主节点和从节点的平衡问题,因为在Redis Sentinel中,每个Redis实例只能拥有一个主节点和多个从节点,如果使用偶数个Redis实例,可能会导致主节点和从节点的数量不均衡,从而影响Redis集群的性能和可用性。

所以在这个试验中,我们使用三个实例,分别监听6379、6380、6381

sudo apt-get install -y redis-server
mv /etc/redis/redis.conf /etc/redis/redis-6379.conf
cp /etc/redis/redis-6379.conf /etc/redis/redis-6380.conf 
cp /etc/redis/redis-6379.conf /etc/redis/redis-6381.conf 

// 创建redis的存储位置
mkdir -p /data/redis/data
mkdir -p /data/redis/log

// 修改redis-6379.conf
port 6379
appendonly yes
dir "/data/redis/data"
appendfilename "6379-appendonly.aof"
logfile "/data/redis/log/redis-server-6379.log"
requirepass "10000"

// 修改redis-6380.conf
port 6380
appendonly yes
dir "/data/redis/data"
appendfilename "6380-appendonly.aof"
replicaof 127.0.0.1 6379
logfile "/data/redis/log/redis-server-6380.log"
requirepass "10000"

// 修改redis-6381.conf
port 6381
appendonly yes
											dir "/data/redis/data"
appendfilename "6381-appendonly.aof"
r**eplicaof 127.0.0.1 6379
logfile "/data/redis/log/redis-server-6381.log"
requirepass "10000"**

修改完成了之后分别启动这个三个实例

// 启动6379
redis-server /etc/redis/redis-6379.conf

// 启动6380
redis-server /etc/redis/redis-6380.conf

// 启动6381
redis-server /etc/redis/redis-6381.conf

这是我们已经启动了三个实例了,而且现在的架构是一主二从,而且redis的密码都是10000,密码的设置必须一致。

0x5 哨兵的搭建和配置

通过上面的操作,我们已经有了三个redis的实例分别监听不同的端口,接下来,我们需要在每个实例所在的服务器上安装Redis哨兵软件。可以通过以下命令安装:

sudo apt-get update
sudo apt-get install redis-sentinel

安装完成后,我们需要创建三个Redis Sentinel配置文件,例如:

// /etc/redis/sentinel-26379.conf
port 26379
dir "/data/redis/log"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
logfile "/data/redis/log/redis-sentinel-26379.log"
// /etc/redis/sentinel-26380.conf
port 26380
dir "/data/redis/log"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
logfile "/data/redis/log/redis-sentinel-26380.log"
// /etc/redis/sentinel-26381.conf
port 26381
dir "/data/redis/log"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
logfile "/data/redis/log/redis-sentinel-26381.log"

在这个配置文件中,我们指定了Redis Sentinel的端口号(26379、26380、26381),以及监控的Redis主节点的IP地址、端口号和需要至少有多少个哨兵达成共识才能进行故障转移等参数。

然后启动redis-sentinel哨兵

// 启动
redis-sentinel /etc/redis/sentinel-26379.conf
redis-sentinel /etc/redis/sentinel-26380.conf
redis-sentinel /etc/redis/sentinel-26381.conf

0x6 验证流程

上面我们已经搭建好哨兵,现在开始进行验证

先进入redis

redis-cli -p 6380 -a 10000

查看当前的主从情况

127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379

可以看到,当前6379端口的redis为主redis,这时候我们关闭这个redis,看是否有其他的redis会自动升级为主redis

// 关闭6379redis
redis-cli -p 6379 -a 10000 shutdown

// 重新在6380连接中查看
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381

这时候我们发现6381经过投票之后升为主redis了,这说明我们的redis哨兵高可用已经生效。

0x7 总结

redis在互联网应用中十分常见,经常充当一些关键的角色,保证redis的高可用十分重要,这些方面还是需要多思考学习,如果在阅读过程中有什么疑惑,欢迎留言或者咨询博主。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值