Redis哨兵模式
**前言:**Redis的主从模式虽然能够减轻Redis各个节点服务器的压力,但是一旦主数据库宕机之后就无法再为用户提供写服务,因为从数据库都是用来读写的。这样的话就无法实现Redis的高可用,解决方案就是使用哨兵模式或者使用Redis-Cluster集群来实现Redis的高可用。
Redis哨兵模式:
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案
特点: 哨兵是一个独立的进程,它会独立运行。哨兵启动之后会监控多个master-slave集群。当主服务器master宕机之后,哨兵进程会在当前master的从数据库slave集群中进行选举,选择其中一个slave转换为master进行故障转移操作,将从数据库切换为主数据库继续为用户服务。
Sentinel工作方式(每个Sentinel实例都执行的定时任务)
1)每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个PING命令。
2)如果一个实例(instance)距离最后一次有效回复PING命令的时间超过 own-after-milliseconds 选项所指定的值,则这个实例会被Sentinel标记为主观下线。
3)如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4)当有足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态,则Master会被标记为客观下线。
5)在一般情况下,每个Sentinel 会以每10秒一次的频率向它已知的所有Master,Slave发送 INFO 命令。
6)当Master被Sentinel标记为客观下线时,Sentinel 向下线的 Master 的所有Slave发送 INFO命令的频率会从10秒一次改为每秒一次。
7)若没有足够数量的Sentinel同意Master已经下线,Master的客观下线状态就会被移除。 若 Master重新向Sentinel 的PING命令返回有效回复,Master的主观下线状态就会被移除。
哨兵模式的配置编写sentinel.conf:
主从数据库的配置都一样
# 禁止保护模式
protected-mode no
#哨兵端口
port 26379
#是否后台启动
daemonize yes
#哨兵进程文件
pidfile /var/run/redis-sentinel.pid
#哨兵日志存放位置和文件名称
logfile /usr/local/redis/sentinel/sentinel.log
# sentinel announce-ip <ip>
# sentinel announce-port <port>
#哨兵工作空间
dir /usr/local/redis/sentinel
#这里着重介绍一下最后的那个‘2’
#这个参数是进行客观下线的一个依据,意思是至少有 quorum 个sentinel
#主观的认为这个master有故障,才会对这个master进行下线以及故障转移。
sentinel monitor mymaster 192.168.181.128 6379 2
# sentinel auth-pass定义服务的密码,我没有配置密码所以配置该项
# sentinel auth-pass <master-name> <password>
#这个配置其实就是进行主观下线的一个依据,masterName这个参数不用说了,timeout是一个毫秒值,
#表示:如果这台sentinel超过timeout这个时间都无法连通master包括slave(slave不需要客观下线,因为不需要故障转移)的话
#就会主观认为该master已经下线(实际下线需要客观下线的判断通过才会下线)
sentinel down-after-milliseconds mymaster 10000
# requirepass <password>
sentinel parallel-syncs mymaster 1
# Default is 3 minutes.
sentinel failover-timeout mymaster 180000
# to get the program executed.
sentinel deny-scripts-reconfig yes
创建配置文件里面配置好的文件夹
mkdir /usr/local/redis/sentinel -p
配置好之后就要进行启动:
启动redis–>启动哨兵
哨兵启动命令:
redis-sentinel sentinel.conf
查看进程是否启动成功
手动关闭master后查看slave发现哨兵模式生效:
springBoot配置哨兵模式:
redis:
database: 12
password:
sentinel:
#哨兵配置文件配置的主数据库名称
master: mymaster
#哨兵节点信息ip:哨兵端口
nodes: 192.168.181.128:26379,192.168.181.129:26379
【Redis-Series】:
一、Linux生产环境安装部署Redis二、Redis的两种持久化机制RDB/AOF
三、Redis的主从复制原理以及实现(图文详解)
五、Redis-Cluster集群模式讲解及SpringBoot配置(图文详解)
六、Redis击穿、穿透、雪崩讲解以及解决方案