IP:192.168.225.12八、192.168.225.129
环境:centos7
版本:redis-3.2.10html
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行如下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运做正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 能够经过 API 向管理员或者其余应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工做时, Sentinel 会开始一次自动故障迁移操做, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其余从服务器改成复制新的主服务器; 当客户端试图链接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可使用新主服务器代替失效服务器。redis
Redis Sentinel 是一个分布式系统, 你能够在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪一个从服务器做为新的主服务器。
虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你能够在启动一个普通 Redis 服务器时经过给定 –sentinel 选项来启动 Redis Sentinel 。vim
详细配置见文章redis主从配置
128/129上面安装路径:/usr/local/redis
数据路径:/data/redis637九、/data/redis6380centos
配置环境:api
Master:192.168.225.128:6379 Slave1:192.168.225.129:6380 Slave2:192.168.225.129:6381
确认redis节点是否启动服务器
[root@vm-test1 redis]# redis-cli -h 192.168.225.128 -p 6379 ping PONG
主redis的info replication信息架构
# Replication role:master connected_slaves:2 slave0:ip=192.168.225.129,port=6380,state=online,offset=44477,lag=1 slave1:ip=192.168.225.129,port=6381,state=online,offset=44477,lag=1 master_repl_offset:44477 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:44476
# cd /usr/local/redis # cp sentinel.conf sentinel-1.conf # vim sentinel-1.conf 修改成 sentinel monitor mymaster 192.168.225.128 6379 2
说明:mymaster不须要是主机名,可本身定义,只须要先后保持一致
Sentinel-1节点须要监控192.168.225.128:6379这个主节点,2表明判断主节点失败至少须要2个sentinel节点赞成,mymaster是主节点别名。
2这个值定义为几的标准:通常建议将其设置为sentinel节点的一半加1运维
方法1: # cd /usr/local/redis/ # bin/redis-server sentinel-1.conf --sentinel 方法2: # cd /usr/local/redis/ # bin/redis-sentinel sentinel-1.conf
两种方式原则上同样分布式
[root@bogon redis]# bin/redis-sentinel sentinel-1.conf & [1] 7187 _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.10 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in sentinel mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 26379 | `-._ `._ / _.-' | PID: 7187 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 7187:X 28 Aug 12:21:29.456 # Sentinel ID is 589d622f9a149e71a49d04431988bc1d726fc87a 7187:X 28 Aug 12:21:29.456 # +monitor master mymaster 192.168.225.128 6379 quorum 2 7187:X 28 Aug 12:21:29.457 * +slave slave 192.168.225.129:6380 192.168.225.129 6380 @ mymaster 192.168.225.128 6379 7187:X 28 Aug 12:21:29.461 * +slave slave 192.168.225.129:6381 192.168.225.129 6381 @ mymaster 192.168.225.128 6379 [root@bogon redis]# ps -ef |grep sentinel root 7187 3100 0 12:21 pts/0 00:00:00 bin/redis-sentinel *:26379 [sentinel] root 7222 3100 0 12:21 pts/0 00:00:00 grep --color sentinel
启动一个sentinel后(启动3个sentinel后sentinels=3)测试
[root@vm-test1 redis]# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.225.128:6379,slaves=2,sentinels=1
3个sentinel启动后,查看sentinel-1.conf,发生了变化,体如今:
1.sentinel节点自动发现了从节点、其他sentinel节点
2.去掉了默认配置,例如:parallel-syncs、failover-timeout参数
3.添加了配置纪元相关参数
port 26379 dir "/data/sentinel-1" sentinel myid 79d2238ec1b78bbc87c63c831628bd075b874c06 sentinel monitor mymaster 192.168.225.128 6379 2 sentinel config-epoch mymaster 0 sentinel leader-epoch mymaster 0 #发现2个slave节点 sentinel known-slave mymaster 192.168.225.129 6380 sentinel known-slave mymaster 192.168.225.129 6381 # 发现2个sentinel节点 sentinel known-sentinel mymaster 192.168.225.128 26381 92e43ffca6742b68f8937b8ae69abdfd3390b56d sentinel known-sentinel mymaster 192.168.225.128 26380 4c9cf1849b1bd7c6d4f5a5b30f986dbac2cc3f99 sentinel current-epoch 0
1.将主reids 129:6379关闭(主129:6379,从128:6380)
2.查看sentinel日志以下:
<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port> +reset-master :主服务器已被重置。 +slave :一个新的从服务器已经被 Sentinel 识别并关联。 +failover-state-reconf-slaves :故障转移状态切换到了 reconf-slaves 状态。 +failover-detected :另外一个 Sentinel 开始了一次故障转移操做,或者一个从服务器转换成了主服务器。 +slave-reconf-sent :领头(leader)的 Sentinel 向实例发送了 [SLAVEOF](/commands/slaveof.html) 命令,为实例设置新的主服务器。 +slave-reconf-inprog :实例正在将本身设置为指定主服务器的从服务器,但相应的同步过程仍未完成。 +slave-reconf-done :从服务器已经成功完成对新主服务器的同步。 -dup-sentinel :对给定主服务器进行监视的一个或多个 Sentinel 已经由于重复出现而被移除 —— 当 Sentinel 实例重启的时候,就会出现这种状况。 +sentinel :一个监视给定主服务器的新 Sentinel 已经被识别并添加。 +sdown :给定的实例如今处于主观下线状态。 -sdown :给定的实例已经再也不处于主观下线状态。 +odown :给定的实例如今处于客观下线状态。 -odown :给定的实例已经再也不处于客观下线状态。 +new-epoch :当前的纪元(epoch)已经被更新。 +try-failover :一个新的故障迁移操做正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by the majority)。 +elected-leader :赢得指定纪元的选举,能够进行故障迁移操做了。 +failover-state-select-slave :故障转移操做如今处于 select-slave 状态 —— Sentinel 正在寻找能够升级为主服务器的从服务器。 no-good-slave :Sentinel 操做未能找到适合进行升级的从服务器。Sentinel 会在一段时间以后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操做。 selected-slave :Sentinel 顺利找到适合进行升级的从服务器。 failover-state-send-slaveof-noone :Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。 failover-end-for-timeout :故障转移由于超时而停止,不过最终全部从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。 failover-end :故障转移操做顺利完成。全部从服务器都开始复制新的主服务器了。 +switch-master :配置变动,主服务器的 IP 和地址已经改变。 这是绝大多数外部用户都关心的信息。 +tilt :进入 tilt 模式。 -tilt :退出 tilt 模式。
port 26379 dir "/data/sentinel-1" sentinel monitor mymaster 192.168.225.128 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 # sentinel auth-pass <master-name> <password> # sentinel notification-script <master-name> <script-path> # sentinel client-reconfig-script <master-name> <script-path>
Port和dir分别表明sentinel节点的端口和工做目录
Sentinel monitor <master-name> <ip><port> <quorum>
sentinel节点会按期监控主节点,
<master-name> sentinel要监控的主节点的名称
IP地址和端口为<ip><port>的主节点
<quorum>表明要断定主节点最终不可达所须要的票数
每一个sentinel节点都要经过按期发送ping命令来判断redis数据节点和其他sentinel节点是否可达,若是超过了该时间,则断定节点不可达。单位:毫秒
Sentinel领导者节点作故障转移操做,选出新的主节点,原来的从节点会向新的主节点发起复制操做,parallel-syncs就是用来限制在一次故障转移以后,每次向新的主节点发起复制操做的从节点的个数。
parallel-syncs=3 3个从节点同时发起复制
parallel-syncs=1 一次只有一个从节点复制,从节点会轮询发起复制
故障转移超时时间,做用于各个阶段。
A) 选出合适从节点
B) 晋升选出的从节点为主节点
C) 命令其他从节点复制新的主节点
D) 等待原主节点恢复后命令它去复制新的主节点
若是sentinel监控的主节点设置了密码,sentinel经过以上命令添加主节点的密码
Sentinel节点是一个特殊的redis,有本身专属的api
进入api客户端
展现全部被监控的主节点状态以及相关统计信息
127.0.0.1:26379> sentinel masters
展现指定<master name>的主节点的状态以及相关统计信息
展现指定<master name>的从节点的状态以及相关统计信息
展现指定<master name>的sentinel节点集合(不包含当前sentinel节点)
返回指定<master name>主节点的ip和端口
127.0.0.1:26379> sentinel get-master-addr-by-name mymaster
1) "192.168.225.128"
2) "6379"
当前sentinel对符合pattern(通配符风格)主节点进行重置,包含清除主节点的相关状态(例如故障转移),从新发现重节点和sentinel节点
eg:sentinel reset mymaster # sentinel-1节点对mymaster节点重置状态
对指定<master name>主节点进行强制故障转移(没有和其余sentinel节点协商)故障转移完成后,其余的sentinel节点按照故障转移的结果更新自身配置(该命令在平常运维中很是有用)
检测当前可达的sentinel节点总数是否达到quorum的个数
取消当前sentinel节点对于指定master name主节点的监控
如:sentinel monitor mymaster-1 192.168.225.128 6379 2
和配置文件中该行命令的做用相同
可动态调整一些参数
quorum down-after-nilliseconds failover-timeout parallel-syncs notification-script client-reconfig-script auth-pass
Sentinel节点之间用来交换对主节点是否下线的判断