网上有关redis哨兵模式的介绍、安装部署很多也很完善,本文主要记录自己在安装使用redis哨兵模式中的一些问题过程的记录(比较简单的配置使用,详情的配置使用另行百度)。本文介绍基于windows系统。
Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。
sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。
1、安装启动redis
从官网下载最新版的redis
复制三份,文件夹分别为redis、redis-one,redis-two
redis的安装采用 1主 2从
端口分别为6379(master) 、6380(slave1) 、 6381(slave2)
然后分别修改 对应配置文件 redis.conf
两从redis的配置文件中加入如下配:slaveof 127.0.0.1 6379
分别启动三个redis
可进行测试,当为 主master添加kv时,两从也会更新kv,而两从无法修改,是只读属性
2、安装启动sentinel
1)、创建sentinel配置文件
在redis的三个文件夹 redis、redis-one,redis-two 下 分别创建 三个 sentinel.conf(和 redis.conf同级)配置文件。原版sentinel.conf可从reids官网下载
redis(主): 创建 sentinel.conf (26379)
redis-one(从): 创建 sentinel-one.conf(26479)
redis-two(从): 创建 sentinel-two.conf (26579)
其中 sentinel.conf配置文件如下
port 26379
# Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,
# 而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
sentinel myid c55de8b313f6152d862dbf82bba1ea9f8bd08d6e
# 指定了Sentinel认为Redis实例已经失效所需的毫秒数。
# 当 实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。
# 只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:
# 只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
sentinel monitor mymaster 127.0.0.1 6379 2
# 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel down-after-milliseconds mymaster 6000
# 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
sentinel failover-timeout mymaster 18000
# Generated by CONFIG REWRITE
dir "D:\\tools\\redis\\Redis-x64-3.2.100"
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2
sentinel known-slave mymaster 127.0.0.1 6380
sentinel known-slave mymaster 127.0.0.1 6381
sentinel known-sentinel mymaster 127.0.0.1 26479 35640d07ff229f1ca998d67432a39cb08e788ca0
sentinel known-sentinel mymaster 127.0.0.1 26579 49bf18af8db4df688d4f6b25ebb84f3827d89665
sentinel current-epoch 2
其它sentinel的配置文件同上,只是需要修改如下的ip,端口,id
2)、启动
D:\tools\redis\Redis-x64-3.2.100\redis-server sentinel.conf --sentinel
3) 测试
把master(6379)关掉,测试sentinel能否检测到,并产生新的master
关掉后 sentinel(26379)控制台 日志如下:
已重新产生了新的master,6381作为新的master,6380作为从
因为主6379已断掉不可用了,所以把6379作为从后,sentinel也从6379 关闭。
如果此时 再把 6379 启动,启动日志如下
再启动时 6379 已作为从