本文主要围绕如下几个方面介绍哨兵
- 哨兵介绍
- 哨兵配置
- 哨兵工作原理
本文实现环境
- centos7.3 redis4.0
- redis工作目录 /usr/local/redis
- 在虚拟机进行模拟操作
Redis哨兵搭建以及工作流程
本文主要围绕如下几个方面介绍哨兵
本文实现环境
一、什么是哨兵
二、哨兵的作用
二、如何配置哨兵
1. 准备工作
2. sentinel.conf配置解读
3. 开始配置
三、哨兵工作原理
1. 监控工作流程
2. 通知工作流程
3. 故障转移原理(本文重点)
四、总结
一、什么是哨兵
先简单说几句我们在配置主从复制时有一种情况就是主节点宕机了,谁来提供服务呢!
当主节点宕机后主从复制就没有存在的意义了,数据为王的时代没有了数据何谈什么高可用。
这个时候就横空出世了一位老大哥名叫哨兵,老大哥说这个问题我来帮你们处理。
既然主节点master作为老大不领你们玩了。我就从你们四个中间再挑选出来一位老大,然后你们跟着他玩。
等不带你们玩的那个老大回来后他的身份就失效了,就不在是你们的老大了。他只能跟着我挑选出来的老大玩。
上边这段对话过程就是我们配置哨兵的意义到底在哪,跟谁玩就是谁给谁数据,知道了哨兵的作用我们就在继续。
最后我们用专业术语来解释一下什么是哨兵。
哨兵,英文名sentinel,是一个分布式系统,用于对主从结构中的每一台服务器进行监控,当主节点出现故障后通过投票机制来挑选新的主节点,并且将所有的从节点连接到新的主节点上。
二、哨兵的作用
上文中我们谈到的对话过程就是哨兵的作用之一自动故障转移。
谈到作用肯定就是这个哨兵到底在工作中到底干了什么事情。我们先用比较干巴的概念描述一下,然后在下文的工作原理会一一谈到。
哨兵的三个作用监控、通知、自动转移故障
- 监控
- 监控谁?支持主从结构的工作一个是主节点一个是从节点,那肯定就是监控这俩个了。
- 监控主节点和从节点是否正常运行
- 检测主节点是否存活,主节点和从节点运行情况
- 通知
哨兵检测的服务器出现问题时,会向其他的哨兵发送通知,哨兵之间就相当于一个微信群,每个哨兵发现的问题都会发在这个群里。
- 自动故障转移
当检测到主节点宕机后,断开与宕机主节点连接的所有从节点,在从节点中选取一个作为主节点,然后将其他的从节点连接到这个最新主节点的上。并且告知客户端最新的服务器地址。
这里有一个注意点,哨兵也是一台redis服务器,只是不对外提供任何服务。
配置哨兵时配置为单数。那么为什么配置哨兵服务器的数量为单数呢?带着这个疑问你会在下文看到你想要的答案。
二、如何配置哨兵
1. 准备工作
这一章我们就开始配置哨兵,前期工作准备。下图就是咔咔的准备工作。开启8个客户端,三个哨兵、一个主节点、俩个从节点、一个主节点客户端、一个从节点客户端。
2. sentinel.conf配置解读
哨兵使用的配置文件是sentinel.conf
我们来对sentinel.conf配置信息进行解读
但是大多数都是注释,这里咔咔给大家提供一个命令来过滤这些无用信息 cat sentinel.conf | grep -v '#' | grep -v '^$'
- port 26379 :对外服务端口号
- dir /tmp:存储哨兵的工作信息
- sentinel monitor mymaster 127.0.0.1 6379 2:监控的是谁,名字可以自定义,后边的2代表的是,如果有俩个哨兵判断这个主节点挂了那这个主节点就挂了,通常设置为哨兵个数一半加一。
- sentinel down-after-milliseconds mymaster 30000:哨兵连接主节点多长时间没有响应就代表挂了。后边30000是毫秒,也就是30秒。
- sentinel parallel-syncs mymaster 1:这个配置项是指在故障转移时,最多有多少个从节点对新的主节点进行同步。这个值越小完成故障转移的时间就越长,这个值越大就意味着越 多的从节点因为同步数据而不可用。
- sentinel failover-timeout mymaster 180000:在进行同步的过程中,多长时间完成算有效,系统默认值是3分钟。
3. 开始配置
使用命令cat sentinel.conf | grep -v '#' | grep -v '^$' > ./data/sentinel-26379.conf把sentinel.conf过滤后的信息移到/usr/local/redis/conf下
然后打开sentinel-26379.conf修改信息存放目录
然后快速的复制俩个哨兵配置文件,端口为26380和26381。sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf
测试主从复制处于正常工作状态,启动三台redis服务器,端口分别为6379、6380、6381
查看主节点信息,是有俩台从节点在连接着,端口分别为6380、6381。
这里有一个小小的点就是lag怎么一个是1一个是0呢!lag是延迟时间,我这里是本地测试所以会出现0的情况,使用云服务器是很少出现的。lag的值为0和1都属于正常。
测试主节点添加一个hash值,hset kaka name kaka
分别从slave1和slave2获取kaka的值,检测主从复制是否正常运行。
经过测试我们的主从结构是正常运行的。