Ubuntu18下Redis哨兵模式部署踩坑笔记
最近因工作原因需要搭建一套Redis的集群环境,并需要采取哨兵模式。网上这类文章很多,大部分文章也是正确的,所以通常部署起来也比较方便。但我在虚拟机上部署的时候却因为各种小坑,导致了我花了一天时间才完全部署成功。现把各种遇到的坑描述一下,并记录我的解决心得。
文章目录
Ubuntu18下安装Redis和Sentinel
这个过程是比较简单的,两句话:
sudo apt-get install redis-server
sudo apt-get install redis-sentinel
配置虚拟机静态ip
因为我打算采用的是虚拟机集群部署,所以每台虚拟机需要有固定的ip。虚拟机设置静态ip也比较简单,直接看这篇文章即可:Ubuntu 虚拟机固定IP设置心得记录。
克隆多台虚拟机
VMWare下,创建多台虚拟机的最方便方式就是使用软件自带的克隆功能。克隆完成后很容易想到的一点就是进去把每台虚拟机的ip改成不同的固定ip。
当然还有一个地方需要修改,而这正是坑了我许久的地方,先卖个关子,后面再说。
同时启动多台虚拟机
我台式机的系统环境是Win10 1909
版本,使用的是VMWare Work Station Pro 15
。
启动多台虚拟机的时候发现一个很坑爹的事情,就是同时只能有1或2台虚拟机能启动,其他虚拟机启动时会卡死,而且还关不掉!
这个时候没有其他办法,只能重启电脑,但是重启之后还是打不开虚拟机!因为虚拟机异常退出,重新打开会有问题,需要进行如下操作:虚拟机异常退出后无法再次启动的解决办法。
最终解决方案:升级VMWare,换成VMWare Work Station Pro 16
。。。
Redis哨兵模式配置
这篇文章的介绍非常详细,而且可行,我主要参照的也是这篇文章,只不过文章中有几个点没有说清楚,我补充一下:Ubuntu16.04 安装Redis哨兵模式。
redis.conf
几个配置项的解释:
- bind:当前虚拟机的固定ip
- requirepass:登录当前服务器redis的密码
- slaveof:作为哪台master服务器的从服务器,所以只有slave的服务器需要配置这项,指出master服务器的ip和port
- masterauth:slave服务器登录master服务器用的密码,即master服务器上redis的登录密码
redis-sentinel.conf
几个配置项的解释:
- bind:表示sentinel绑定的ip。文章中这个配置项注释掉了,在旧版redis下是没问题的。对于较新版本的redis,注释掉该项后在后续的操作中会遇到sentinel已开启自保护,无法远程访问的提示。新版新增了
protected-mode no
的配置项,如果想开启远程访问,bind
或protected-mode no
的配置项必须开启任意一个 - sentinel monitor [name]:这里要配置的是redis的master服务所在服务器的ip和port,所以每台服务器这里的sentinel配置都一样
- sentinel myid:每个sentinel的id值,每台服务器唯一
- sentinel auth-pass:redis的访问密码
Sentinel部署失败
按照上述文章的介绍进行配置和验证会发现,Redis的主从服务一致可以实现,但是sentinel却部署失败了,即在任意一台服务器下看不到其他的sentinel,即输入:sentinel sentinels mymaster
会得到empty set
。
还记得之前卖的那个关子吗?我们克隆虚拟机的时候实际上每台虚拟机的sentinel.conf
文件是完全一致的!如果我们不采用克隆的方式,而是在每台虚拟机都采用apt-get install redis-sentinel
,那么得到的配置文件中,sentinel myid
值是各不相同的!但因为我们是克隆的,所以该项完全一致!所以一个sentinel下无法看到其他sentinel!
知道了原因,解决方案很简单了,随便改改每台虚拟机上sentinel.conf
文件的sentinel myid
值,保证每台唯一即可。
现在能看到其他的sentinel信息了吗?