概述
监控:不间断的检查主从服务是否如预期一样正常工作
事件通知:对被监视的redis实例的异常,能通知系统管理员,或者以API接口通知其他应用程序。
智能援救:当被监视的主服务异常时,哨兵会智能的把某个从服务提升为主服务,同时其他从服务与新的主服务之间的关系将得到重新的配置。应用程序将通过redis服务端重新得到新的主服务的地址并重新建立连接。
配置服务:客户端可连接哨兵的接口,获得主从服务的相关信息,如果发生改变,哨兵新通知客户端。
哨兵的分布式
哨兵是个分布式系统,通过配置文件可以多个哨兵合作,以实现它的健壮性:
1.某个主服务是否正常,需要通过多个哨兵确认,这样可保证误判的低概率。
2.当哨兵工作的时候,总会有个别哨兵不能正常运行,如个别系统出现故障,所以多个哨兵合作运行,保证了系统的健壮性。
所有的哨兵、redis实例(包括主与从)和客户端相互之间会有交互,这是一个大的分布式系统,在此文档中将由浅入深地介绍哨兵的基础概念,以便更好的理解其基本属性,然后是更复杂的特性,让你理解它是如果精确的工作。
哨兵工作原理说明
- 当哨兵启动时,会监控当前的主机信息.同时获取链接当前主机的从机信息.
- 当哨兵利用心跳检测机制(PING-PONG),检验主机是否正常.如果连续3次发现主机没有响应信息.则开始进行选举.
- 当哨兵选举完成之后.其他的节点都会当做新主机的从.
只要设定待监控的主服务,并给它取一个唯一的名称,从服务会被自动检查到,不需要手动指定。哨兵将更新配置文件,当以下几种情况发生时,1.新的从服务被侦测到,2.当异常发生,有从服务被提升为主服务时,3.新的哨兵被侦测到时。
1.准备
//创建sentinel文件夹
//将redis.conf复制到其中(这里我准备三个)
[root@localhost redis]# cp redis.conf sentinel/6379.conf
[root@localhost redis]# cp redis.conf sentinel/6380.conf
[root@localhost redis]# cp redis.conf sentinel/6381.conf
//将sentinel.conf复制到sentinel中
[root@localhost redis]# cp sentinel.conf sentinel
[root@localhost redis]# cd sentinel
启动它们
通过以下代码设置主机(在两个redis服务器中设置主机)
SLAVEOF 192.168.126.129 6381
(ps:把6379变成了6380的从机)
通过代码查看主从
info replication
2.配置一下方便测试的环境
查看行
:set nu
1).修改保护模式
//把这个注释去掉(因为默认是yes,开启保护模式),如下:
protected-mode no
2).开启后台运行
//改成yes,如下:
daemonize yes
3).修改哨兵的监控
//其中的1表示投票生效的数量(默认是2)
//将路径和生效票数改一下
sentinel monitor mymaster 192.168.126.129 6381 1
4).哨兵宕机之后的选举时间
//如果主机宕机10秒之后开始进行推选.
sentinel down-after-milliseconds mymaster 10000
5.修改哨兵选举的超时时间
//设置成20秒后开始选举
sentinel failover-timeout mymaster 20000
3.启动哨兵
redis-sentinel sentinel.conf
关于哨兵选举平票的说明
如果有多个哨兵进行选举,如果连续3次投票失败,可能引发脑裂现象的发生.
问题: 脑裂现象发生的概率是多大?? 1/8 = 12.5%
解决策略: 只要增加选举的节点的数量,可以有效的降低脑裂现象的发生. 概率论
关于分片哨兵的总结说明
分片:
1.主要的作用实现内存数据的扩容.
2.由于运算发生在业务服务器中,所以执行的效率更高.
3.Redis的分片没有高可用的效果. 如果其中一个节点出现了问题则导致程序运行出错.
哨兵机制:
1.实现Redis高可用,当redis服务器发生宕机的现象时,哨兵可以灵活的监控.实现自动的选举实现 故障的迁移.
2.哨兵中所监控的redis节点中的数据都是相同的. 无法实现海量的数据存储.
3.哨兵虽然可以实现redis的高可用,但是由于哨兵的本身没有实现高可用.所以存在风险.
如果想要最大程度上减少损耗,则建议不要引入第三方的监控