redis sentinel (2.8.x)搭建
本来使用的是最新稳定版3.2.2,这个版本对redis的安全性方面,也做了很多改进,但是在搭建好之后,连接sentinel的时候,出现和protected-mode相关的问题,google了下没有解决,所以讲版本降低到2.8.24版本进行测试。2.8.x版本中sentinel2已经是稳定版了,所以不影响演示,等有时间了把3.2.2的那个问题给解决了,再更新。。。
入门搭建演示
好了,让我们开始吧!
首先,从官网下载2.8版本redis源文件
|
|
资源有限,单机部署,原理是一样的
源文件下载之后,执行编译命令,之后将redis目录cp为以下三个:
- redis6377
- redis6378
- redis6379
|
|
现在我们有三个redis实例目录了,redis集群中,我们把redis6379设置为master
,配置文件修改
为了方便,没有设置密码 masterauth、requirepass
- redis6377中的redis.conf、sentinel.conf
|
|
- redis6378中的redis.conf、sentinel.conf
|
|
- redis6379中的redis.conf、sentinel.conf
|
|
从以上配置文件sentinel.conf中,可以看到,monitor只需要配置master信息,sentinel自己会通过master找到它所关联的salves,所以我们不需要显示的告诉sentinel,谁是salves;
启动redis
|
|
现在,这三个redis的role都是master
,之间没有任何关系,下面,就需要将master-salve关系建立起来
|
|
此时,登录到6379实例上,我们可以看到
|
|
登录到6377、6378实例上,我们可以看到
|
|
根据以上信息,说明redis的master-slave集群搭建的没有问题。
下面我们启动sentinel实例
redis官方要求,一个健壮的sentinel集群,最低要求是三个实例,因为要保证大多数的sentinel工作正常,才能进行后续的failover操作;ps:这块很类似zookeeper的部署要求,2n+1个实例,最低要求也是3台,这块的协议redis和zookeeper好像用的同一个gossip协议;
|
|
此时,sentinel启动完毕,我们登陆到任意一个sentinel上看一下
|
|
info
信息展示,此时的redis集群中,master为6379实例,有两个salve,有三个sentinel
下面,我们开始测试failover
我们登陆到现master,6379实例上
|
|
由于我们的sentinel配置的检测sdown之间为30s,所以在30s之后,我们看一下sentinel中的信息
|
|
sentinel中展示,当前的master已切换到了6378实例
我们再看下6378实例的状态
|
|
如上所示,6378果然被切换为master了,并且由于原master 6379实例,还在block中,当前的slave只有一个6377了;
可见,failover成功了!
当原master 6379服务恢复之后呢,会发生什么呢?
我们等那180s之后,再回来看6379的状态
|
|
可以看到,虽然6379起死回生了,但是格局已经变了,role由master变为了slave了;
此时,再看下6378的状态
|
|
没错,slave信息中6379出现了。