天天看点

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

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

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

1.1 哨兵模式(sentinel)

1.1.1 什么是哨兵?

哨兵的作用就是对Redis的运行情况进行监控,他是一个独立的进程。主要功能有以下两点:

1、监控主数据库和从数据库运行是否正常

2、主数据库出现故障后自动将从数据库转化成为主数据库

1.1.2 配置哨兵模式

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

修改sentinel.conf

vim sentinel.conf
           
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

配置哨兵信息:

sentinel monitor MekingMaster 127.0.0.1 7001 1
           

说明:

MekingMaster:监控主数据的名称,自定义即可,可以使用大小写字母和“.-_”符号

127.0.0.1:监控的主数据库的IP

7001:监控的主数据库的端口

1:最低通过票数

启动哨兵进程:

redis-sentinel ./sentinel.conf
           
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

由上图可以看到:

1、 哨兵已经启动,它的id 0b69761e344961c1c803c8778460b7222689a709

2、 为master数据库添加了一个监控

3、 发现了2个slave(由此可以看出,哨兵无需配置slave,只需要指定master,哨兵会自动发现slave)

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

1.1.3 测试从数据库宕机

kill -9 17640
           
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

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

重启7002端口redis从数据库

./redis-server /usr/local/src/cluster-7002/redis.conf
           
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

可以看出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 主库宕机

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

接下来我将详细解释一下这写个日志信息

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的恢复

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

可以从上图中看出7002已经为Master,并且只拥有7003一个从数据库,接下来我们恢复7001数据库

./redis-server /usr/local/src/cluster-7001/redis.conf
           
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

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的从数据库

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

1.1.6 配置多个哨兵

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

先修改sentinel.conf 配置成默认后台启动

daemonize yes
           
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

然后分别将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端口号是一个意思)

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建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
           
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

测试关掉7002主数据库

手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!
手把手教你搭建Redis集群第二篇(哨兵模式)1.手把手教你搭建Redis集群第二篇(哨兵模式)如有错误之处,请及时之处,谢谢!

后续发现哨兵开始进行故障转移,将7003设置为主数据库了。

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

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

继续阅读