在Windows中,通过两块网卡和两个网络适配器实现故障转移(Failover)可以采用网络接口绑定(NIC Teaming)或者使用路由表的手动切换。这里我会介绍使用Windows自带的 NIC Teaming 功能来实现两个网卡之间的自动故障转移,以及通过 PowerShell 来设置故障转移的基本示例。
在Windows中,通过两块网卡和两个网络适配器实现故障转移(Failover)可以采用网络接口绑定(NIC Teaming)或者使用路由表的手动切换。这里我会介绍使用Windows自带的 NIC Teaming 功能来实现两个网卡之间的自动故障转移,以及通过 PowerShell 来设置故障转移的基本示例。
1. 使用 Windows NIC Teaming 实现故障转移
Windows Server(2012 及更高版本)和部分 Windows 10/11 专业版和企业版支持 NIC Teaming。通过 NIC Teaming,你可以将两块网卡(物理适配器)绑定为一个虚拟适配器,这样可以提高网络可靠性和带宽,同时在某一块网卡出现故障时,自动切换到另一块网卡。
配置 NIC Teaming 的步骤:
-
打开“网络和共享中心”:
- 在 Windows 服务器或 Windows 10/11 中,打开“控制面板” > “网络和共享中心” > “更改适配器设置”。
-
选择适配器:
- 选中两块你想要组合在一起的网络适配器。
-
右键点击,选择“创建团队”:
- 右键点击选中的网卡,然后选择“新建团队”。
-
配置团队设置:
- 弹出的“团队属性”窗口中,可以选择不同的负载均衡模式(例如“动态”或“静态”)。
- 一般来说,选择“故障转移”模式即可。这种模式会确保如果一个网卡故障,流量会自动切换到另一块网卡。
-
选择故障转移模式:
- 在“网络适配器”选项卡中,你可以选择“故障转移”模式。这样,默认情况下,Windows 会使用两块网卡中的主网卡,另一块网卡作为备份,当主网卡出现故障时,流量会自动切换到备用网卡。
-
完成设置:
- 点击“确定”,等待适配器组合完成。你会看到一个新的虚拟网卡出现在“网络连接”中,它是由两块物理网卡组成的。
2. PowerShell脚本实现基于延迟的故障转移
如果你不想使用 NIC Teaming,而是希望基于网络延迟(例如,主网卡网络出现问题时,自动切换到备份网卡),你可以使用 PowerShell 脚本来监控网络连接,并在故障发生时动态更新路由。
示例 PowerShell 脚本:自动监测延迟并切换网卡
powershellCopy Code
# 设置主网卡和备用网卡的默认网关
$primaryGateway = "192.168.1.1" # 主网卡的网关
$secondaryGateway = "192.168.2.1" # 备用网卡的网关
# 设置目标服务器(测试网络连通性)
$targetIp = "8.8.8.8" # Google的公共DNS地址(可以选择其他地址)
# 设置延迟阈值
$delayThreshold = 100 # 延迟超过此值则切换网卡
# 检查网络延迟并根据延迟自动切换网卡
function Check-NetworkLatency {
# 测试与目标IP的连接
$pingResult = Test-Connection -ComputerName $targetIp -Count 4 -Quiet
if ($pingResult) {
# 获取平均延迟
$latency = (Test-Connection -ComputerName $targetIp -Count 4 | Measure-Object ResponseTime -Average).Average
Write-Host "平均延迟: $latency ms"
# 如果延迟超过阈值,切换到备用网卡
if ($latency -gt $delayThreshold) {
Write-Host "延迟超过阈值,切换到备用网卡..."
# 移除主网卡的路由
Remove-NetRoute -DestinationPrefix 0.0.0.0/0 -NextHop $primaryGateway -Confirm:$false
# 添加备用网卡的路由
New-NetRoute -DestinationPrefix 0.0.0.0/0 -NextHop $secondaryGateway
Write-Host "已切换到备用网卡的网关: $secondaryGateway"
} else {
Write-Host "延迟正常,使用主网卡"
}
} else {
Write-Host "无法连接到目标服务器: $targetIp"
}
}
# 定时检查网络延迟,每30秒执行一次
while ($true) {
Check-NetworkLatency
Start-Sleep -Seconds 30 # 每30秒检查一次
}
说明:
- Test-Connection 用于检测网络延迟。如果目标主机(比如 Google 的 8.8.8.8)响应得很慢,脚本会切换路由到备用网卡。
- Remove-NetRoute 和 New-NetRoute 用于删除当前网关并添加备用网关,实现在网络延迟过高时自动切换到备用网络。
- 脚本使用 Start-Sleep 来定时每隔 30 秒检查一次网络延迟。
3. 任务调度
如果希望该脚本持续运行,你可以将其添加到任务调度程序中定期执行。
- 打开 任务计划程序。
- 创建一个新的任务,设置触发器为“每 30 秒”或“每分钟”,并设置操作为运行 PowerShell 脚本。
- NIC Teaming:适用于高可用性和负载均衡场景,Windows 提供了简易的配置方式,支持多种故障转移模式。
- PowerShell脚本:适用于需要手动或基于延迟调整路由表的场景,灵活性较高,但需要手动编写和管理脚本。
根据你的需求,你可以选择适合的方式来实现故障转移。对于生产环境,使用 NIC Teaming 会更加稳定和简便,而使用 PowerShell 脚本则提供了更高的灵活性,可以根据具体条件来切换路由或网卡。