当前位置: 首页 > news >正文

iisARR负均衡

IIS + ARR负载均衡详细配置指南

🎯 什么是ARR(Application Request Routing)

ARR是IIS的一个扩展模块,它可以:

  • 负载均衡:将请求分发到多个服务器
  • 反向代理:隐藏后端服务器架构
  • 健康检查:自动检测服务器状态
  • 故障转移:自动切换到健康的服务器

🏗️ 架构原理图

客户端请求流程:
[用户浏览器] → [IIS主站点 + ARR] → [后端API实例们]详细流程:
用户请求: http://api.company.com/api/users↓
[IIS主站点:80端口]
[ARR模块负载均衡]↓ (轮询分发)┌─────────┼─────────┐↓         ↓         ↓
[API实例1]  [API实例2]  [API实例3]
[端口5001]  [端口5002]  [端口5003]

工作原理

  1. 接收请求:用户访问主站点(80端口)
  2. ARR处理:ARR模块根据负载均衡算法选择后端服务器
  3. 转发请求:将请求转发到选中的后端API实例
  4. 返回响应:后端处理完成后,通过ARR返回给用户
  5. 用户无感知:用户完全不知道后端有多个实例

📋 手动配置步骤

第一步:安装ARR模块

1.1 下载ARR
  • 访问 IIS官网
  • 下载 Application Request Routing 3.0
  • 或使用Web Platform Installer搜索"ARR"
1.2 安装ARR
双击安装包 → 按默认选项安装 → 重启IIS管理器
1.3 验证安装

打开IIS管理器,应该能看到:

  • 服务器级别:Application Request Routing Cache
  • 服务器级别:Server Farms(服务器场)

第二步:创建后端API实例

2.1 创建应用程序池
IIS管理器 → 应用程序池 → 右键"添加应用程序池"创建三个应用程序池:
- 名称:API-Instance-1,.NET CLR版本:无托管代码
- 名称:API-Instance-2,.NET CLR版本:无托管代码
- 名称:API-Instance-3,.NET CLR版本:无托管代码
2.2 创建网站
IIS管理器 → 网站 → 右键"添加网站"创建三个网站:
网站1:
- 网站名称:API-Instance-1
- 应用程序池:API-Instance-1
- 物理路径:C:\inetpub\wwwroot\api1
- 端口:5001网站2:
- 网站名称:API-Instance-2
- 应用程序池:API-Instance-2
- 物理路径:C:\inetpub\wwwroot\api2
- 端口:5002网站3:
- 网站名称:API-Instance-3
- 应用程序池:API-Instance-3
- 物理路径:C:\inetpub\wwwroot\api3
- 端口:5003
2.3 复制API文件到各实例
将编译好的API文件复制到:
- C:\inetpub\wwwroot\api1\
- C:\inetpub\wwwroot\api2\
- C:\inetpub\wwwroot\api3\确保每个目录都包含完整的API文件
2.4 测试各实例
测试访问:
- http://localhost:5001/api/health
- http://localhost:5002/api/health
- http://localhost:5003/api/health确保每个实例都能正常响应

第三步:配置服务器场(Server Farm)

