Redis进阶之高可用
一、redis的高可用方案
1、主从模式:从会向主库同步数据库,从库与主库数据一样
特点:master库挂掉,需要自己修复、手动指定新的master,可用性不高
使用场景:基本不用
2、哨兵模式:就是在主从基础之上,附加了一套哨兵集群,哨兵集群用来监控并自动恢复主从
特点:
一主多从
主挂掉后,哨兵集群会发现并从剩余的从库里选出一个新主,然后其他从都指向新主 哨兵在主从的基础上做的,所以哨兵的缺点就是主从的缺点----》数据冗余
使用场景:数据量不是很多、当集群规模不是很大、需要自动容错容灾的时候使用
3、cluster集群模式
既有主从恢复的功能,又有一个非常重要的特点:数据会均匀分布(基于slot槽)
使用场景:数据量比较大、QPS 要求较高的时候使用。
### 高可用方案本身支持读写分离,不需要中间件或者程序自己指定
二、主从模式
redis主从特点(类似mysql的主从)
1、一主多从、主负责写、从负责读
2、没有故障切换(主从恢复)
3、一主节点可以有多个从节点
但是一个从节点只能指唯一一个主节点(废话)
redis主从同步流程:
mysql主从:
1、先全量同步数据
2、再利用binglog日志进行增量同步
redis主从:
1、先全量
基于rdb文件
2、再增量
主库把缓冲区内的增量语句发给从库,来进行增量同步
redis主从部署
规划:
一主两从
master库:192.168.71.112 6379
salve库1:192.168.71.113 6379
salve库2:192.168.71.114 6379
主库配置:#yum安装 /etc/redis/redis.conf
cat > /usr/local/redis/conf/redis.conf << 'EOF'
daemonize yes
bind 0.0.0.0
port 6379
masterauth 123456 #连主库用的密码
requirepass 123456 #自己的密码
#考虑后续主从可能会发生切换,建议无论主从都进行配置且保证密码相同
EOFsystemctl restart redis
从库配置:
cat > /usr/local/redis/conf/redis.conf << 'EOF'
# (1)修改
daemonize yes
bind 0.0.0.0
port 6379
# (2)增加
# 配置主节点的ip和端口
slaveof 192.168.71.112 6379# 从redis2.6开始,从节点默认是只读的
slave-read-only yes# 主节点有登录密码,则必须指定
masterauth 123456
# 建议在从上也设置与主一模一样的密码,这与后续你切主会方便一些,因为无论哪个节点都是一样的密码
requirepass 123456
EOFsystemctl restart redis
查看主从状态
info replication
# 注意:redis 6.x版本与redis3.x版本不兼容
你用centos7.9默认yum安装的就是redis3.x版本,你用centos9默认yum安装的是redis6.x版
master彻底挂了,进行手动切换指定slave1为主
slaveof no one # 将 slave1 变成新的 master(slave1)
slaveof 192.168.71.114 6379 # 将机器的主节点指向的这个新的 master(slave2)
补充:
执行命令slaveof no one命令,可以关闭从服务器的复制功能。同时原来同步的所得的数据集都不会被丢弃。
redis主从同步流程详解:
1、先全量
从库启动后会发送sync请求,主库收到后会制作快照数据,发送给从库导入
2、再增量
在全量同步的过程中,主库会一直记录增量的语句到自己的缓冲区内
待全量全量同步完成,主库会把缓冲区内的语句发给从库,从库进行增量导入
3、后续的过程:
从-------同步--------》主
三、哨兵模式
定义
1、介绍(哨兵是用来管理主从的机制)
哨兵模式是为了解决主从模式无法自动故障切换的问题而诞生的
哨兵模式是在主从模式的基础之上做的、附加了一套哨兵集群
哨兵集群通常是奇数个(超过半数同意master挂掉,最终确定master是挂掉的)
所以主从模式有数据冗余问题,哨兵模式当然也有
2、哨兵节点是什么
哨兵节点是特殊的redis服务,命令名为redis-sentinel,不提供读写服务,主要用来监控redis-server。
3、哨兵节点都做什么?
(1)监控(ping/pong机制)-----》所有的哨兵节点都去监控
(2)自动故障切换 -----------》哨兵节点中的老大来做故障切换
超过半数的哨兵都认为当前master挂掉了,就开始故障切换
从剩余的从里选出一个新主,然把其余的从都指向新主
(3)通知
应用程序---------发布订阅-----------》哨兵集群------管理------》主从
哨兵集群一旦切过主,就会把新主的地址推送给应用程序
4、哨兵模式下,应用程序应该如何对接redis
见上
5、应用与哨兵之间:基于发布订阅来获取redis集群状态
部署
6、哨兵集群部署
6.1 规划:
一主两从:
master库:192.168.71.112 6379