클러스터 선호도
장애 조치(failover) 클러스터는 노드 간에 이동하고 실행할 수 있는 많은 역할을 보유할 수 있습니다. 특정 역할(즉, 가상 머신, 리소스 그룹 등)이 동일한 노드에서 실행되지 않아야 하는 경우가 있습니다. 이는 리소스 사용량, 메모리 사용량 등과 같은 이유 때문일 수 있습니다. 예를 들어, 메모리와 CPU를 많이 사용하는 두 개의 가상 머신이 동일한 노드에서 실행 중인 경우, 하나 또는 두 개의 가상 머신 모두 성능 저하 문제를 겪을 수 있습니다. 이 문서는 클러스터 비친화도 수준 및 사용 방법을 설명합니다.
친화도 및 비친화도란?
친화도는 두 개 이상의 역할(예: 가상 머신, 리소스 그룹 등) 간에 관계를 설정하여 이들을 함께 유지하도록 하는 규칙입니다. 비친화도는 유사한 개념이지만, 지정된 역할을 서로 구분하여 유지하도록 할 때 사용됩니다. 장애 조치(failover) 클러스터는 해당 역할에 비친화도를 사용합니다. 보다 구체적으로, AntiAffinityClassNames 매개 변수를 역할에 정의하여 이들이 동일한 노드에서 실행되지 않도록 합니다.
AntiAffinityClassnames
그룹의 속성을 살펴보면 AntiAffinityClassNames 매개 변수는 기본적으로 비어 있습니다. 아래 예제에서 Group1과 Group2는 동일한 노드에서 실행되지 않도록 구분해야 합니다. 이 속성을 보기 위한 PowerShell 명령과 결과는 다음과 같습니다.
Get-ClusterGroup Group1 | fl AntiAffinityClassNames
AntiAffinityClassNames : {}
Get-ClusterGroup Group2 | fl AntiAffinityClassNames
AntiAffinityClassNames : {}
AntiAffinityClassNames는 기본적으로 정의되지 않으므로 이러한 역할은 함께 또는 따로 실행할 수 있습니다. 목표는 구분된 상태로 유지하는 것입니다. AntiAffinityClassNames의 값은 원하는 대로 설정할 수 있으나, 다만 모든 역할이 동일한 값을 가져야 합니다. 예를 들어 Group1과 Group2는 가상 머신에서 실행되는 도메인 컨트롤러라 하면, 서로 다른 노드에서 실행되는 것이 가장 좋습니다. 도메인 컨트롤러이므로 클래스 이름에 DC를 사용해보겠습니다. 값을 설정하기 위한 PowerShell 명령 및 결과는 다음과 같습니다.
$AntiAffinity = New-Object System.Collections.Specialized.StringCollection
$AntiAffinity.Add("DC")
(Get-ClusterGroup -Name "Group1").AntiAffinityClassNames = $AntiAffinity
(Get-ClusterGroup -Name "Group2").AntiAffinityClassNames = $AntiAffinity
$AntiAffinity = New-Object System.Collections.Specialized.StringCollection
$AntiAffinity.Add("DC")
(Get-ClusterGroup -Name "Group1").AntiAffinityClassNames = $AntiAffinity
(Get-ClusterGroup -Name "Group2").AntiAffinityClassNames = $AntiAffinity
Get-ClusterGroup "Group1" | fl AntiAffinityClassNames
AntiAffinityClassNames : {DC}
Get-ClusterGroup "Group2" | fl AntiAffinityClassNames
AntiAffinityClassNames : {DC}
이제 설정되었으므로 장애 조치 클러스터링에서 이들을 분리하도록 시도할 것입니다.
AntiAffinityClassName 매개 변수는 "소프트" 블록입니다. 즉, 특정 리소스나 역할이 가능한 한 서로 떨어져 있도록 하지만, 그렇게 할 수 없는 경우 동일한 노드에서 계속 실행할 수 있습니다. 예를 들어, 그룹들은 2노드 장애 조치(failover) 클러스터에서 실행됩니다. 유지 관리를 위해 한 노드를 중단해야 하는 경우 두 그룹이 모두 동일한 노드에서 실행 중이 됩니다. 이 경우 이 작업을 수행해도 됩니다. 가장 이상적인 상황은 아니겠지만, 두 가상 머신은 여전히 허용 가능한 성능 범위 내에서 실행됩니다.
더 자세한 내용
앞서 언급했듯이 AntiAffinityClassNames는 소프트 블록입니다. 그러나 하드 블록이 필요한 경우 어떻게 해야 할까요? 가상 머신은 동일한 노드에서 실행할 수 없으며, 그렇지 않으면 성능 저하가 발생하고 일부 서비스가 중단될 수 있습니다.
이러한 경우 ClusterEnforcedAntiAffinity라는 또 다른 클러스터 속성이 있습니다. 이 비친화도 수준은 동일한 AntiAffinityClassNames 값을 가진 리소스가 동일한 노드에서 실행되는 것을 어떤 방법으로든 방지합니다.
속성 및 값을 보기 위한 PowerShell 명령(및 결과)은 다음과 같습니다.
Get-Cluster | fl ClusterEnforcedAntiAffinity
ClusterEnforcedAntiAffinity : 0
값이 "0"인 경우, 이는 비활성화되어 강제 적용되지 않음을 의미합니다. "1"의 값은 이를 활성화하는 값으로, 하드 블록입니다. 이 하드 블록을 활성화하기 위한 명령(및 결과)은 다음과 같습니다.
(Get-Cluster).ClusterEnforcedAntiAffinity = 1
ClusterEnforcedAntiAffinity : 1
이 두 가지가 모두 설정되면, 그룹이 함께 온라인 상태가 되는 것을 방지합니다. 동일한 노드에 있는 경우 장애 조치(failover) 클러스터 관리자에서 다음을 확인할 수 있습니다.
그룹의 PowerShell 목록에서는 다음을 확인할 수 있습니다.
Get-ClusterGroup
Name State
---- -----
Group1 Offline(Anti-Affinity Conflict)
Group2 Online
추가 설명
필요에 따라 적절한 비친화도 설정을 사용하고 있는지 확인합니다.
2노드 시나리오 및 ClusterEnforcedAntiAffinity에서 한 노드가 다운된 경우 두 그룹이 모두 실행되지 않습니다.
그룹에서 선호 소유자(Preferred Owners)의 사용은 세 개 이상의 노드 클러스터에서 비친화도와 결합하여 사용할 수 있습니다.
AntiAffinityClassNames 및 ClusterEnforcedAntiAffinity 설정은 리소스를 재시작한 후에만 수행됩니다. 즉, 설정할 수는 있지만, 설정 시 두 그룹이 모두 동일한 노드에서 온라인 상태이면 두 그룹 모두 온라인 상태로 유지됩니다.