1.简介
Sentinel是Redis的高可用解决方案,由一个或者多个Sentinel实例,组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替下线的主服务器继续处理命令请求。
2.Sentinel的启动过程
1.初始化服务器
2.将普通Redis服务器使用的代码替换成sentinel专用代码
3.初始化Sentinel状态
4.根据给定的配置文件,初始化Sentinel的监视主服务器列表,
5.创建连向主服务器的网络连接。
3. redis-sentinel工作方式
1.redis服务需要主从部署,一个主节点,至少一个从节点
2.至少部署三个redis-sentinel实例
+----------+ +----------+ +----------+
|sentinel | |sentinel | |sentinel |
+----------+ +----------+ +----------+
| | |
| | |
| | |
+----------------------------------------+
|
+ ------+ | + ------+
| M | -------- ------+------------------| S |
+ ------+ + ------+
每个sentinel都会和Master,Slave以及其他的sentinel进行连接,通讯,检测各实例的存活情况,如果发现Master实例挂掉,则各Sentinel之间协商根据规则选出一个Slave来变成Master,这样就使得redis服务可以继续使用了。
从服务端来讲,redis-sentinel引入解决了单个redis实例挂掉之后不能提供服务的问题,但是对客户端来说由于redis-sentinel的引入,可能导致redis的主从切换,因此直接给客户端redis实例地址的话,则可能因为主从的切换而导致redis地址不是预期的地址,为了完全的实现高可用我们还需要解决这个问题,解决这个问题有以下三种方案:
1.客户端方案
2.LVS方案
3.代理方案
3.1客户端方案
在redis客户端中支持redis-sentinel,通过redis-sentinel来实现redis实例。
优点:
简化服务端部署,只需部署redis实例和redis-sentinel即可以在客户端做配置,实现读写分离
缺点:
1.需要客户端支持redis-sentinel,很多流行的当前在用的客户端都不支持
2.对于已经使用的现有代码,需要修改业务使用客户端部分的代码
3.一些第三方应用使用redis,而我们可能无法修改这种应用的代码。
3.2LVS方案
采用LVS虚IP,在redis-sentinel发生主从切换后也执行虚IP漂移操作。
优点:
对客户端完全透明,现有业务代码无需做任何更改
缺点:
服务器部署稍微复杂,LVS部署需要root权限
LVS自身高可用需要有备机,在隔离部署时备机不能被利用,存在资源浪费
单一虚ip,只能规定为redis主节点或redis从节点,想要支持读写分离的话就得部署多个虚ip,同时需要客户端支持。
网友评论