Creare regole di affinità del server e del sito per le macchine virtuali
Si applica a: Azure Stack HCI, versioni 23H2 e 22H2
Usando Windows Admin Center o Windows PowerShell, è possibile creare facilmente regole di affinità e anti-affinità per le macchine virtuali in un cluster.
Nota
Il modo consigliato per creare e gestire macchine virtuali in Azure Stack HCI 23H2 usa il piano di controllo Azure Arc. Usare il meccanismo descritto di seguito per gestire le macchine virtuali solo se sono necessarie funzionalità non disponibili nelle macchine virtuali di Azure Arc.
L'affinità è una regola che stabilisce una relazione tra due o più gruppi di risorse o ruoli, ad esempio macchine virtuali (VM), per tenerli insieme nello stesso server, cluster o sito. L'anti-affinità è l'opposto in quanto viene usato per mantenere le macchine virtuali o i gruppi di risorse specificati diversi tra loro, ad esempio due controller di dominio inseriti in server separati o in siti separati per il ripristino di emergenza.
Le regole di affinità e anti-affinità vengono usate in modo analogo al modo in cui Azure usa zone di disponibilità. In Azure è possibile configurare zone di disponibilità per mantenere le macchine virtuali in zone separate e lontane tra loro o nella stessa zona.
Usando le regole di affinità e anti-affinità, qualsiasi macchina virtuale cluster rimane nello stesso nodo del cluster o non può essere insieme nello stesso nodo del cluster. In questo modo, l'unico modo per spostare una macchina virtuale fuori da un nodo consiste nel farlo manualmente. È anche possibile mantenere le macchine virtuali insieme alla propria risorsa di archiviazione, ad esempio il volume condiviso cluster (CSV) in cui risiede il VHDX.
Combinazione di regole di affinità e anti-affinità, è anche possibile configurare un cluster esteso tra due siti e mantenere le macchine virtuali nel sito in cui devono trovarsi.
Uso di Windows Admin Center
È possibile creare regole di affinità di base e anti-affinità usando Windows Admin Center.
- In Windows Admin Center home, in Tutte le connessioni selezionare il server o il cluster per cui si vuole creare la regola della macchina virtuale.
- In Strumenti selezionare Impostazioni.
- In Impostazioni selezionare Regole di affinità, quindi selezionare Crea regola in Regole di affinità.
- In Nome regola immettere un nome per la regola.
- In Tipo di regola selezionare Insieme (stesso server) o Apart (server diversi) per inserire le macchine virtuali nello stesso server o in server diversi.
- In Applica a, selezionare le macchine virtuali a cui si applica questa regola. Usare il pulsante Aggiungi per aggiungere altre macchine virtuali alla regola.
- Al termine, selezionare Crea regola.
- Per eliminare una regola, selezionarla e selezionare Elimina regola.
Tramite Windows PowerShell
È possibile creare regole più complesse usando Windows PowerShell rispetto all'uso di Windows Admin Center. In genere, è possibile configurare le regole da un computer remoto, anziché in un server host in un cluster. Questo computer remoto viene chiamato computer di gestione.
Quando si eseguono Windows PowerShell comandi da un computer di gestione, includere il -Name
parametro o -Cluster
con il nome del cluster che si sta gestendo. Se applicabile, è anche necessario specificare il nome di dominio completo (FQDN) quando si usa il -ComputerName
parametro per un nodo server
Nuovi cmdlet di PowerShell
Per creare regole di affinità per i cluster, usare i nuovi cmdlet di PowerShell seguenti:
New-ClusterAffinityRule
Il New-ClusterAffinityRule
cmdlet viene usato per creare nuove regole. Con questo comando si specifica il nome della regola e il tipo di regola, dove:
-Name
è il nome della regola
-RuleType
i valori sono SameFaultDomain
| SameNode
| DifferentFaultDomain
| DifferentNode
Esempio:
New-ClusterAffinityRule -Name Rule1 -RuleType SameFaultDomain
Set-ClusterAffinityRule
Il Set-ClusterAffinityRule
cmdlet viene usato per abilitare o disabilitare una regola, dove:
-Name
è il nome della regola per abilitare o disabilitare
-Enabled
|
Disabled
abilita o disabilita la regola
Esempio:
Set-ClusterAffinityRule -Name Rule1 -Enabled
Get-ClusterAffinityRule
Il Get-ClusterAffinityRule
cmdlet viene usato per visualizzare la regola specificata e il tipo che è. Se -Name
non è specificato, elenca tutte le regole.
Esempio:
Get-ClusterAffinityRule -Name Rule1
Add-ClusterGroupToAffinityRule
Il Add-ClusterGroupToAffinityRule
cmdlet viene usato per aggiungere un ruolo macchina virtuale o un nome di gruppo a una regola di affinità specifica, dove:
-Groups
è il nome del gruppo o del ruolo da aggiungere alla regola
-Name
è il nome della regola da aggiungere a
Esempio:
Add-ClusterGroupToAffinityRule -Groups Group1 -Name Rule1
Add-ClusterSharedVolumeToAffinityRule
Consente Add-ClusterSharedVolumeToAffinityRule
alle macchine virtuali di rimanere insieme al volume condiviso del cluster in cui risiede il VHDX, dove:
-ClusterSharedVolumes
è il disco CSV che si desidera aggiungere alla regola
-Name
è il nome della regola da aggiungere a
Esempio:
Add-ClusterSharedVolumeToAffinityRule -ClusterSharedVolumes CSV1 -Name Rule1
Remove-ClusterAffinityRule
Elimina Remove-ClusterAffinityRule
la regola specificata, dove -Name
è il nome della regola.
Esempio:
Remove-ClusterAffinityRule -Name Rule1
Remove-ClusterGroupFromAffinityRule
Rimuove Remove-ClusterGroupFromAffinityRule
un gruppo di macchine virtuali o un ruolo da una regola specifica, ma non disabilita o elimina la regola, dove:
-Name
è il nome della regola
-Groups
sono i gruppi o i ruoli che si desidera rimuovere dalla regola
Esempio:
Remove-ClusterGroupFromAffinityRule -Name Rule1 -Groups Group1
Remove-ClusterSharedVolumeFromAffinityRule
Il Remove-ClusterSharedVolumeFromAffinityRule
cmdlet viene usato per rimuovere i volumi condivisi del cluster da una regola specifica, ma non disabilita o elimina la regola, dove:
-ClusterSharedVolumes
è il disco CSV che si vuole rimuovere dalla regola
-Name
è il nome della regola da aggiungere a
Esempio:
Remove-ClusterSharedVolumeFromAffinityRule -ClusterSharedVolumes CSV1 -Name Rule1
Cmdlet di PowerShell esistenti
Con l'avvento dei nuovi cmdlet, sono state aggiunte anche nuove opzioni aggiuntive a alcuni cmdlet esistenti.
Move-ClusterGroup
Il nuovo -IgnoreAffinityRule
commutatore ignora la regola e sposta il gruppo di risorse cluster in un altro nodo del cluster. Per altre informazioni su questo cmdlet, vedere Move-ClusterGroup.
Esempio:
Move-ClusterGroup -IgnoreAffinityRule -Cluster Cluster1
Nota
Se una regola di spostamento è valida (supportata), tutti i gruppi e i ruoli interessati verranno spostati anche. Se uno spostamento di una macchina virtuale viola in modo consapevole una regola, ma è necessario un'unica volta, usare l'opzione per consentire lo -IgnoreAffinityRule
spostamento. In questo caso verrà visualizzato un avviso di violazione per la macchina virtuale. È quindi possibile abilitare nuovamente la regola in base alle esigenze.
Start-ClusterGroup
Il nuovo -IgnoreAffinityRule
commutatore ignora la regola e porta online il gruppo di risorse cluster nella posizione corrente. Per altre informazioni su questo cmdlet, vedere Start-ClusterGroup.
Esempio:
Start-ClusterGroup -IgnoreAffinityRule -Cluster Cluster1
Esempi di regole di affinità
Le regole di affinità sono regole "insieme" che mantengono le risorse nello stesso server, cluster o sito. Ecco alcuni scenari comuni per la configurazione delle regole di affinità.
Scenario 1
Si supponga di avere una macchina virtuale SQL Server e una macchina virtuale server Web. Queste due macchine virtuali devono sempre rimanere nello stesso sito, ma non devono necessariamente trovarsi nello stesso nodo del cluster nel sito. L'uso SameFaultDomain
di , è possibile, come illustrato di seguito:
New-ClusterAffinityRule -Name WebData -Ruletype SameFaultDomain -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups SQL1,WEB1 –Name WebData -Cluster Cluster1
Set-ClusterAffinityRule -Name WebData -Enabled 1 -Cluster Cluster1
Per visualizzare questa regola e come è configurata, usare il Get-ClusterAffinityRule
cmdlet per visualizzare l'output:
Get-ClusterAffinityRule -Name WebData -Cluster Cluster1
Name RuleType Groups Enabled
---- --------- ------ -------
WebData SameFaultDomain {SQL1, WEB1} 1
Scenario 2
Si userà lo stesso scenario precedente, ad eccezione del fatto che le macchine virtuali devono risiedere nello stesso nodo del cluster. Usando SameNode
, è possibile impostare questo comando come segue:
New-ClusterAffinityRule -Name WebData1 -Ruletype SameNode -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups SQL1,WEB1 –Name WebData1 -Cluster Cluster1
Set-ClusterAffinityRule -Name WebData1 -Enabled 1 -Cluster Cluster1
Per visualizzare la regola e la configurazione, usare il Get-ClusterAffinityRule
cmdlet per visualizzare l'output:
Get-ClusterAffinityRule -Name WebData1 -Cluster Cluster1
Name RuleType Groups Enabled
---- -------- ------ -------
DC SameNode {SQL1, WEB1} 1
Esempi di regole anti-affinità
Le regole anti-affinità sono regole "separate" che separano le risorse e le inseriscono in server, cluster o siti diversi.
Scenario 1
Sono disponibili due macchine virtuali che eseguono SQL Server nello stesso cluster multisito di Azure Stack HCI. Ogni macchina virtuale usa molte risorse di memoria, CPU e archiviazione. Se i due si trovano nello stesso nodo, questo può causare problemi di prestazioni con uno o entrambi, perché competono per memoria, CPU e cicli di archiviazione. Usando una regola anti-affinità con DifferentNode
come tipo di regola, queste macchine virtuali rimarranno sempre in nodi del cluster diversi.
I comandi di esempio per questa operazione sono i seguenti:
New-ClusterAffinityRule -Name SQL -Ruletype DifferentNode -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups SQL1,SQL2 –Name SQL -Cluster Cluster1
Set-ClusterAffinityRule -Name SQL -Enabled 1 -Cluster Cluster1
Per visualizzare la regola e la configurazione, usare il Get-ClusterAffinityRule
cmdlet per visualizzare l'output:
Get-ClusterAffinityRule -Name SQL -Cluster Cluster1
Name RuleType Groups Enabled
---- ----------- ------- -------
SQL DifferentNode {SQL1, SQL2} 1
Scenario 2
Si supponga di avere un cluster esteso di Azure Stack HCI con due siti (domini di errore). Sono disponibili due controller di dominio da mantenere in siti separati. Usando una regola anti-affinità con DifferentFaultDomain
come tipo di regola, questi controller di dominio rimarranno sempre in siti diversi. I comandi di esempio per questa operazione sono i seguenti:
New-ClusterAffinityRule -Name DC -Ruletype DifferentFaultDomain -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups DC1,DC2 –Name DC -Cluster Cluster1
Set-ClusterAffinityRule -Name DC -Enabled 1 -Cluster Cluster1
Per visualizzare questa regola e come è configurata, usare il Get-ClusterAffinityRule
cmdlet per visualizzare l'output:
Get-ClusterAffinityRule -Name DC -Cluster Cluster1
Name RuleType Groups Enabled
---- -------- ------- -------
DC DifferentFaultDomain {DC1, DC2} 1
Esempi di regole combinate
Combinando le regole di affinità e anti-affinità, è possibile configurare facilmente varie combinazioni di macchine virtuali in un cluster multisito. In questo scenario, ogni sito ha tre macchine virtuali: SQL Server (SQL), Web Server (WEB) e controller di dominio (DC). Per ognuna delle combinazioni, è possibile usare le regole di affinità con SameFaultDomain
per mantenerle tutte nello stesso sito. È anche possibile impostare i controller di dominio per ogni sito con regole anti-affinità e DifferentFaultDomain
mantenere le macchine virtuali del controller di dominio in siti separati, come illustrato di seguito:
New-ClusterAffinityRule -Name Site1Trio -Ruletype SameFaultDomain -Cluster Cluster1
New-ClusterAffinityRule -Name Site2Trio -Ruletype SameFaultDomain -Cluster Cluster1
New-ClusterAffinityRule -Name TrioApart -Ruletype DifferentFaultDomain -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups SQL1,WEB1,DC1 –Name Site1Trio -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups SQL2,WEB2,DC2 –Name Site2Trio -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups DC1,DC2 –Name TrioApart -Cluster Cluster1
Set-ClusterAffinityRule -Name Site1Trio -Enabled 1 -Cluster Cluster1
Set-ClusterAffinityRule -Name Site2Trio -Enabled 1 -Cluster Cluster1
Set-ClusterAffinityRule -Name TrioApart -Enabled 1 -Cluster Cluster1
Per visualizzare le regole e come sono configurate, usare il Get-ClusterAffinityRule
cmdlet senza l'opzione -Name
ed è possibile visualizzare tutte le regole create e il relativo output.
Get-ClusterAffinityRule -Cluster Cluster1
Name RuleType Groups Enabled
---- -------- ------ -------
Site1Trio SameFaultDomain {SQL1, WEB1, DC1} 1
Site2Trio SameFaultDomain {SQL2, WEB2, DC2} 1
TrioApart DifferentFaultDomain {DC1, DC2} 1
Regole di affinità di archiviazione
È anche possibile mantenere una macchina virtuale e il relativo VHDX in un volume condiviso cluster (CSV) nello stesso nodo del cluster. In questo modo il reindirizzamento CSV non si verifica, che può rallentare l'avvio o l'arresto di una macchina virtuale. Tenendo conto dell'affinità combinata e dello scenario anti-affinità in precedenza, è possibile mantenere la macchina virtuale SQL e il volume condiviso del cluster nello stesso nodo del cluster. A tale scopo, usare i comandi seguenti:
New-ClusterAffinityRule -Name SQL1CSV1 -Ruletype SameNode -Cluster Cluster1
New-ClusterAffinityRule -Name SQL2CSV2 -Ruletype SameNode -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups SQL1 –Name SQL1CSV1 -Cluster Cluster1
Add-ClusterGroupToAffinityRule -Groups SQL2 –Name SQL2CSV2 -Cluster Cluster1
Add-ClusterSharedVolumeToAffinityRule -ClusterSharedVolumes CSV1 -Name SQL1CSV1 -Cluster Cluster1
Add-ClusterSharedVolumeToAffinityRule -ClusterSharedVolumes CSV2 -Name SQL2CSV2 -Cluster Cluster1
Set-ClusterAffinityRule -Name SQL1CSV1 -Enabled 1 -Cluster Cluster1
Set-ClusterAffinityRule -Name SQL2CSV2 -Enabled 1 -Cluster Cluster1
Per visualizzare queste regole e come sono configurate, usare il Get-ClusterAffinityRule
cmdlet senza l'opzione -Name e visualizzare l'output.
Get-ClusterAffinityRule -Cluster Cluster1
Name RuleType Groups Enabled
---- -------- ------ -------
Site1Trio SameFaultDomain {SQL1, WEB1, DC1} 1
Site2Trio SameFaultDomain {SQL2, WEB2, DC2} 1
TrioApart DifferentFaultDomain {DC1, DC2} 1
SQL1CSV1 SameNode {SQL1, <CSV1-GUID>} 1
SQL2CSV2 SameNode {SQL2, <CSV2-GUID>} 1
Passaggi successivi
Informazioni su come gestire le macchine virtuali. Vedere Gestire le macchine virtuali in Azure Stack HCI usando Windows Admin Center.