You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell实现故障转移集群资源的异步移动?

实现故障转移集群组的异步移动

你的问题核心是将同步循环执行的Move-ClusterGroup改为异步并行执行,和GUI批量移动的逻辑对齐。以下两种方案可以实现这个需求:

方法1:后台作业(兼容PowerShell 5.1及以上)

后台作业会在独立进程中运行每个移动任务,无需等待前一个任务完成再启动下一个:

$clusterGroups = Get-ClusterGroup | Where-Object {$_.State -eq "Online" -and $_.Name -match "SQL Server"}
$targetNode = "你的目标节点名称" # 替换为实际目标节点

# 批量创建后台移动作业
$jobs = $clusterGroups | ForEach-Object {
    Write-Host "启动移动任务: $($_.Name) 从 $($_.OwnerNode) 到 $targetNode..."
    Start-Job -ScriptBlock {
        param($groupName, $target)
        Move-ClusterGroup -Name $groupName -Node $target
    } -ArgumentList $_.Name, $targetNode
}

# 等待所有作业完成并获取结果
Write-Host "等待所有移动任务结束..."
$jobs | Wait-Job | Receive-Job
Remove-Job -Job $jobs # 清理已完成的作业

Write-Host "所有集群组移动完成"

方法2:ForEach-Object -Parallel(PowerShell 7+推荐)

如果你的环境是PowerShell 7或更高版本,-Parallel参数能更简洁地实现并行执行:

$clusterGroups = Get-ClusterGroup | Where-Object {$_.State -eq "Online" -and $_.Name -match "SQL Server"}
$targetNode = "你的目标节点名称" # 替换为实际目标节点

$clusterGroups | ForEach-Object -Parallel {
    Write-Host "正在移动 $($_.Name) 从 $($_.OwnerNode) 到 $using:targetNode..."
    Move-ClusterGroup -Name $_.Name -Node $using:targetNode
    Write-Host "$($_.Name) 移动完成"
} -ThrottleLimit 5 # 可根据集群性能调整并发数

Write-Host "所有集群组移动完成"

关键注意事项

  • 必须指定-Node $targetNode参数,否则Move-ClusterGroup会自动选节点,和GUI操作逻辑不一致。
  • 并发数(-ThrottleLimit)不要设置过高,避免给集群带来过大负载,默认5是比较安全的数值。
  • 若需排查异常,可通过Get-Job查看后台作业的运行状态。

内容的提问来源于stack exchange,提问作者Purclot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:03:13