iisARR负均衡

news2025/5/23 18:13:32

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的零停机部署!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人脸识别备案开启安全防护模式!紧跟《办法》!

国家互联网信息办公室与公安部于 2025 年 3 月 13 日联合公布了《人脸识别技术应用安全管理办法》&#xff08;以下简称《办法》&#xff09;&#xff0c;并自 2025 年 6 月 1 日起正式施行。其中&#xff0c;人脸识别备案成为了规范技术应用、守护信息安全的关键一环。​ 一、…

新浪《经济新闻》丨珈和科技联合蒲江政府打造“数字茶园+智能工厂+文旅综合体“创新模式

5月14日&#xff0c;新浪网《经济新闻》频道专题报道珈和科技在第十四届四川国际茶业博览会上的精彩亮相&#xff0c;并深度聚焦我司以数字技术赋能川茶产业高质量发展创新技术路径&#xff0c;及在成都市“茶业建圈强链”主题推介会上&#xff0c;珈和科技与蒲江县人民政府就智…

50、js 中var { ipcRenderer } = require(‘electron‘);是什么意思?

在 JavaScript 中&#xff0c;var { ipcRenderer } require(‘electron’); 这行代码的含义是&#xff1a; 1. require(‘electron’) 这是 Node.js 的模块引入语法&#xff0c;用于加载 Electron 的核心模块。electron 是 Electron 框架的主模块&#xff0c;提供了构建桌面…

计算机底层的多级缓存以及缓存带来的数据覆盖问题

没有多级缓存的情况 有多级缓存的情况 缓存带来的操作覆盖问题 锁总线带来的消耗太大了。

SpringBoot-1-入门概念介绍和第一个Spring Boot项目

文章目录 1 开发JAVA EE应用1.1 EJB1.2 Spring框架1.2.1 IoC(Inversion of Control)控制反转1.2.2 DI(Dependency Injection)依赖注入1.2.3 AOP面向切面编程1.3 Spring Boot1.4 Spring Cloud框架1.5 开发工具2 创建Spring Boot项目2.1 在线项目生成向导2.2 使用IDEA导入项目2.3…

基于FPGA的电子万年历系统开发,包含各模块testbench

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于FPGA的电子万年历系统开发,包含各模块testbench。主要包含以下核心模块&#xff1a; 时钟控制模块&#xff1a;提供系统基准时钟和计时功能。 日历计算模块&#xff1a…

MySQL 可观测性最佳实践

MySQL 简介 MySQL 是一个广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以其高性能、可靠性和易用性而闻名&#xff0c;适用于各种规模的应用&#xff0c;从小型网站到大型企业级系统。 监控 MySQL 指标是维护数据库健康、优化性能和确保数据…

01-jenkins学习之旅-window-下载-安装-安装后设置向导

1 jenkins简介 百度百科介绍&#xff1a;Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 [1] Jenkins官网地址 翻译&…

免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷

近日&#xff0c;苏州自动驾驶巴士线路——阳澄数谷示范线正式上线&#xff0c;即日起向全民免费开放试乘体验&#xff01; 在苏州工业园区地铁3号线倪浜•阳澄数谷站外&#xff0c;一辆辆黑、白配色的小巴正在道路上有条不紊地行驶。与普通公交不同的是&#xff0c;小巴造型奇…

每日Prompt:像素风格插画

提示词 像素风格插画&#xff0c;日式漫画脸&#xff0c;画面主体为一位站在路边的男孩&#xff0c;人物穿着黑色冲锋衣&#xff0c;手里拿着手机&#xff0c;男孩靠坐在机车旁边&#xff0c;脚边依偎着一只带着小摩托车头盔的小小猫&#xff0c;背景是雨中&#xff0c;身旁停…

Windows逆向工程提升之二进制分析工具:HEX查看与对比技术

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 十六进制查看工具 应用于逆向工程的知识点 ​编辑 二进制对比工具 应用于逆向工程的知识点 十六进制查看工具 十六进制查看器是逆向工程的基础工具&#xff0c;它可以以十六进制格式…

