哨兵模式
简介
主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因为哨兵应运而生。
哨兵的作用就是监控redis集群的运行状况。特点如下:
sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义
当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master
当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据
sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群
多sentinel配置的时候,sentinel之间也会自动监控
当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心
一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis
sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了
工作机制
每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发送一个 PING 命令
如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被sentinel标记为主观下线。
如果一个master被标记为主观下线,则正在监视这个master的所有sentinel要以每秒一次的频率确认master的确进入了主观下线状态
当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认master的确进入了主观下线状态, 则master会被标记为客观下线
在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave发送 INFO 命令
当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次
若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除;
若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状态就会被移除
注意点
当使用sentinel模式的时候,客户端就不要直接连接Redis,而是连接sentinel的ip和port,由sentinel来提供具体的可提供服务的Redis实现,这样当master节点挂掉以后,sentinel就会感知并将新的master节点提供给使用者。
哨兵监控模式
手动配置哨兵
先将主服务器关闭 kill -9 端口号 查看主服务器是否关闭 ps -aux | grep redis
进入从1服务器
redis-cli -h 127.0.0.1 -p 端口号 输入 slaveof no one 显示ok则说明该从服务器已变为主服务器
进入从2服务器
redis-cli -h 127.0.0.1 -p 端口号 输入 slaveof IP地址 端口号 显示OK说明配置成功
自动哨兵模式
第一步:先找到哨兵的配置文件
在之前创建的文件夹中找到 sentinel.conf 的哨兵文件
第二步:将找到的文件复制三份到/usr/local/redis/etc/
egrep -v “$|#” sentinel.conf > /usr/local/redis/etc/sentinel-26379.conf
将文件名进行更改为sentinel-26379.conf,sentinel-26380.conf,sentinel-26381.conf
第三步:修改三个哨兵的配置文件
vim /sentinel-26379.conf{sentinel-26380.conf,sentinel-26381.conf}
protected-mode no #关闭保护模式,使外网能访问。 port 26379 #修改端口。三份文件分别不同。 daemonize no #修改为后台运行。 pidfile /var/run/redis-sentinel-26370.pid #指定不同pid文件,注意文件夹不存在自己要新建。 logfile "/usr/local/redis/logs/sentinel-26370.pid" #配置哨兵日志文件。 dir "/tmp" #配置哨兵工作路径。 sentinel monitor mymaster 127.0.0.1 8000 2 #配置哨兵需要监控的主节点ip和端口,2表示哨兵数(quorum) sentinel auth-pass mymaster 123 #配置哨兵连接主节点的认证密码。(主节点配置的requirepass)。 sentinel down-after-milliseconds mymaster 5000 #配置多少毫秒后没收到主节点的反馈,则主观认为主节点down了。 sentinel failover-timeout mymaster 30000 #表示如果30秒后,mysater仍没活过来,则启动failover,从剩下的slave中选一个升级为master sentinel parallel-syncs mymaster 1 #parallel-syncs 指定了在执行故障转移时, 最多可以有多少个slave同时对新的master进行同步, 这个数字越小, 完成故障转移所需的时间就越长
第四步:启动哨兵模式
redis-sentinel sentinel-26379.conf
redis-sentinel sentinel-26380.conf
redis-sentinel sentinel-26381.conf
第五步:进行验证环节
cat sentinel-26379.pid
若显示
+sentinel sentinel 5901fffcbc2a0799250f2714851bf84573110ebf 127.0.0.1 26380 @ mymaster 127.0.0.1 8000
即为成功