windows第七层负载均衡_基于IIS的ARR负载均衡详解
载均衡有很多种方法,有硬件负载均衡,软件负载均衡,还可以从域名解析下手。
不过,今天只讲软件负载均衡。
软件负载均衡一般分两种,从网络协议来讲(tcp/ip),主要集中在第四层和第七层进行负载均衡。
第四层就是基于IP进行负载均衡。后面还有一篇文章讲这个。
第七层就是应用层。比如各种的WEB服务器。今天就讲讲IIS的负载均衡。
第七层的Web负载均衡,很多web服务器都支持,比如IIS,Nginx,apache等。现在主要讲一下windosw下IIS如何使用负载均衡
IIS使用ARR反向代理,实现负载均衡
什么是正向代理?
代理服务器大家可能听说过,比如我们说的“科学上网”。就是使用代理服务器,请求经过代理服务器转到目的服务器。这是一个正向代理。用户知道自己使用代理,并且充许用户隐藏客户端自身。
什么是反向代理?
请求同样经过代理服务器转到目的服务器,目的服务器返回给代理服器,代理返回给客户端。不同的时候,客户并不知道,访问的是一个代理服务器。客户认为他在访问目的服务器。
两者的区别基本在于,正向代理是发生在客户端。反向代理是发生在服务端。
首先,我们先安装一个Web平台安装程序
打开web平台安装程序,搜索arr
写WebApi程序
[Route("api/[controller]")] public class HomeController : Controller { // GET: api/<controller> [HttpGet,Route("GetUserChat")] public async Task<ActionResult> GetUserChat() { var collection = new MongoHelper().GetCollection<OAChat>("OAChat"); var chatItems =await collection.Find(n => n.ChatType == 2).Limit(5).ToListAsync(); return ApiJsonFormat.GetJsonResult(chatItems); } }
返回结果
{"ResultCode":1000,"Message":"成功","DetailError":null,"Data":[{"Id":"595225a5bbccc61ff88e89a7","ChatName":"testttt","ChatType":2,"CreaterUserId":76,"Members":[],"CreateTime":"2017-06-27 17:30:13","LastChatTime":"2017-11-10 17:43:17","LastChatText":"[定位]","IsDisbanded":false},{"Id":"5952445ebbccc71ff8adf671","ChatName":"测试2","ChatType":2,"CreaterUserId":13,"Members":[],"CreateTime":"2017-06-27 19:41:18","LastChatTime":"2017-06-27 19:48:47","LastChatText":"行","IsDisbanded":true},{"Id":"5952463dbbccc71ff8adf67d","ChatName":"巡视频么么哒哒","ChatType":2,"CreaterUserId":13,"Members":[],"CreateTime":"2017-06-27 19:49:17","LastChatTime":"2017-12-20 19:47:17","LastChatText":"[定位]","IsDisbanded":false},{"Id":"59524c0ebbccc71ff8adf6ae","ChatName":"rrrffff","ChatType":2,"CreaterUserId":13,"Members":[],"CreateTime":"2017-06-27 20:14:06","LastChatTime":"2017-06-27 20:34:54","LastChatText":"6565","IsDisbanded":false},{"Id":"59531cdfbbccc414e8f6769f","ChatName":"都纷纷fee俄方热热","ChatType":2,"CreaterUserId":76,"Members":[],"CreateTime":"2017-06-28 11:05:03","LastChatTime":"2017-06-28 11:05:13","LastChatText":"123","IsDisbanded":true},{"Id":"59531de5bbccc414e8f676a1","ChatName":"天赋过人托管人","ChatType":2,"CreaterUserId":76,"Members":[],"CreateTime":"2017-06-28 11:09:25","LastChatTime":"2017-06-28 11:09:33","LastChatText":"呃呃呃","IsDisbanded":true},{"Id":"59531e40bbccc414e8f676a3","ChatName":"热热","ChatType":2,"CreaterUserId":76,"Members":[],"CreateTime":"2017-06-28 11:10:56","LastChatTime":"2017-06-28 17:58:41","LastChatText":"333","IsDisbanded":false},{"Id":"59532140bbccc414e8f676a6","ChatName":"会厌结核有机会好好","ChatType":2,"CreaterUserId":76,"Members":[],"CreateTime":"2017-06-28 11:23:44","LastChatTime":"2017-06-28 11:24:40","LastChatText":"eee","IsDisbanded":true},{"Id":"595321d3bbccc414e8f676a8","ChatName":"656565656","ChatType":2,"CreaterUserId":76,"Members":[],"CreateTime":"2017-06-28 11:26:11","LastChatTime":"2017-06-28 18:50:08","LastChatText":"ggg","IsDisbanded":false},{"Id":"5954d0eebbccc40fecbea435","ChatName":"r","ChatType":2,"CreaterUserId":76,"Members":[],"CreateTime":"2017-06-29 18:05:34","LastChatTime":null,"LastChatText":null,"IsDisbanded":false}]}
//设置ARR
192.168.99.5 //代理服务器 192.168.99.6 //目的服务器 192.168.99.7 //目的服务器 192.168.99.8 //目的服务器 192.168.99.10 //目的服务器 192.168.99.11 //目的服务器 192.168.99.12 //目的服务器 192.168.99.13 //目的服务器
首先给服务器安装net core 运行环境
DotNetCore.2.0.5-WindowsHosting 安装包内置SDK和WindowsHosting,直接安装这个,安装成功之后,要重启服务器才能生效。然后部署Web就可以访问了
选择无托管代码
好,部署成功之后,可以正常访问了
好,马上试一下部署ARR,是否能实现反向代理
添加一个入口站点,默认端80。
非常简单数据出来啦。理论就搭建成功了。
192.168.99.5 的站点,还有两个地方要注意设置
IIS程序池的队列长度。由于这是代理服务器很多请求都会经过这个站点,所以这个长度就设置长一点。默认值是1000。
IIS程序池的闲置超时。设置为0,将长期保持不回收状态。
转化服务器的网卡要目的服务器的网卡要好,这样能支撑更大的流量需求。
下面把一些细节介绍一下,然后做一下压力测试,就大功告成啦。
安装ARR完成之后,会出现两个
URL重写充许你定则重写规则,我没怎么用过,特么不嫌麻烦。这就不细讲了。
Server Farms可以对你的集群进行管理,健康检查,转化统计。
分别对应的是:缓存,健康检查,负载均衡,监视和管理,代理,路由规则,服务器相关性
健康检查:主要是检查各个服务器的IIS是否正常运作。(这个也是第七层负载均衡的一个好处,能感知Web服务器是否正常运作)
负载均衡:主要作用是设置各种分发规则。比如根据权重,最小响应时间,最小请求量等
监视和管理:主要让你看到各个服务器的健康情况,请求量,失败量,缓存命中率等。
服务器相关性:主要提供一种服务器和客户端之间的粘性。简单理解就是,客户端A的请求分配到服务器B处理之后,以后客户端A的请求都分配到服务器B处理。(这样设计理论会使用分配不均,当然也有好处,比如可以使用本地session)
Client Affinity: 根据客户端的cookies处理粘性
Host Name Affinity 根据Host name处理粘性
下面试一下压力测试,用大微软的VS2017进行压力测试,细节我就不讲了,贴了一些结果吧。
在测试过的过程中,经常现一个502.3 Timeout Errors的问题,是ARR3.0的问题,换回ARR2.0 版本之后,就正常了。
启动性能监视器,统计每秒请求数,也与压力测试的结果吻合。每秒358次。
ARR测试到止结束,下班。
阅读排行
- 1win2003 service pack2 IIS 无法复制CONVLOG.EXE CONVLOG.EX_问题处理
- 2Windows Server 2008 R2 DNS 服务器迁移方法
- 3win2008 IP安全策略关闭端口、禁止ping、修改远程连接3389端口、开放指定端口
- 4man -f/-k [keyword]在fedora 29 中报错nothing appropriate
- 5IP策略实现服务器禁止Ping
- 6win2003开机自动登录后锁定
- 7本地策略提示不能确定应用到此机器的组策略安全性设置的解决方法
- 8限制Win9X/NT系统功能二十六招
- 9windows10彻底关闭自动更新【绝对可行】
- 10win2003 3389手工修改方法