ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows Server 2019 NLB负载均衡与PowerShell实践

Windows Server 2019 NLB负载均衡与PowerShell实践 简介这份图文资料面向 Windows Server 运维工程师与系统管理员聚焦 Windows Server 2019 自带的网络负载均衡NLB软负载方案用于解决业务量增长、网络负荷过重时服务器高可用与高稳定性问题。资源共 1 个 PDF 文件压缩包约 2.03MB内容以图文步骤形式呈现便于对照界面逐步操作与复盘。文档从 NLB 概念与环境要求讲起说明双机三网卡、网络聚合与心跳线的规划思路以及对外虚拟 IP 的使用方式随后完整展开安装前准备、添加网络负载平衡角色与功能、创建 NLB 群集并配置单播模式、心跳间隔与故障恢复策略最后通过模拟故障验证流量能否自动重定向到健康服务器。对于需要快速掌握 Windows 平台负载均衡部署流程、理解心跳机制与存储选型建议的读者可据此搭建实验环境并复现整套操作。目前已有 2227 人学习下载。1. 从两台 Windows Server 2019 说起NLB 到底把负载均衡做在哪一层两台 IIS 前端、一台 SQL 后端业务刚上线流量不大运维先被问「挂一台怎么办」。这时最省钱的路不是买 F5也不是先补 nginx 负载均衡配置而是把 Windows Server 2019 自带的 NLBNetwork Load Balancing用起来。它的反直觉点在于NLB 不是代理不卸载 TLS也不看 HTTP 头集群里每台节点都拥有同一个群集 IP靠端口规则和负载权重在二层/三层把流量分出去响应可以从任意节点直接回给客户端。适合 IIS、文件服务、终端服务这类入口固定、会话不复杂的场景。如果业务要求七层路径分流、SSL 终止或者跨机房调度NLB 只会让你绕远路。2. Windows Server 2019 安装 NLB 角色与网络前置检查NLB 在二层/三层干活安装前最重要的不是点「下一步」而是先把网卡、IP、交换机端口定下来。常见做法是每台节点两块网卡一块专用 IP 用于节点间心跳和远程管理另一块承担群集 IP 和客户端流量。也可以单网卡但心跳和管理流量会跟业务流量混在一起排错时比较难受。Windows Server 2019 对 NLB 的支持没有缩减图形化「网络负载均衡管理器」和 PowerShell 模块都在Server Core 也能装。2.1 装 NLB 之前先把网卡与 IP 规划定下来以两台节点为例NLB01 专用 IP 10.10.20.11NLB02 专用 IP 10.10.20.12群集 IP 10.10.20.20对外服务端口 80 和 443。每台节点至少保留一个没有启用 DHCP 的静态地址不要把 NLB 节点配成 DHCP 客户端。DNS 里把业务域名解析到群集 IP而不是某一台节点。若后面想结合 windows server 2019 故障转移集群搭建NLB 和故障转移集群可以共存但不要让两块网卡承担同一个角色尤其不要在 NLB 专用网卡上勾选「在 DNS 中注册此连接的地址」。2.2 用 Install-WindowsFeature 装 NLB 与图形化管理器在带桌面的 Windows Server 2019 上以管理员身份打开 PowerShell# 安装 NLB 功能包含 PowerShell 模块和图形化管理器 Install-WindowsFeature -Name NLB -IncludeManagementTools # 查看安装结果确认 InstallState 为 Installed Get-WindowsFeature -Name NLB | Select-Object Name, DisplayName, InstallState逻辑说明Install-WindowsFeature是 Server 2019 里推荐的安装方式等价于服务器管理器里勾选「网络负载均衡」。-IncludeManagementTools会顺带装上 nlb.exe、NLB 管理器以及 PowerShell 的 NetworkLoadBalancingClusters 模块。第二行只做校验InstallState显示Installed就说明功能已就位。若节点是 Server Core同样执行这条命令后续全部用 PowerShell 完成。2.3 一张表看清单播、多播、IGMP 多播的取舍模式群集 MAC 地址行为交换机侧要求典型适用单播所有节点使用同一个 MAC网卡原 MAC 被禁用交换机可能学习到同一个 MAC 出现在多个端口触发泛洪小规模、可接受泛洪的测试环境多播节点保留原 MAC额外使用一个多播 MAC需要交换机支持静态多播 MAC 或允许未知多播不想改网卡 MAC 的常规生产环境IGMP 多播使用 IGMP 组播注册交换机按组转发交换机必须开启 IGMP snooping 并正确配置查询器规模较大、交换机可控的环境单播模式最容易搭也最容易在接入交换机上看到 MAC 表抖动多播模式对 Windows 侧改动小但对交换机有要求。选择时先问网络组要交换机型号和端口配置再看业务能不能容忍泛洪。等开销负载均衡往往和端口规则一起出现所有节点处理能力接近时把权重设为相同让流量按等开销方式分布。2.4 新手上线前最容易漏掉的交换机与网卡检查# 查看参与 NLB 的网卡名称、MAC 和链路状态 Get-NetAdapter | Where-Object Status -eq Up | Select-Object Name, MacAddress, LinkSpeed, Status # 只筛选手动配置的 IPv4 地址避免把 DHCP 地址当专用 IP Get-NetIPAddress -AddressFamily IPv4 | Where-Object PrefixOrigin -eq Manual | Select-Object InterfaceAlias, IPAddress, PrefixLength逻辑说明第一段列出活动网卡重点看参与 NLB 的那块网卡链路是否 Up。第二段只筛选手动配置的 IPv4 地址避免将 DHCP 地址误当成专用 IP。别忽略网卡绑定如果服务器上做了 NIC Teaming再叠加 NLB 容易让 MAC 地址和交换机学习变得更复杂除非明确知道组合后的行为否则先拆开绑定再做 NLB。注意不要把 NLB 装在已经启用了 RRAS、NAT 或者第三方防火墙做网关的网卡上这些角色可能改写 ARP 响应导致群集 IP 时通时不通。3. 用 PowerShell 在 Windows Server 2019 上搭出第一个 NLB 集群装完角色后真正的集群对象要在其中一台节点上创建再把另一台节点加进来。图形界面和 PowerShell 两条路都能走但 PowerShell 更容易写进部署脚本也方便后面用 ansible 安装部署那套流程做批量纳管。3.1 New-NlbCluster 与 Add-NlbClusterNode 的最小命令在 NLB01 上执行# 在第一台节点上创建 NLB 集群指定群集 IP、集群名称和网卡 New-NlbCluster -InterfaceName Ethernet -ClusterPrimaryIP 10.10.20.20 -ClusterName web-nlb -SubnetMask 255.255.255.0 # 把 NLB02 加入同一个集群使用专用 IP 通信 Add-NlbClusterNode -NewNodeName NLB02 -NewNodeInterface Ethernet -HostName NLB01 -InterfaceName Ethernet逻辑说明New-NlbCluster在主节点上创建集群-ClusterPrimaryIP是客户端访问的群集 IP-ClusterName是 NLB 内部标识。Add-NlbClusterNode从主节点侧发起-NewNodeName写对端计算机名-NewNodeInterface写对端参与 NLB 的网卡名。执行后用Get-NlbClusterNode确认两台节点都在Converged状态若显示Pending或Failed先检查名称解析和专用 IP 是否互通。参数容易写错的地方网卡名称不是显示名称而是Get-NetAdapter里的 Name中文系统里可能是「以太网」。如果创建时提示找不到接口先执行Get-NlbClusterDriverInfo看 NLB 驱动绑定了哪些网卡。3.2 集群 IP、专用 IP、子网掩码的参数含义参数含义常见错误ClusterPrimaryIP客户端连接的群集 IP一般与业务域名绑定填成节点专用 IP导致客户端只打一台机器SubnetMask群集 IP 的子网掩码需与同网段一致填错后节点无法响应同网段 ARPDedicatedIP每台节点自己的管理 IP不参与负载用 DHCP 获取重启后发生变化HostPriority主机优先级数值越小越优先两台都留默认 1冲突后手工调整其中主机优先级并不等于负载权重。优先级主要在默认主机和某些故障场景中起作用权重才是等开销负载均衡的分流依据。用Set-NlbClusterNode -HostPriority 2可以调整。3.3 NLB 管理器图形界面与 PowerShell 的对应关系很多图文教程习惯从「服务器管理器 → 工具 → 网络负载均衡管理器」进入右键「新建群集」按向导填群集 IP、集群名称、网卡和模式。它和命令行的对应关系其实很清楚图形界面操作PowerShell 等价命令新建群集New-NlbCluster将主机添加到群集Add-NlbClusterNode编辑端口规则Add-NlbClusterPortRule / Set-NlbClusterPortRule设置群集模式Set-NlbCluster -ClusterMode查看节点状态Get-NlbClusterNode图形界面的优点是直观缺点是集群规模一大就难做版本化。把上面几条命令写进脚本节点重装后可以直接恢复配置而不必再点一遍向导。3.4 把第二台节点加入集群时主机优先级怎么排主机优先级从 1 开始数字越小越优先。常见做法是给主节点 1、备节点 2这样在默认主机处理远程控制命令时有个确定顺序。不要为了「负载更均衡」把优先级调乱因为 NLB 的流量分摊靠权重和端口规则不靠优先级。# 调整节点优先级1 和 2 分别对应主备顺序 Set-NlbClusterNode -HostName NLB01 -InterfaceName Ethernet -HostPriority 1 Set-NlbClusterNode -HostName NLB02 -InterfaceName Ethernet -HostPriority 2 # 给节点设置负载权重数值越大承担越多流量 Set-NlbClusterNode -HostName NLB02 -InterfaceName Ethernet -LoadWeight 100逻辑说明LoadWeight只在端口规则选择了「负载均衡」且权重不同的时候起作用。如果所有节点权重相同就是等开销负载均衡新连接会按算法分布到各节点。调整完权重后不需要重启节点但观察Get-NlbClusterNode的连接数时旧连接不会立刻重新分摊。4. NLB 端口规则、亲和性与单播/多播模式怎么调集群建起来只算通了真正决定业务体验的是端口规则和亲和性。它们控制哪些端口被均衡、请求分给谁、同一个客户端会不会一直落到同一台节点。4.1 端口规则等开销负载均衡与权重分配默认情况下创建集群后会生成一条覆盖 0 到 65535 的端口规则。你可以按业务端口拆细# 为 80 和 443 分别建立负载均衡端口规则 Add-NlbClusterPortRule -Port 80 -Protocol TCP -Mode Multiple -Affinity None Add-NlbClusterPortRule -Port 443 -Protocol TCP -Mode Multiple -Affinity Single # 查看当前端口规则 Get-NlbClusterPortRule -Port 80逻辑说明-Mode Multiple表示把连接分散到多个节点对应负载均衡-Mode Single表示只由优先级最高的节点处理常用于管理端口。-Affinity None表示不保持客户端关联Single表示同一客户端 IP 在一段时间内固定落到同一节点。实际配的时候不要一次把所有端口都设成单节点否则负载均衡等于没做。参数可选值影响ModeMultiple / SingleMultiple 才做分流Single 只交给默认主机AffinityNone / Single / Network决定客户端或网段的粘性LoadWeight0-100 或未指定权重越高分到的新连接越多ProtocolTCP / UDP / Both需与业务监听协议一致如果两台节点处理能力一致把权重留成未指定或设置相同值让流量等开销分布。若其中一台要留出资源做维护可以把它的权重降到 50 或 0再用滚动方式下线。4.2 亲和性无、单一、网络三种模式的差异亲和性看起来只是三选项但选错会让后端会话状态出问题。亲和模式作用范围适用场景副作用None不做粘性无状态应用如静态页面登录状态可能需要额外共享存储Single按客户端 IP 粘需要会话保持的 IIS 应用客户端多时分布可能倾斜Network按 C 类网段粘终端集体出口 NAT 的场景同一个 NAT 后的用户全落到一台设置命令如下# 把 443 端口的亲和性改为按客户端 IP Set-NlbClusterPortRule -Port 443 -Affinity Single # 换成按网段粘性 Set-NlbClusterPortRule -Port 443 -Affinity Network逻辑说明Set-NlbClusterPortRule修改已有规则不需要删掉重建。Single和Network都属于粘性策略客户端请求在超时前会固定到同一节点。若应用已经用 Redis 或 SQL Server 集中保存会话优先用Affinity None让新连接真正均摊。4.3 单播、多播、IGMP 多播配置命令与交换机侧配合群集模式建好后还能改# 查看当前群集模式 Get-NlbCluster | Select-Object ClusterName, ClusterMode # 切换为多播模式避免单播 MAC 泛洪 Set-NlbCluster -ClusterMode Multicast # 如果交换机支持 IGMP snooping可切换为 IGMP 多播 Set-NlbCluster -ClusterMode IGMPMulticast逻辑说明ClusterMode支持Unicast、Multicast、IGMPMulticast。Unicast 会在节点网卡上使用同一个 MAC交换机 MAC 表可能只学到最近一个端口导致其他节点收不到流量。Multicast 给集群分配一个多播 MAC节点保留自己的 MAC对交换机的要求是允许该多播地址。IGMPMulticast 需要交换机开启 IGMP snooping并由网络设备担任查询器。切换模式会短暂断流放在维护窗口做。注意如果集群跨交换机或者跨 VLAN先确认网络侧已经放通群集 IP 的 ARP 和组播流量否则客户端会看到「有时能连、有时超时」。4.4 心跳、远程控制端口和防火墙端口NLB 节点之间用心跳判断成员是否存活默认每隔 1 秒发送。远程控制端口默认 2504 到 2505 用于 nlb.exe 管理。若 Windows 防火墙策略较严需要确认这些流量没有在节点间被拦。# 查看 NLB 相关防火墙规则是否启用 Get-NetFirewallRule -DisplayName *Network Load Balancing* | Select-Object DisplayName, Enabled, Direction, Action # 在节点间测试远程控制端口连通性 Test-NetConnection -ComputerName NLB02 -Port 2504逻辑说明Get-NetFirewallRule过滤 NLB 自带的规则Enabled为 True 才说明放行。Test-NetConnection只测 TCP 可达不覆盖所有心跳通信如果端口不通先看域配置文件、专用配置文件是否被不同策略覆盖。不要在 NLB 网卡上再绑其他地址心跳源地址混乱会让节点频繁退出集群。5. NLB 集群验证、排错与自动化维护技巧5.1 用 Get-NlbCluster 和事件日志确认集群真正收敛# 一眼看集群、节点、端口规则 Get-NlbCluster | Format-List ClusterName, ClusterMode, ClusterIPAddress Get-NlbClusterNode | Format-Table HostName, NodeState, CurrentConnections Get-NlbClusterPortRule | Format-Table Port, Protocol, Mode, Affinity逻辑说明NodeState为 Converged 才算稳定Pending说明节点还在同步。事件查看器里看「Windows 日志 → 系统」来源为NLB或Microsoft-Windows-NLB的条目常见有节点加入、节点收敛、心跳丢失。验证阶段从一台客户端分别访问群集 IP 和专用 IP确认只有群集 IP 走均衡专用 IP 只做管理。5.2 抓包与交换机侧排查两条线NLB 的通不通问题经常在第三方设备上。客户端 ping 群集 IP 时抓包若看到 ARP 请求有去无回检查交换机是否禁用了多播 MAC 或者端口安全绑定了单个 MAC。IIS 日志显示两个节点都在收请求但会话反复掉线看亲和性是否被设成了 None。节点只收心跳不发流量检查专用 IP 和群集 IP 是否配在同一网卡以及是否有其他 NIC Teaming 驱动介入。5.3 用 Ansible 和 Zabbix 把 NLB 节点纳入日常巡检# Ansible 片段检查 NLB 功能与节点状态 - hosts: nlb_nodes tasks: - name: 获取 NLB 集群节点状态 win_shell: Get-NlbClusterNode | Select-Object HostName, NodeState register: nlb_state - name: 输出状态 debug: var: nlb_state.stdout_lines逻辑说明win_shell走 WinRM 连接 Windows Server 2019 节点把Get-NlbClusterNode的结果收集回控制端Zabbix 侧可以用相同命令配自定义 item或者用zabbix_sender上报节点状态。生产里更稳的做法是把 NLB 节点的专用 IP 列入监控群集 IP 单独做可用性探测避免节点专用 IP 正常但群集 IP 已经不通。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进