在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 的步骤:

  1. 打开“网络和共享中心”

    • 在 Windows 服务器或 Windows 10/11 中,打开“控制面板” > “网络和共享中心” > “更改适配器设置”。
  2. 选择适配器

    • 选中两块你想要组合在一起的网络适配器。
  3. 右键点击,选择“创建团队”

    • 右键点击选中的网卡,然后选择“新建团队”。
  4. 配置团队设置

    • 弹出的“团队属性”窗口中,可以选择不同的负载均衡模式(例如“动态”或“静态”)。
    • 一般来说,选择“故障转移”模式即可。这种模式会确保如果一个网卡故障,流量会自动切换到另一块网卡。
  5. 选择故障转移模式

    • 在“网络适配器”选项卡中,你可以选择“故障转移”模式。这样,默认情况下,Windows 会使用两块网卡中的主网卡,另一块网卡作为备份,当主网卡出现故障时,流量会自动切换到备用网卡。
  6. 完成设置

    • 点击“确定”,等待适配器组合完成。你会看到一个新的虚拟网卡出现在“网络连接”中,它是由两块物理网卡组成的。

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. 任务调度

如果希望该脚本持续运行,你可以将其添加到任务调度程序中定期执行。

  1. 打开 任务计划程序
  2. 创建一个新的任务,设置触发器为“每 30 秒”或“每分钟”,并设置操作为运行 PowerShell 脚本。

 

  • NIC Teaming:适用于高可用性和负载均衡场景,Windows 提供了简易的配置方式,支持多种故障转移模式。
  • PowerShell脚本:适用于需要手动或基于延迟调整路由表的场景,灵活性较高,但需要手动编写和管理脚本。

根据你的需求,你可以选择适合的方式来实现故障转移。对于生产环境,使用 NIC Teaming 会更加稳定和简便,而使用 PowerShell 脚本则提供了更高的灵活性,可以根据具体条件来切换路由或网卡。


 

posted @ 2024-11-11 01:56  suv789  阅读(449)  评论(0)    收藏  举报