ASP.NET Core分布式缓存Redis主从Sentinel哨兵模式实战演练

一、课程介绍

Redis是被广泛使用的基础软件之一。对于工程师和,架构师,运维人员来说,了解Redis的高可用方案和背后的原理,是必备的基础知识。

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案之一,当用Redis做Master-Slave(主从复制)的高可用方案时,假如master宕机了,它能监控多个master-slave集群,发现master宕机后能进行自动切换。Redis主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。

1.1、本次分享课程包含知识点如下:
★Redis的三种集群解决方案对比。
★Redis哨兵模式概述。
★如何使用Dcoker部署Redis主从切换哨兵模式(一主二从三哨兵)。

1.2、一句话总结今天我们学习达到的目标
在ASP.NET Core中如何使用分布式缓存Redis主从Sentinel哨兵模式实现故障转移。

 

二、Redis的三种集群解决方案对比

redis有三种集群方式:主从复制,哨兵模式和集群。

1)、Redis主从复制特点

Redis主从复制不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

2)、Redis主从切换哨兵模式特点

哨兵Sentinel基于主从复制模式,所以优缺点很多重合。最大的优点就是可以主从切换,进行故障转移。缺点就是扩容很难。

3)、Redis-Cluster 集群特点

redis-cluster 集群模式,也是大型企业中使用的模式,无中心架构,支持动态扩容,具备哨兵与主从的优点,客户端只需要连接集群中任意一个节点。

三、Redis哨兵模式概述

  有了主从复制的实现以后,如果想对主服务器进行监控,那么在redis2.6以后提供了一个"哨兵"的机制。顾名思义,哨兵的含义就是监控redis系统的运行状态。可以启动多个哨兵,去监控redis数据库的运行状态。其主要功能有两点:

    a、监控所有节点数据库是否在正常运行。

    b、master数据库出现故障时,可以自动通过投票机制,从slave节点中选举新的master,实现将从数据库转换为主数据库的自动切换。

一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳健。此时,不仅哨兵会同时监控主数据库和从数据库,哨兵之间也会相互监控。在这里,建议大家哨兵至少部署3个,并且使用奇数个哨兵。Redis Sentinel 的节点数量要满足 2n + 1 (n>=1)的奇数个,所以最小数量是3个!

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

这里的哨兵有两个作用

1)、通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

2)、当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

四、如何使用Dcoker部署Redis主从切换哨兵模式(一主二从三哨兵)

Redis主从结构搭建成功了,系统的可用性变高了,但是如果主发生故障,需要人工手动切换从机为主机。这种切换工作不仅浪费人力资源,更大的影响是主从切换期间这段时间redis是无法对外提供服务的。因此,哨兵系统被开发出来了,哨兵可以在主发生故障后,自动进行故障转移,从从机里选出一台升级为主机,并持续监听着原来的主机,当原来的主机恢复后,会将其作为新主的从机。

一主(master)二从(slave)三哨兵(sentinel)的配置目标, 如下

一主(master)二从(slave)三哨兵(sentinel)

 

五、ASP.NET Core中使用分布式缓存Redis主从Sentinel哨兵模式

一般实际工作中Redis都是由我们的运维DB工程师帮我们去搭建环境,但是在刚开始的学习过程中,可能需要我们自行去搭建环境哦,这里为了方便起见,阿笨强烈推荐大家采用Docker容器化的方式进行搭建环境。 具体的环境搭建过程请自行研究和攻克一下哦(刚开始需要做好一定心里准备,如果对概念理解不深刻的话,Redis哨兵环境搭建还是比较复杂和繁琐,由于Redis跟平台和开发语言没有任何的关系,所以建议大家还是事先参考一些博客后才自行采取行动噢)。

简单的主从复制架构在 master 故障后会不可用,Redis 官方提供了哨兵(sentinel)机制自动实现主备切换保证高可用。

哨兵机制通过一组哨兵节点监控主从节点的运行状态,并在主节点故障后选举新的主节点。

六、实现步骤

关于.NET Core如何使用Redis的哨兵模式,这里阿笨推荐大家使用CSRedisCore。以下步骤前提条件就是你已经配置到了Redis的哨兵模式,配置推荐大家可以采用Docker的方式相对简单一些,感兴趣的话大家自行百度攻克一下。阿笨这里就只介绍如何去使用功能。

1)、配置连接字符串SentinelConnectString

2、将csredis实例注册到管道中

3、使用redis功能,对调用方在功能上的使用完全透明化,无任何差异。

七、总结

redis通过主从复制来实现高可用,但是发生故障时需要人工进行主从切换,效率低下。哨兵机制实现了redis主从的自动切换,提高了redis集群的可用性,提高了redis集群的故障转移效率。

我们可以看到哨兵机制是有缺点的:

  1.主从服务器的数据要经常进行主从复制,这样造成性能下降。

  2.当主服务器宕机后,从服务器切换成主服务器的那段时间,服务是不能用的。

为了保证redis的真真的高可用官方推荐使用redis-cluster集群。

一般的项目我们采用redis的哨兵模式架构(推荐采用一主二从三哨兵)就可以满足业务要求了,阿笨水平也有限,关于redis的高可用cluster集群的运用大家就根据个人的项目架构要求去研究和探索了。

希望本次分享课程能够让大家有所收获!最后送大家一句话:希望大家在.NET Core的学习道路上一直跟着阿笨坚持下去。

七、源代码示例下载

扫码关注下方微信公众号,回复t5pq关键字获取源代码下载地址。

有问题微信公众号回复wx关键字,加阿笨的个人微信号。

 

posted @ 2021-01-27 21:28  跟着阿笨一起玩.NET  阅读(539)  评论(0编辑  收藏  举报