阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

ASP.NET Core实战之 Redis 负载均衡和“高可用”实现

525次阅读
没有评论

共计 4598 个字符,预计需要花费 12 分钟才能阅读完成。

1. 概述

分布式系统缓存已经变得不可或缺, 本文主要阐述如何实现 redis 主从复制集群的负载均衡, 以及 redis 的 ” 高可用 ” 实现, 呵呵双引号的 ” 高可用 ” 并不是传统意义的高可用哈, 而是 redis 集群挂了, 并不影响 asp.net core 的运行, 欲知详情, 请看下文.

注意: 本文主要阐述 redis 的复制均衡和 ” 高可用 ”, 故 redis 的主从复制搭建略, 请自行百度.

2. 负载均衡实现

目前在 tcp 负载均衡这块, haproxy 是官方实现, nginx 是三方实现, 个人偏向 haproxy 的简单易用. 故 redis 的负载均衡采用 haproxy 实现.

Haproxy 配置文件如下:

global
    log 127.0.0.1 local2 #log 语法:log <address_1>[max_level_1] # 全局的日志配置,使用 log 关键字,指定使用 127.0.0.1 上的 syslog 服务中的 local0 日志设备,记录日志等级为 info 的日志
                                                                     
    chroot /var/lib/haproxy           #当前工作目录
    pidfile /var/run/haproxy.pid     #当前进程 id 文件
    maxconn 6000      #最大并发连接数
    user haproxy     #所属用户
    group haproxy     #所属组
    daemon             #以守护进程方式运行 haproxy
    stats socket /var/lib/haproxy/stats
defaults
    mode http     #默认的模式 mode {tcp|http|health },tcp 是 4 层,http 是 7 层,health 只会返回 OK
    log global    #应用全局的日志配置
    option httplog    #启用日志记录 HTTP 请求,默认 haproxy 日志记录是不记录 HTTP 请求日志
    option dontlognull    # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该 服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
    option http-server-close  #每次请求完毕后主动关闭 http 通道
    option forwardfor except 127.0.0.0/8 #如果服务器上的应用程序想记录发起请求的客户端的 IP 地址,需要在 HAProxy 上 配置此选项,这样 HAProxy 会把客户端的 IP 信息发送给服务器,在 HTTP 请求中添加 "X-Forwarded-For" 字段。启用  X-Forwarded-For,在 requests 头部插入客户端 IP 发送给后端的 server,使后端 server 获取到客户端的真实 IP。option redispatch   # 当使用了 cookie 时,haproxy 将会将其请求的后端服务器的 serverID 插入到 cookie 中,以保证会话的 SESSION 持久性;而此时,如果后端的服务器宕掉了,但是客户端的 cookie 是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端 server 上,以保证服务的正常。retries 3       # 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
    timeout http-request 10s     #http 请求超时时间
    timeout queue 1m             #一个请求在队列里的超时时间
    timeout connect 10s            #连接超时
    timeout client 1m            #客户端超时
    timeout server 1m            #服务器端超时
    timeout http-keep-alive 10s    #设置 http-keep-alive 的超时时间
    timeout check 10s            #检测超时
    maxconn 6000                #每个进程可用的最大连接数
listen stats     #统计界面
    mode http
    bind *:2080    
    stats enable 
    stats refresh 30s
    stats uri /hastats
    stats realm Haproxy\ Statistics  
    stats auth admin:admin
    stats admin if TRUE
frontend healthcheck
    bind :1099     #定义外部检测机制
    mode http    #http 负载均衡
    option httpclose
    option forwardfor
    default_backend AnuoApcNodes
frontend http-in
    bind *:88 #监听的端口, 处理请求的服务器集群为 default_backend 的配置值
    mode http 
    log global
    option httpclose
    option logasap #不等待响应结束就记录日志,表示提前记录日志,一般日志会记录响应时长,此不记录响应时长
    option dontlognull #不记录空信息
    capture request header Host len 20 #记录请求首部的前 20 个字符
    capture request header Referer len 60 #referer 跳转引用,就是上一级
    default_backend AnuoApcNodes #处理请求的服务器集群
backend AnuoApcNodes     #处理请求的服务器集群
    mode http
    balance roundrobin
    #check : 下面的 check 表示 ha 需要检查此节点的状态
    server websrv1 192.168.2.108:9090 check maxconn 6000
    server websrv2 192.168.1.112:88 check maxconn 6000
    
