1.配置:

第一步先创建Server Farms,然后add两个server,主要根据端口进行区分。如果只有一台机器,可以通过127.0.0.1和ip地址进行区分,例如127.0.0.1:8038和10.10.1.1:8039

第二步选择 Routing Rules,右侧的URK Rewrite设置,AddRule,

  •   在第一个pattern配置中更增加正则,例如我的地址是http://yumingcom/service/serverconfig.aspx?a=2,我配置的正则是 ^service/(.+)
  •   第二个conditions里面增加域名匹配,

AR路由器等价负载均衡_负载均衡

  • 第三个 Action里面type选择Rote to server farm,选的就是刚才第一步骤增加的server,path是/service/{R:1},同时记得选择stop处理后续的请求。

AR路由器等价负载均衡_负载均衡_02

  • 第四步,如果需要获取代理前的请求参数,需要自定义,例如可以自定义参数HTTP_X-Original-URI

AR路由器等价负载均衡_负载均衡_03

最后达到的效果是 :

访问 http://yuming.com/service/serverconfig.aspx?a=2的时候,会自动代理到对应的server


2.遇到的问题:

没有配置 Application Request Routing Cache 下的 proxy




先配置日志:

http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis

然后找到原因(是因为没有启动 In the server pane, double-click Application Request Routing Cache 下的 proxy)

https://blogs.msdn.microsoft.com/asiatech/2011/08/24/return-404-4-not-found-when-url-rewrite/


配置的过程如下:

http://www.iis.net/learn/extensions/configuring-application-request-routing-arr/creating-a-forward-proxy-using-application-request-routing

3.参考配置:


     .net web 使用IIS ARR(Application Request Route)技术实现web的高性能、高可靠、易扩展及负载均衡。ARR的使用请参考 IIS负载均衡-Application Request Route详解

     一般应用场景见下图所示,其中一台服务器只做ARR服务器,接受客户端发来的请求,根据配置的负载均衡算法,把请求转发给真正的请求处理服务器,如下图ServerFarm中的服务器B或C,由服务器B或服务器C来处理请求把处理结果返回给ARR服务器A,ARR服务器再把处理结果返回客户端。

AR路由器等价负载均衡_负载均衡_04

     我们的ARR服务器配置很好,只做ARR服务器有点浪费,为了实现高并发访问,我想ARR服务器做ARR服务的同时做应用程序服务器,即替ServerFarm中的服务器承担工作量。网上搜索了很多资料说是无法实现,但经我摸索通过配置url rewrite规则实现了我的需求。假定ARR服务器以80端口对外提供服务,ARR接收到80端口请求后,也会根据负载均衡规则转发请求给自己的8080端口上的web应用进行处理请求或者其他服务的8080端口上的web应用。实现大致步骤

1、ServerFarm中添加ARR服务器作为负载均衡服务器,注意端口

AR路由器等价负载均衡_服务器_05

ServerFarm列表

AR路由器等价负载均衡_web应用_06

2、url rewrite规则配置,ARR服务器指定端口的http请求会被转发给ServerFarm中的服务器



AR路由器等价负载均衡_AR路由器等价负载均衡_07


实现后部署图如下图示

 


AR路由器等价负载均衡_负载均衡_08

使用ARR后的一些问题及解决:

ARR服务器一般可以作为web 静态资源(js、图片等)服务器,通过配置url 重写规则,静态资源请求ARR予以处理,不再转发给其它服务器

使用ARR后,Session不要选择在进程中存储,需要选择使用 StateServer方式或SqlServer存储。如果坚持在进程中存储的话,可用选择使用客户端亲缘性(Client affinity),即客户所有的请求都有相同的服务器进行响应,不会转发到其它服务器,这牺牲了可靠性,当这台服务器挂掉时,请求无法被转发到其它服务器进行服务,结果就是客户端请求无响应。

使用ARR后各负载服务器上的web应用文件不一致的问题(如服务器b上上传了部分图片在自己Upload文件夹里,服务器c上传了部分图片在自己的Upload文件夹里,但是用户访问服务器a时,请求的图片可能在服务器b上存储时,服务器a返回FileNotFound等类似的问题),解决方法:文件上传统一放到一台文件服务器上(如服务器a),各个服务器上面的web应用通过配置虚拟目录指向统一的文件服务器目前,这样上传、读取都在统一的文件服务a上面,不会出现各个web应用各自只有自己的文件没有其他服务器文件的问题。