Redis 哨兵模式
本篇主要讲解Redis的哨兵模式,承接上一篇主从复制,解决主从复制的不足之处,依然是1主2从模式
概述
Sentinel(哨兵)是Redis的高可用性解决方案
:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
注意 sentinel 只会去配置需要去监控的主master Redis,它会根据master去寻找对应的 slave
故障切换(failover)的过程
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。
1.Redis 哨兵模式搭建
安装我就不说了。。
1.1 准备3个redis.conf 配置文件
准备搭建 1主 2从 来看看如何搭建Redis 哨兵模式 , 基本配置和 另外一篇 Redis 主从复制大致差不多,多了点配置
首先准备 3个目录 分别存放 master 和两个slave 节点的 配置文件
cd /usr/local/#新建3个目录mkdir reids-mastermkdir redis-slave1mkdir redis-slave2#分别从redis 源码安装目录下 copy 一份 redis.conf 到 上面新建的3个目录下cp /opt/redis-5.0.10/redis.conf /usr/local/redis-mastercp /opt/redis-5.0.10/redis.conf /usr/local/redis-slave1cp /opt/redis-5.0.10/redis.conf /usr/local/redis-slave2
1.2 修改Redis.conf 配置文件
通过配置可以发现 大致配置
requirepass 开启auth认证
masterauth 连接master的认证密码
#修改redis-master 下面的redis.confport 7000bind 0.0.0.0 #开通远程访问requirepass 123456 #配置auth密码masterauth 123456 #当主服务宕机后 恢复的时候 需要去连接 哨兵定义的新的主服务 用的密码 一般这一批哨兵模式中的redis 密码保持一致#修改redis-slave1 下面的redis.confport 7001bind 0.0.0.0 replicaof 192.168.25.101 7000 #配置master节点的 ip 端口 requirepass 123456 #配置auth密码masterauth 123456 #主服务的 认证密码#修改redis-slave2 下面的redis.confport 7002bind 0.0.0.0 replicaof 192.168.25.101 7000 #配置master节点的 ip 端口requirepass 123456masterauth 123456
1.3 配置 sentinel.conf 配置文件
主要配置哨兵的 配置文件,哨兵的配置文件可以从 Redis的源码安装目录 copy sentinel.conf
cd /usr/localmkdir redis-sentinelcp /opt/redis-5.0.10/sentinel.conf /usr/local/redis-sentinel/ #copy 一份 sentinel 配置文件
#禁止保护模式protected-mode no# sentinel monitor 代表监控# mymaster 代表哨兵集群master服务 可以自定义# 192.168.25.101 7000 主redis的 host和port# 1 1代表只有1个或1个以上的哨兵认为主服务器不可用的时候,才会进行failover操作 这里简单设置1,正常可能需要设置3个以上的哨兵sentinel monitor mymaster 192.168.25.101 7000 1 sentinel auth-pass mymaster 123456 #主服务的 auth 密码,上面主Redis的 requirepass 配置的
其他sentinel 配置参数 如图:
2.验证 Sentinel 模式
注意启动的顺序。首先是主机(192.168.25.101)的Redis服务进程,然后启动从机的服务进程,最后启动3个哨兵的服务进程。
我的主从都是在一台虚拟机机上,只是不同的端口
2.2 启动1主2从
启动主 7000
启动 从1 7001
启动 从2 7002
2.2 启动哨兵sentinel
测试原因 只启动了 1个哨兵
#启动 哨兵redis-sentinel sentinel.conf
可以看到 已经能识别对应的 Redis 和 Slave
可以看到 主服务 set name johnny 后 从服务可以收到对应的 数据
2.3 关闭Redis Master 主服务
模拟Master 主服务宕机 ,直接关闭
可以看到当 关了Master 后 Salve 会立即爆出 Connection refused
等待一小会 哨兵监听到,去做故障转移操作
把原来 7000 master 给移除 , 重新投票选择了 7001作为 master
2.4 恢复master
当恢复原来的 maste 7000 后,会被哨兵监控到并且 将其
变成新的主服务 7001的 从服务
哨兵日志
总结
本篇主要讲解 Redis 哨兵模式,用它来解决 主从的不足,是Redis 高可用的解决方案,拥有自动故障转移功能,不过这种模式 依然有不足的地方,也就是当 请求量很大的时候 还是容易把 主Redis 搞崩盘,
那么就有了 Redis Cluster 集群模式
有机会来说说 Redis Cluster 。