2024游戏安全白皮书:对抗激烈!PC游戏外挂功能数增长超149%,超85%移动外挂为定制挂(附获取方式)

2024 年&#xff0c;中国游戏市场实际销售收入达 3257.83 亿元&#xff0c;同比增长 7.53%&#xff1b;用户规模 6.74 亿人&#xff0c;同比增长 0.94%&#xff0c;再创新高。这份庞大的数据背后&#xff0c;更是对安全防线实力的严峻拷问。 在广东省游戏产业协会的指导下&…

12kV 环保气体绝缘交流金属封闭开关设备现场交流耐压试验规范

范围 本文件规定了12kV环保气体绝缘交流金属封闭开关设备现场交流耐压试验的被试设备及试验接线、试验条件、试验步骤、试验判据及异常处理方法。 本文件适用于12kV环保气体绝缘交流金属封闭开关设备现场交流耐压试验&#xff0c;其他气体绝缘交流金属封闭开关设备可参照执行。…

位图算法——判断唯一字符

这道题有多种解法&#xff0c;可以创建hash数组建立映射关系判断&#xff0c;但不用新的数据结构会加分&#xff0c;因此我们有“加分”办法——用位图。 我们可以创建一个整型变量&#xff08;32位&#xff09;而一共才26个字母&#xff0c;所以我们只要用到0-25位即可&#…

【UE5】环形菜单教程

效果 步骤 1. 下载图片资源&#xff1a;百度网盘 请输入提取码 提取码:fjjx 2. 将图片资源导入工程&#xff0c;如下 3. 新建3个控件蓝图&#xff0c;这里分别命名为“WBP_CircularMenu”、“WBP_Highlight”、“WBP_Icon” 4. 打开“WBP_Icon”&#xff0c;设置“所需” 添加…

Athena 执行引擎:在线服务计算的效率王者

引言 在在线服务领域&#xff0c;计算任务呈现出独特的特性&#xff1a;一方面&#xff0c;数据量通常不会过于庞大&#xff0c;因为在线服务对耗时和响应速度有着严苛要求&#xff1b;另一方面&#xff0c;计算任务具有可控性&#xff0c;其大多并非由用户实时输入动态生成&a…

飞桨paddle ‘ParallelEnv‘ object has no attribute ‘_device_id‘【已解决】

书借上回&#xff0c;自从我反复重装paddle之后&#xff0c;我发现了&#xff0c;只要pip list中有库&#xff0c;但是代码报错&#xff0c;那就是飞桨没把代码更新完全&#xff0c;只能自己去改源代码 我又遇到报错了&#xff1a; 根据报错信息&#xff0c;找到ParallelEnv报…

微信小程序之Promise-Promise初始用

我们来尝试使用Promise。 1、需求&#xff0c;做个抽奖的按钮&#xff0c; 抽奖规则&#xff1a; 30%的几率中奖&#xff0c;中奖会提示恭喜恭喜&#xff0c;奖品为10万 RMB 劳斯莱斯优惠券&#xff0c;没中奖会提示再接再厉。 2、先搭界面&#xff1a; <view class&qu…

准备好,开始构建:由 Elasticsearch 向量数据库驱动的 Red Hat OpenShift AI 应用程序

作者&#xff1a;来自 Elastic Tom Potoma Elasticsearch 向量数据库现在被 “基于 LLM 和 RAG 的 AI 生成” 验证模式支持。本文将指导你如何开始使用。 Elasticsearch 已原生集成业内领先的生成式 AI 工具和服务提供商。欢迎观看我们的网络研讨会&#xff0c;了解如何突破 RA…

RNN神经网络

RNN神经网络 1-核心知识 1-解释RNN神经网络2-RNN和传统的神经网络有什么区别&#xff1f;3-RNN和LSTM有什么区别&#xff1f;4-transformer的归一化有哪几种实现方式 2-知识问答 1-解释RNN神经网络 Why&#xff1a;与我何干&#xff1f; 在我们的生活中&#xff0c;很多事情…