Sentinel是Redis的高可用性(high availability)解决方案:
由一个或多个 Sentinel 实例(instance)组成的 Sentinel 系统(system)可以监视任意多个主服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
实际上这意味着使用哨兵模式,可以创建一个不用人为干预而应对各种故障的Redis部署。
哨兵模式的功能列表
监听:哨兵不断的检查 master 和 slave 是否正常的运行。
通知:当监控的某台 Redis 实例发生问题时,可以通过API通知系统管理员和其他的应用程序。
自动故障转移:如果一个 master 不正常运行了,哨兵可以启动一个故障转移进程,将一个 slave 升级成为 master,其他的 slave 被重新配置使用新的 master,并且应用程序使用 Redis 服务端通知的新地址。
配置提供者:哨兵作为 Redis 客户端发现的权威来源:客户端连接到哨兵请求当前可靠的 master 的地址。如果发生故障,哨兵将报告新地址。
启动并初始化Sentinel
|
|
当一个Sentinel启动时,它需要执行以下五个步骤:
- 初始化服务器
- 将普通的Redis服务器使用的代码替换成Sentinel专用代码
- 初始化Sentinel状态
- 根据给定的配置文件,初始化Sentinel监视的主服务器列表
- 创建连接主服务器的网络连接
Redis的master和slave主从设定可以通过slaveof命令操作,举个🌰:
通过Mac的HomeBrew安装Redis的话,默认配置文件在/usr/local/etc/redis-sentinel.conf目录
复制出两份相同文件,修改port端口号,简单的配置如下
默认运行在26379端口号,本地服务开多个哨兵的话,将26379改成26380、26381尝试。
启动日志如下:
如果启动三个Sentinel后,你就能从日志中看到已经成功启动了三个Sentinel,并且都是监听同一个Master服务器:
Sentinel的API
通过redis-cli -p 26379登录Sentinel(因为Sentinel就是一个特殊的Redis服务器)
检查master是否正常监控
|
|
获取当前master地址
|
|
故障转移测试
关掉Master服务器
Sentinel哨兵的打印日志:
重新启动6379的Redis
从上面可以看出,6379 服务器挂掉后,哨兵可以启动一个故障转移进程,将一个 slave(例如:6380)升级成为master。接着 6379 启动后,哨兵系统会将 6379 设定为 master(6380)的 slave,开始复制 maste r的数据。
通过测试,发现当主服务器出现故障的时候,会自动让从服务器成为主服务器,继续正常的工作,如果挂掉的主服务器重新启动的话,会让它成为新任主服务器的slave,完成故障转移。
还有很多API就不列举了,详细可看第一个参考资料。
小结:
这把学习记录了哨兵系统的简单介绍,还有如何使用,以及它是如何完成故障转移的详细过程,感觉还是好多坑没填🐶
参考资料
[1]Redis哨兵-实现Redis高可用—Redis中文网
[2]Redis设计与实现第二版—黄健宏