listen SQLServer :1433  #tcp 负载均衡
    mode tcp
    balance roundrobin
    #weight : 权重, 表示此节点的优先级, 值越高(最高 256) , 优先执行越高
    #check port : 检测是否存活的端口
    #inter : interval 检测是否存活的 时间间隔
    #rise : server 从离线状态转为正常状态后, 需要复查的次数(看是否正常)
    #fall : server 从正常状态转换为不可用状态需要检查的次数
    server SQLServer1 192.168.2.101:1433 weight 1 maxconn 6000 check port 1433 inter 2000 rise 2 fall 2
    server SQLServer2 192.168.2.203:1433 weight 1 maxconn 6000 check port 1433 inter 2000 rise 2 fall 2
listen Redis :6377  #tcp 负载均衡
    mode tcp
    balance roundrobin
    #weight : 权重, 表示此节点的优先级, 值越高(最高 256) , 优先执行越高
    #check port : 检测是否存活的端口
    #inter : interval 检测是否存活的 时间间隔
    #rise : server 从离线状态转为正常状态后, 需要复查的次数(看是否正常)
    #fall : server 从正常状态转换为不可用状态需要检查的次数
    server Redis1 192.168.2.101:6379 weight 1 maxconn 6000 check port 6379 inter 2000 rise 2 fall 2
    server Redis2 192.168.2.102:6379 weight 1 maxconn 6000 check port 6379 inter 2000 rise 2 fall 2
其中最后的配置:

ASP.NET Core 实战之 Redis 负载均衡和“高可用”实现

为 redis 的负载均衡配置, 可以看到负载了两个 redis IP, 101 和 102 .

在实际运行中, redis 的主库一般用作写, 从库用作读, so , 一般针对 redis 的从库进行负载.

只需将上面的两个 IP 替换为自己的 ip 即可完成对 redis 从库的负载.

3. asp.net core 端针对 redis “ 高可用 ” 实现

实现思路: 此处的实现不是传统意义的高可用实现, 而是 C# 端检测到 redis 集群挂了, 自动将 redis 从系统中剔除, 保证 asp.net core 能继续运行

业界问题: redis 的高可用有官方实现叫 sentinel , 现在应用案例并不多, 也逮到官方文档看了哈, 看了半天没看到, 有 sentinel 实战教程推荐的, 或其他高可用实现的, 望留言 ^_^

先下载完整源码: http://pan.baidu.com/s/1i5fU0w1

源码配置运行步骤如下:

如下图ASP.NET Core 实战之 Redis 负载均衡和“高可用”实现

 

3.1. 配置 VIPPort 的值为 haproxy 暴露的 redis 集群端口, 如下图值

ASP.NET Core 实战之 Redis 负载均衡和“高可用”实现

3.2. 配置 ClusterVIPCom 值为 haproxy 所在服务器 的 IP

3.3. 配置 ClusterMultiIPCom 值为 redis 主从复制集群中的 全部从库 IP, 用分号分割 IP

3.4. 代码运行起来, 调用 Sample 接口, 如下图

ASP.NET Core 实战之 Redis 负载均衡和“高可用”实现

调用 URL: Get 方法  http://localhost:9526/api/RedisTest/Sample

运行逻辑如下:

第一次取数据, redis 没得缓存, 制造缓存对象, 缓存到 redis, 成功返回.

第二次取数据, redis 有缓存, 从缓存中取, 成功返回.

第三次取数据, 假如 redis 挂了, 制造缓存对象, 还是成功返回.

第四次取数据, redis 恢复了, 重启 asp.net core ,  程序自动连接上 redis, 从 redis 返回数据, 成功返回.

 

至此达到了, redis 和 asp.net core 的完全解耦, 即 redis 挂了不影响 asp.net core 的继续运行 .

可以想象哈, 当你半夜收到一个警报说 redis 挂了的时候, 你可以不慌不忙的去公司慢慢改, 因为 asp.net core 还在运行, 只是慢了点而已.

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Ubuntu 15.10 下 Redis 集群部署文档 http://www.linuxidc.com/Linux/2016-06/132340.htm

Redis 实战 中文 PDF http://www.linuxidc.com/Linux/2016-04/129932.htm

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136996.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4598字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7985919
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...