本文是以之前写的Redis从零搭建这篇文章基础下完成得哨兵集群部署,最好可以先去看一下Redis从零搭建这篇文章,以免遇到问题
一主二从三哨兵:
①主可读写
②从只可读不可写
③哨兵节点监控集群状态,进行自动切换,实现高可用
在opt目录下创建cluster-sentinel目录
mkdir cluster-sentinel
复制三份opt目录下的redis-5.0.14文件夹到cluster-sentinel目录下并依次命名为redis-5.0.14-8974、redis-5.0.14-8975、redis-5.0.14-8976(8974为主,8975和8976为从)
# 复制上一级目录下的redis-5.0.14文件夹到本目录
cp -r ../redis-5.0.14 .
# 重命名redis-5.0.14为redis-5.0.14-8974
mv redis-5.0.14 redis-5.0.14-8974
这里以redis-5.0.14-8974目录为例,其他两个目录得修改方法与之相同。
(注意8974为主结点,8975、8976为从结点)
进入redis-5.0.14-8974目录,编辑redis.conf配置文件
vi redis.conf
修改的地方如下
#端口 xxxx为8974\8975\8976
port xxxx
# 主从复制 公网ip和主结点端口(8974)
# 注意:主结点目录不用添加这条代码,否则会出现不断复制自身的情况,从结点目录需要添加这条代码
# replicaof <masterip> <masterport>
# 旧版:# slaveof <masterip> <masterport>
replicaof 公网ip 8974
# 主节点密码
masterauth xxx
修改完毕后退出,继续编辑sentinel.conf配置文件
vi sentinel.conf
修改的地方如下
#设置哨兵端口号 26374/26375/26376
port xxxxx
# 初始主节点ip和端口,2代表大于等于2票即可成为主节点
sentinel monitor mymaster 实际ip 8974 2
# 主节点密码
sentinel auth-pass mymaster xxx
复制六个连接,一个代表主节点(8974),两个代表从节点(8975、8976),三个代表哨兵节点(26374、26375、26376)
分别进入主节点和从节点的bin目录,启动redis服务
./redis-server ../redis.conf
分别进入三个哨兵结点的bin目录,启动哨兵服务
./redis-sentinel ../sentinel.conf
都启动成功即可,如下图
测试内容:
①主节点修改或者添加内容,2个从节点同步查询
②从节点,修改或者添加,提示只读
③停止主节点,等待从节点切换主节点(可观察日志)
(其中一个从节点在3个哨兵节点进行投票后,升级成主节点,另外一个从节点成为新主节点的从节点【哨兵监控生效】)
④再停止当前的主节点,等待最后的从节点升级成主节点
(投票升级成主节点【哨兵监控生效】)
⑤只有三个节点全部停止redis服务停止,否则一直可提供服务
在云服务中添加安全组规则,开放8974、8975、8976、26374、26375、26376端口
使用AnotherRedisDesktopManager可视化软件新建三个连接,分别代表一个主结点和两个从结点
主结点可以成功添加字段
从结点不可以添加字段,但可以查询到主结点添加的字段
查看端口并杀掉主节点端口(8974)
# 查看端口
ps -ef | grep redis
# 杀掉指定端口
kill -9 xxxx
我们会发现,从节点(8975、8976)会出现连接不上主节点(8974)的提示
等待10几秒,观看哨兵状态,发现哨兵们已经投票完成,8976端口票数最多,成为主节点
从节点(8975)重新连接主节点(8976)
测试主节点(8976)能否添加字段,发现可以添加
重新启动8974端口服务,发现8974端口将8976端口视为主节点,8974成为从节点