前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis哨兵实现主从切换,故障转移

Redis哨兵实现主从切换,故障转移

作者头像
公众号 IT老哥
修改2020-09-21 15:03:00
2.3K0
修改2020-09-21 15:03:00
举报
文章被收录于专栏:用户7621540的专栏

本文源自 公-众-号 IT老哥 的分享

IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章

前言

上篇文章我们讲了Redis的主从复制搭建,但是大家这里思考一个问题,如果我的主节点挂了,那是不是就只有从节点了。那就没有机器接受Redis的写请求了,那这样肯定是不行的对吧。

这里我们的哨兵机制就是解决这个问题:故障转移,如果主节点挂掉,就进行主从切换,让从节点升级为主节点,继续对外提供服务。

文章结尾可以发表一些问题、或者建议。你们的反馈能让老哥写出更好的文章。

哨兵简介

Sentinel(哨兵)是Redis高可用的解决方案,可以运行多个Sentinel组成一个哨兵分布式系统。

使用流言协议(gossip protocols)来接收主机是否下线;并使用投票协议(agreement protocols)来决定是否执行自动故障迁移;以及选择哪个从服务器作为新的主服务器

Sentinel哨兵职责如下:
  • 监控(Monitoring):Sentinel 会不断地定期检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automaticfailover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
  • 统一的配置管理:连接者询问sentinel取得主从的地址。

哨兵搭建

机器准备

主从复制的搭建,之前的文章讲过了,大家可以去参考

服务器名称

节点类型

IP地址

端口

Node1

Redis服务1(主节点Master)

192.168.14.101

6379

Node2

Redis服务2(从节点slave1)

192.168.14.102

6380

Node3

Redis服务3(从节点slave2)

192.168.14.103

6381

Sentinel1

哨兵服务1

192.168.14.101

26379

Sentinel2

哨兵服务2

192.168.14.102

26380

Sentinel3

肖兵服务3

192.168.14.103

26381

五个主要配置讲解

在每个主从Redis目录下新建一个名为sentinel.conf的文件,在该文件下配置如下命令。

命令总格式:sentinel <option_name> <master_name> <option_value>

一:配置sentinel监控master

示例:sentinel monitor mymaster 127.0.0.1 6380 1

详解:sentinel监控的master的名字叫做mymaster,地址为127.0.0.1:6380;sentinel在集群中,需要多个sentinel互相沟通来确认某个master是否真的死了;数字1代表,当集群中有1个sentinel认为master死了时,才能真正认为该master已经不可用了。

二:配置sentinel心跳

示例:sentinel down-after-milliseconds mymaster 5000

详解:sentinel向master发送心跳PING,确认master是否存活,如果master在down-after-milliseconds时间(单位毫秒)范围内没有给sentinel回应PONG,或者回复一个错误消息,那么sentinel就主观的认为这个master不可用了

三:配置主从切换时,同步新master的salve个数

示例:sentinel parallel-syncs mymaster 1

详解:在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步数据。这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以设为 1 来保证每次只有一个slave处于不能处理命令请求的状态

四:配置故障转移最大时间

示例:sentinel failover-timeout mymaster 60000(毫秒)

详解:若Sentinel进程在该配置值内未能完成故障转移的操作,则认为本次故障转移操作失败。

五:配置报警脚本

示例:sentinel notification-script mymaster

详解:Sentinel检测到Master主服务器异常时,所要调用的报警脚本。

sentinel配置文件示例

大家按照这个配置,分别给3个sentinel节点进行配置

代码语言:javascript
复制
# 哨兵sentinel实例运行的端口 默认26379
port 26379

#以守护进程模式启动
daemonize yes

# 哨兵sentinel的工作目录
dir /tmp

#日志文件名
logfile "sentinel_26379.log"

# sentinel监控的master主机
sentinel monitor mymaster 192.168.1.108 6379 2

# sentinel连接主从密码验证,注意必须为主从设置一样的密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 1234

# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

# 失效转移最大时间设置
sentinel failover-timeout mymaster 180000

#如果了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
sentinel notification-script mymaster /var/redis/notify.sh  

启动sentinel

方式1:redis-sentinel redis-sentinel.conf

方式2:redis-server sentinel.conf --sentinel

验证主从切换

kill掉master主节点,模拟主机出现故障

上面截图红框框住的几个重要信息,这里先介绍最后一行,switch-master mymaster 192.168.14.101 6379 192.168.14.103 6381,表示master服务器由6379切换为6381端口的redis服务器。

PS:+switch-master 表示切换主节点

查看6381端口Redis服务器

通过命令info replication查看,我们发现,6381的Redis服务已经切换成master节点了.

另外,也可以查看sentinel.conf 配置文件,里面的 sentinel monitor mymaster 192.168.14.101 6379 2 也自动更改为6381了

至此,哨兵模式搭建验证完成。

云服务器云硬盘数据库(包括MySQL、Redis、MongoDB、SQL Server),CDN流量包,短信流量包,cos资源包,消息队列ckafka,点播资源包,实时音视频套餐,网站管家(WAF),大禹BGP高防(包含高防包及高防IP),云解析SSL证书,手游安全MTP移动应用安全云直播等等。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT老哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文源自 公-众-号 IT老哥 的分享
  • 前言
    • 文章结尾可以发表一些问题、或者建议。你们的反馈能让老哥写出更好的文章。
    • 哨兵简介
      • Sentinel哨兵职责如下:
      • 哨兵搭建
        • 机器准备
          • 五个主要配置讲解
            • 一:配置sentinel监控master
            • 二:配置sentinel心跳
            • 三:配置主从切换时,同步新master的salve个数
            • 四:配置故障转移最大时间
            • 五:配置报警脚本
          • sentinel配置文件示例
            • 启动sentinel
              • 验证主从切换
                • 查看6381端口Redis服务器
            相关产品与服务
            云数据库 Redis
            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档