3.1 创建服务器场
IIS管理器 → 选择服务器节点 → 双击"Server Farms"
→ 右键空白区域 → "Create Server Farm"服务器场设置:
- Server farm name: API-Farm
- 点击"Next"
3.2 添加服务器
在"Add Server"对话框中逐一添加:服务器1:
- Server address: 127.0.0.1
- HTTP port: 5001
- Weight: 100 (权重,相等表示平均分配)服务器2:
- Server address: 127.0.0.1
- HTTP port: 5002
- Weight: 100服务器3:
- Server address: 127.0.0.1
- HTTP port: 5003
- Weight: 100点击"Finish"完成
3.3 配置负载均衡算法
IIS管理器 → Server Farms → API-Farm → 双击"Load Balance"负载均衡算法选择:
○ Weighted round robin (加权轮询) - 推荐
○ Weighted total traffic (加权总流量)
○ Least current request (最少当前请求)
○ Least response time (最少响应时间)选择"Weighted round robin",点击"Apply"
3.4 配置健康检查
IIS管理器 → Server Farms → API-Farm → 双击"Health Test"健康检查设置:
- URL test: /api/health
- Interval (seconds): 30
- Timeout (seconds): 10
- Acceptable status code: 200
- Match expected response body: 可选填入"healthy"点击"Apply"
3.5 配置监控和日志
IIS管理器 → Server Farms → API-Farm → 双击"Monitoring and Management"设置:
- Enable logging: ✓ 勾选
- Log file directory: C:\inetpub\logs\LogFiles\ARR
- Enable data collection: ✓ 勾选点击"Apply"

第四步:配置URL重写规则

4.1 创建负载均衡主站点
IIS管理器 → 网站 → 右键"添加网站"主站点设置:
- 网站名称:API-LoadBalancer
- 应用程序池:DefaultAppPool
- 物理路径:C:\inetpub\wwwroot\api-lb
- 端口:80 (或其他主要端口)
4.2 在主站点创建web.config
在 C:\inetpub\wwwroot\api-lb\ 目录下创建 web.config 文件:<?xml version="1.0" encoding="utf-8"?>
<configuration><system.webServer><rewrite><rules><!-- API请求负载均衡规则 --><rule name="API Load Balance" stopProcessing="true"><match url="^api/(.*)" /><action type="Rewrite" url="http://api-farm/api/{R:1}" /></rule><!-- 健康检查规则 --><rule name="Health Check" stopProcessing="true"><match url="^health$" /><action type="Rewrite" url="http://api-farm/api/health" /></rule><!-- 默认规则 - 可选 --><rule name="Default" stopProcessing="false"><match url="(.*)" /><action type="Rewrite" url="http://api-farm/{R:1}" /></rule></rules></rewrite><!-- ARR设置 --><proxy enabled="true" /></system.webServer>
</configuration>
4.3 启用代理功能
IIS管理器 → 选择服务器节点 → 双击"Application Request Routing Cache"
→ 点击右侧"Server Proxy Settings"
→ 勾选 "Enable proxy" 
→ 点击"Apply"

第五步:测试负载均衡

5.1 基础功能测试
访问主站点:
http://localhost/api/health应该能够正常返回健康检查结果
每次刷新可能会命中不同的后端实例
5.2 负载分发测试

在每个API实例中添加标识代码:

// 在API的健康检查端点中添加实例标识
[HttpGet("health")]
public IActionResult Health()
{var instanceName = Environment.GetEnvironmentVariable("INSTANCE_NAME") ?? "unknown";var response = new{status = "healthy",instance = instanceName,timestamp = DateTime.UtcNow,server = Environment.MachineName};return Ok(response);
}
5.3 故障转移测试
1. 停止其中一个API实例的应用程序池
2. 访问 http://localhost/api/health
3. 确认请求被自动转发到其他健康实例
4. 重启停止的实例,确认重新加入负载均衡

🔧 零停机部署手动操作

场景:更新API代码

步骤1:准备新版本
1. 编译新版本API到临时目录
2. 确保新版本在开发环境测试通过
步骤2:逐一更新实例
更新实例1:
1. IIS管理器 → Server Farms → API-Farm → Servers
2. 右键 127.0.0.1:5001 → "Take Offline"
3. 等待30秒,让ARR停止向该实例发送请求
4. 停止应用程序池 "API-Instance-1"
5. 备份 C:\inetpub\wwwroot\api1 到 api1-backup-时间戳
6. 复制新版本文件到 C:\inetpub\wwwroot\api1
7. 启动应用程序池 "API-Instance-1"
8. 访问 http://localhost:5001/api/health 确认正常
9. 右键 127.0.0.1:5001 → "Bring Online"
10. 等待2分钟观察重复以上步骤更新实例2和实例3
步骤3:验证更新
1. 访问主站点确认新功能正常
2. 检查ARR日志确认负载分发正常
3. 监控一段时间确保稳定

