手把手教你搭建Redis集群第二篇(哨兵模式)

1.手把手教你搭建Redis集群第二篇(哨兵模式)

在上篇文章中已经教大家搭建了Redis集群之主从复制模式(安装Redis的准备工作请大家查看我写的这篇点击跳转)

1.1 哨兵模式(sentinel)

1.1.1 什么是哨兵?

哨兵的作用就是对Redis的运行情况进行监控,他是一个独立的进程。主要功能有以下两点:
1、监控主数据库和从数据库运行是否正常
2、主数据库出现故障后自动将从数据库转化成为主数据库

1.1.2 配置哨兵模式

在这里插入图片描述
修改sentinel.conf

vim sentinel.conf

在这里插入图片描述
配置哨兵信息:

sentinel monitor MekingMaster 127.0.0.1 7001 1

说明:
MekingMaster:监控主数据的名称,自定义即可,可以使用大小写字母和“.-_”符号
127.0.0.1:监控的主数据库的IP
7001:监控的主数据库的端口
1:最低通过票数

启动哨兵进程:

redis-sentinel ./sentinel.conf

在这里插入图片描述
由上图可以看到:
1、 哨兵已经启动,它的id 0b69761e344961c1c803c8778460b7222689a709
2、 为master数据库添加了一个监控
3、 发现了2个slave(由此可以看出,哨兵无需配置slave,只需要指定master,哨兵会自动发现slave)

在这里插入图片描述

1.1.3 测试从数据库宕机

kill -9 17640

在这里插入图片描述
在等待30秒之后哨兵已经监控到了slave宕机了,接下来我们重新启动7002这个从数据库,看看是否会重新加入集群

重启7002端口redis从数据库

./redis-server /usr/local/src/cluster-7002/redis.conf

在这里插入图片描述
可以看出7002已经重新加入到集群到了
-sdown:说明是恢复服务

1.1.4 故障转移

一次故障转移操作由以下步骤组成:
1、发现主服务器已经进入客观下线状态。
2、对我们的当前纪元进行自增(详情请参考 Raft leader election ), 并尝试在这个纪元中当选。
3、如果当选失败, 那么在设定的故障迁移超时时间的两倍之后, 重新尝试当选。 如果当选成功, 那么执行以下步骤。
4、选出一个从服务器,并将它升级为主服务器。
5、向被选中的从服务器发送 SLAVEOF NO ONE 命令,让它转变为主服务器。
6、通过发布与订阅功能, 将更新后的配置传播给所有其他 Sentinel , 其他 Sentinel 对它们自己的配置进行更新。
7、向已下线主服务器的从服务器发送 SLAVEOF 命令, 让它们去复制新的主服务器。
8、当所有从服务器都已经开始复制新的主服务器时, 领头 Sentinel 终止这次故障迁移操作。

1.1.5 主库宕机

在这里插入图片描述
接下来我将详细解释一下这写个日志信息

17086:X 16 Sep 11:01:44.306 # +sdown master MekingMaster 127.0.0.1 7001
说明主服务器已经宕机了

17086:X 16 Sep 11:01:44.306 # +odown master MekingMaster 127.0.0.1 7001 #quorum 1/1
17086:X 16 Sep 11:01:44.306 # +new-epoch 1
17086:X 16 Sep 11:01:44.306 # +try-failover master MekingMaster 127.0.0.1 7001 开始恢复故障
17086:X 16 Sep 11:01:44.322 # +vote-for-leader 1a4f8224fcae8d7bbdaee1af77251e259e2af9021投票选举哨兵Leader,因为就一个哨兵所以选择自己当leader
17086:X 16 Sep 11:01:44.322 # +elected-leader master MekingMaster 127.0.0.1 7001
17086:X 16 Sep 11:01:44.322 # +failover-state-select-slave master MekingMaster 127.0.0.1 7001
17086:X 16 Sep 11:01:44.379 # +selected-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001 选择7002当master
17086:X 16 Sep 11:01:44.379 * +failover-state-send-slaveof-noone slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001发送slaveof no one命令
17086:X 16 Sep 11:01:44.445 * +failover-state-wait-promotion slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001
等待升级master
17086:X 16 Sep 11:01:45.419 # +promoted-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001 升级7002为Master
17086:X 16 Sep 11:01:45.419 # +failover-state-reconf-slaves master MekingMaster 127.0.0.1 7001
17086:X 16 Sep 11:01:45.474 * +slave-reconf-sent slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7001
17086:X 16 Sep 11:01:46.454 * +slave-reconf-inprog slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7001
17086:X 16 Sep 11:01:46.454 * +slave-reconf-done slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7001
17086:X 16 Sep 11:01:46.507 # +failover-end master MekingMaster 127.0.0.1 7001故障恢复完成
17086:X 16 Sep 11:01:46.507 # +switch-master MekingMaster 127.0.0.1 7001 127.0.0.1 7002主数据库从7001变成7002
17086:X 16 Sep 11:01:46.507 * +slave slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7002 添加7003为7002的从库
17086:X 16 Sep 11:01:46.507 * +slave slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 7002添加7001为7002的从库
17086:X 16 Sep 11:02:16.545 # +sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 7002发现7001已经宕机,等待7001的恢复
在这里插入图片描述
可以从上图中看出7002已经为Master,并且只拥有7003一个从数据库,接下来我们恢复7001数据库

./redis-server /usr/local/src/cluster-7001/redis.conf

在这里插入图片描述
17086:X 16 Sep 11:22:20.469 # -sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 7002 7001已经恢复服务
17086:X 16 Sep 11:22:30.430 * +convert-to-slave slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 70027001成为7002的从数据库

在这里插入图片描述

1.1.6 配置多个哨兵

大家可以想一下其实配置一个哨兵还是不符合高可用的特点的,因为一个哨兵也有存在宕掉的可能性,如过那个宕掉了,那么哨兵模式便将不复存在了,所以接下来我们要开始配置多个哨兵。
先修改sentinel.conf 配置成默认后台启动

daemonize yes

在这里插入图片描述
然后分别将sentinel.conf 文件复制到三个文件夹中

cp sentinel.conf /usr/local/src/cluster-7001/
cp sentinel.conf /usr/local/src/cluster-7002/
cp sentinel.conf /usr/local/src/cluster-7003/

然后修改另外两个哨兵的端口号(由于我是在一台机器上做的操作所以必须修改端口号这个和我修改Redis端口号是一个意思)
在这里插入图片描述
三个哨兵的端口分别为:26379、26380、26381

然后启动三个哨兵

redis-sentinel /usr/local/src/cluster-7001/sentinel.conf
redis-sentinel /usr/local/src/cluster-7002/sentinel.conf
redis-sentinel /usr/local/src/cluster-7003/sentinel.conf

在这里插入图片描述
测试关掉7002主数据库
在这里插入图片描述
在这里插入图片描述
后续发现哨兵开始进行故障转移,将7003设置为主数据库了。

好了,Redis集群之哨兵模式在这里就介绍完毕了,接下来我会向大家介绍Redis集群之分片集群模式,也是目前最高效、最稳定的一种模式。

如有错误之处,请及时之处,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值