Redis搭建主从和哨兵模式
主从原理

-
redis主从原理就是一个读写分离。
-
当slave启动后会向master发送一个ping,告知master我已启动,然后master会将内存中的最新数据全量存储到RDB文件,然后传输给slave。slave将RDB文件先存储到本地硬盘,再读取到内存中。这样主从数据就同步了。
-
当第一次的数据同步过后,再有写命令进入到master,master只用将对应的写命令传给slave。
-
主从中的master必须要开启持久化,如果不开启,当master重启后,master同步slave,就会清空slave中的数据。
无磁盘化数据复制

当你的redis主从服务器,硬盘配置非常差,但网络的配置非常好能有很高的吞吐量,这时我们可以配置redis主从的无磁盘化数据复制。它是通过socket通信,直接将master内存中的数据直接传输到slave内存中,而不用通过磁盘。
- 配置方式,redis.conf文件
![image]()
这里默认是关闭的,将no改成yes就开启了。
主从模式
-
常用:一主二从
![image]()
-
树状模式,用的比较少
![image]()
搭建主从
这里我们搭建一主二从,使用虚拟机准备了三台服务器(主125、从126、从127)
info replication
进入redis-cli,输入命令info replication可以查看本机的主从信息

从设置
-
1、进入redis.conf配置文件,可以搜索replication
![image]()
往下找 -
2、开放replicaof,配置master的IP和端口,开放masterauth,配置master的密码
![image]()
-
3、再往下可以查看到
replica-read-only yes,这个就是只读的配置
![image]()
-
5、配置完成后重启redis就完成了,将两台从服务器配置完,再查看
info replication:
![image]()
Master挂了,如何保证可用性,实现继续读写?解决方案:哨兵模式
哨兵模式
Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是 Redis 高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代已宕机的master继续工作。
哨兵配置
配置文件的位置在redis安装包解压缩后的文件夹里 sentinel.conf
这里我把这个文件拷贝到我放redis.conf的文件夹里cp sentinel.conf /usr/local/redis/
然后我们进入文件夹,编辑这个复制后的文件 vim sentinel.conf
在配置文件中修改下面这些配置:
protected-mode no # 不启用保护,让其他节点都能访问这台哨兵
port 26379 #端口
daemonize yes # 开启后台运行
pidfile /var/run/redis-sentinel.pid # 进程id
logfile /usr/local/redis/sentinel/redis-sentinel.log # 日志文件位置
dir /usr/local/redis/sentinel # 工作空间目录
# 配置哨兵,mymaster是昵称可以自定义 master内网IP master端口 最后一个2代表至少有两个哨兵确认master宕机时才能认定该master失效,其中的一个哨兵就可以去开始执行故障转移
sentinel monitor mymaster 192.168.10.125 6379 2
# 密码
sentinel auth-pass mymaster 123456
# master被sentinel认定为失效的间隔时间
sentinel down-after-milliseconds mymaster 30000
# 剩余的slaves重新和新的master做同步的并行个数
sentinel parallel-syncs mymaster 1
# 主备切换的超时时间,哨兵要去做故障转移,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理
sentinel failover-timeout mymaster 180000
配置完master节点的sentinel.conf文件后,我们可以把这个文件远程拷贝到两台slave节点上
scp sentinel.conf root@192.168.10.126:/usr/local/redis/
scp sentinel.conf root@192.168.10.127:/usr/local/redis/
记得三台节点创建下哨兵的日志文件夹mkdir /usr/local/redis/sentinel
启动哨兵
三台节点哨兵配置完成后,分别启动:
redis-sentinel sentinel.conf
启动后我们可以进行测试,将master停掉,看剩余两台slave中是否会产生新master?
然后我们再将原master启动,看看原master是否还是master?
结论:master挂了以后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来的master恢复后,他会成为slave。

这里127已经变成了master,而125恢复启动后变成了slqve,但我们发现125的连接状态是down,这是因为125之前是master,没有进行"从配置",因此变成slave后无法同步新master的数据。
解决办法:修改125配置文件redis.conf, masterauth 123456将master密码设置上,再重启就行了。
SpringBoot 集成Redis哨兵-配置
spring:
redis:
database: 0 # 设置redis 16个库中的哪一个
password: 123456 # redis密码
sentinel: # 哨兵配置
master: mymaster # 要和哨兵配置文件sentinel.conf里配置的一样
nodes: 192.168.10.125:26379,192.168.10.126:26379,192.168.10.127:26379 # 所有的节点ip和端口








浙公网安备 33010602011771号