一、sentinel介绍
Sentinel作用:
1):Master状态检测
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
Sentinel工作方式:
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-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 的客观下线状态就会被移除。
8):若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。
主观下线和客观下线
主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.
通俗来讲就是:
redis的sentinel系统用来管理多个redis服务器,可以实现一个功能上实现HA的集群。该系统主要执行三个任务:
①监控( Monitoring ): Redis Sentinel实时监控主服务器和从服务器运行状态。
②提醒(notification): 当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知
一个简单的主从结构加sentinel集群的架构图如下:
上图是一主两从节点,sentinel集群之间会互相通信,沟通交流redis节点的状态,做出相应的判断并进行处理,这里的主观下线状态和客观下线状态是比较重要的状态,它们决定了是否进行故障转移 可以 通过订阅指定的频道信息,当服务器出现故障得时候通知管理员 客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器,你不可以使用 PUBLISH 命令向这个服务器发送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。
一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。
二、搭建redis-sentinel 集群环境1、下载redis编译安装包:redis-2.8.19.tar.gz,然后解压缩进行编译安装。将redis安装到/opt/redis目录下。
[root@idxs21-108 redis]# mkdir bin #redis脚本文件
[root@idxs21-108 redis]# mkdir conf #redis配置文件
[root@idxs21-108 redis]# mkdir data #redis的本地数据存放
[root@idxs21-108 redis]# mkdir logs #redis日志文件
[root@idxs21-108 redis]# tar zxvf redis-2.8.19.tar.gz cd redis-2.8.19
[root@idxs21-108 redis]# make PREFIX=/opt/redis install cp *.conf /opt/redis/conf #把安装源文件中的.conf配置文件拷贝一份到安装目录下的conf目录中。
[root@idxs21-108 redis]# cd /opt/redis/conf cp redis.cof redis.conf.bak cp sentinel.conf sentinel.conf.bak
2.在安装redis成功后,可以在/opt/redis/bin目录下看到以下内容:
[root@idxs21-108 bin]# ll
total 15220
-rwxr-xr-x 1 root root 4586251 Mar 10 2015 redis-benchmark
-rwxr-xr-x 1 root root 22177 Mar 10 2015 redis-check-aof
-rwxr-xr-x 1 root root 45387 Mar 10 2015 redis-check-dump
-rwxr-xr-x 1 root root 4679739 Mar 10 2015 redis-cli
lrwxrwxrwx 1 root root 27 Jun 20 15:59 redis-sentinel -> /opt/redis/bin/redis-server
-rwxr-xr-x 1 root root 6241748 Mar 10 2015 redis-server
3、修改master机器配置文件(这里直接使用的sed命令做的替换):