【发布时间】:2017-09-25 15:17:06
【问题描述】:
在具有 50 个集群的高可用性环境(两个 DC,主要和备用)中。每个集群中有 5 到 6 个节点。我想确保每个集群中的所有节点都是“在线”(状态)并在“主节点”(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- 返回三列 Name、OwnerNode、State 和 5-6 个条目。从那里我必须选择 Filter 如果 State 不等于 Online 并且 OwnerNode 不应该是 $Standbynodes 数组中的任何项目。 -
我有点困惑,所以你有一个 DC ->50 个集群->5-6 个节点-> 意思是大约 250 个节点....但是你运行脚本的方式看起来像你的针对每个集群运行每个节点。这意味着您将获得 12,500 次运行,而不是总共 250 次运行.....
标签: arrays powershell cluster-computing hashtable