📊 监控和管理

查看服务器场状态

IIS管理器 → Server Farms → API-Farm → Servers状态含义:
- Available: 服务器健康,正在接收请求
- Unavailable: 服务器不健康,ARR不会向其发送请求
- Offline: 手动设置为离线状态
- Draining: 正在排空现有连接,不接收新请求

查看实时统计

IIS管理器 → Server Farms → API-Farm → 双击"Monitoring and Management"可以看到:
- 当前活跃连接数
- 总请求数
- 失败请求数
- 平均响应时间
- 每个服务器的负载情况

查看日志

ARR日志位置:
C:\inetpub\logs\LogFiles\ARR\日志内容包含:
- 请求时间
- 客户端IP
- 转发到的后端服务器
- 响应状态码
- 响应时间

⚠️ 常见问题和解决方案

问题1:404错误

现象:访问主站点返回404解决方案:
1. 检查web.config中的重写规则是否正确
2. 确认Server Farm名称与重写规则中的名称一致
3. 检查是否启用了代理功能

问题2:502 Bad Gateway

现象:访问返回502错误解决方案:
1. 检查后端API实例是否正常运行
2. 查看ARR日志确认转发地址是否正确
3. 检查防火墙是否阻止了内部端口访问

问题3:负载不均衡

现象:请求总是转发到同一个实例解决方案:
1. 检查负载均衡算法设置
2. 确认各服务器权重设置是否相等
3. 检查是否启用了会话保持(Session Affinity)

问题4:健康检查失败

现象:实例显示为Unavailable解决方案:
1. 手动访问健康检查URL确认API正常
2. 检查健康检查配置的URL路径是否正确
3. 确认预期的响应内容设置

🎯 实际部署建议

生产环境配置

1. 使用独立的负载均衡服务器
2. 配置SSL证书和HTTPS重定向
3. 设置合适的超时时间
4. 启用请求日志和监控
5. 配置故障通知机制

性能优化

1. 调整应用程序池的并发连接数
2. 配置ARR的缓存策略
3. 优化健康检查频率
4. 设置合理的权重分配

安全配置

1. 限制内部端口的外部访问
2. 配置IP白名单
3. 启用请求过滤
4. 设置速率限制

通过以上详细步骤,您就可以手动配置一个完整的IIS + ARR负载均衡系统,实现API的零停机部署!

相关文章:

  • indicator-sysmonitor 在Ubuntu 右上角实时显示CPU/MEM/NET的利用率
  • 实现一个前端动态模块组件(Vite+原生JS)
  • anaconda的c++环境与ros2需要的系统变量c++环境冲突
  • 冲刺卷软考总结-案例分析
  • MySQL索引事务
  • python 标准库
  • C++028(变量的作用域)
  • IDEA启动报错:Cannot invoke “org.flowable.common.engine.impl.persistence.ent
  • x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级
  • [Harmony]WebView基本用法
  • ARM Linux远程调试
  • 数字孪生驱动的离散制造智能升级:架构设计与工程实践
  • 2025中国企业出海:技术如何成为增长引擎
  • 【JavaEE】(1) 计算机如何工作
  • Windows 平台 TCP 通信开发指南
  • Golang 并发小结
  • 计算机系统组成
  • 烦了。。。。。
  • 语法--05--句子成分
  • 6个月Python学习计划 Day 1
  • 建设网站采用的网络技术/方象科技的企业愿景
  • av做视频在线观看网站/浏览器2345网址导航下载安装
  • 网站源码什么意思/广告平台网
  • 360免费建站空间/网站页面优化包括
  • 无锡企业如何建网站/长沙免费网站建站模板
  • 网站获取访客手机号源码/苹果被曝开发搜索引擎对标谷歌