在具有50个群集的高可用性环境(两个DC,主要和备用)中。每个群集中有5到6个节点。我想确保每个群集中的所有节点都是“Online”(状态),并在“Primary”(OwnerNode)中运行。任何显示其他节点都必须注意。故障转移群集警报自动化
我正在使用数组将所需信息存储在foreach
循环中。问题是,编译时间太长。我想尽快完成它。
$Clusternodes= * some 50 elements *
$Standbynodes= * some 50 elements *
foreach ($cluster in $Clusternodes) {
$NotOnline += Get-ClusterGroup -Cluster $Cluster |
where {$_.State -ne "Online"} |
Select-Object Name,OwnerNode,State
foreach ($node in $Standbynodes) {
$Standbys += Get-ClusterGroup -Cluster $Cluster |
where {$_.OwnerNode -eq "$node"} |
Select-Object Name,OwnerNode,State
}
}
编辑:
Get-clustergroup -Cluster $Cluster
返回在每个簇5至6项。输出包含三列Name,OwnerNode,State。
我将根据其状态(无论是否正在运行)和所有者节点(无论是在主DC还是从DC中)将每个条目存储在数组中。因此,我想要四个数组。前者很容易,后者则不是。因为它本身是另外两个阵列,每个阵列有50个奇数元素。因此我使用下面提到的哈希表。但是,当我尝试下面的代码时,它总是返回一个空数组。
$Clusternodes = * some 50 elements *
$Standbynodes = * some 50 elements *
$Primarynodes = * some 50 elements *
$pr = @{}
$sb = @{}
$Standbynodes | ForEach-Object { $sb[$_] = $true }
$Primarynodes | ForEach-Object { $pr[$_] = $true }
$RunninginPrimary = @()
$NotRunninginPrimary = @()
$RunninginStandby = @()
$NotRunninginStandby = @()
foreach ($cluster in $Clusternodes) {
$c = Get-ClusterGroup -Cluster $Cluster
$NotRunninginStandby += $c | Where-Object {
($_.State -ne "Online") -and ($sb.ContainsKey($_.OwnerNode))
} | Select-Object Name,OwnerNode,State
$NotRunninginPrimary += $c | Where-Object {
($_.State -ne "Online") -and ($pr.ContainsKey($_.OwnerNode))
} | Select-Object Name,OwnerNode,State
$RunninginStandby += $c | Where-Object {
($_.State -eq "Online") -and ($sb.ContainsKey($_.OwnerNode))
} | Select-Object Name,OwnerNode,State
$RunninginPrimary += $c | Where-Object {
($_.State -eq "Online") -and ($pr.ContainsKey($_.OwnerNode))
} | Select-Object Name,OwnerNode,State
}
'GET-Clustergroup -cluster $ cluster' - 返回三个列名称,OwnerNode,国家和5-6项。从那里我必须选择筛选,如果状态不等于在线,并且OwnerNode不应该是$ Standbynodes数组中的任何项目。 –
我有点困惑, 所以你有一个DC - > 50群集 - > 5-6节点 - > 意思是大约250个节点....但是你运行脚本的方式看起来就像是每个节点都在运行簇。意思,而不是总共250次运行,你会得到12,500次运行..... – ArcSet