Wie ich meine Webanwendung mit Powershell auf VMWare hochverfügbar gemacht habe

Veröffentlicht am

Für den heutigen Beitrag werden wir den kostenlosen Load Balancer verwenden, den Kemp für die Evaluierung von Produkten und Funktionen anbietet. Heute werden wir sicherstellen, dass unsere Webanwendung hochverfügbar ist und hinter zwei LoadMastern in einer Hochverfügbarkeitskonfiguration liegt, so dass wir alle Serverknoten bei Bedarf leicht verwalten, die Gesamtzahl der Verbindungen auf alle verteilen, den Datenverkehr überwachen können usw. Wir werden dies erreichen, indem wir den gesamten Prozess der Bereitstellung, Lizenzierung und Konfiguration mithilfe von PowerShell automatisieren.

Ein kleiner Hinweis zur HA-Konfiguration (von der Webseite)

Die Hochverfügbarkeitsfunktion (HA) des LoadMaster garantiert die Verfügbarkeit Ihrer Serverfarm. HA wird durch einen Hot-Standby- und Failover-Mechanismus erreicht. Zwei identische LoadMaster werden als Cluster in das Netzwerk eingebunden. Eine Maschine dient als aktiver LoadMaster, die zweite verbleibt in einem Standby-Zustand - immer bereit, die Aktivitäten des aktiven Servers zu übernehmen. Dieser Cluster erscheint als eine einzige logische Einheit zur Internet-Seite und zu den Serverfarm-seitigen Verbindungen.

Bei einem HA-Cluster hat jede Netzwerkschnittstelle eine individuelle IP-Adresse und eine gemeinsame IP-Adresse, die mit dem Partnergerät geteilt wird. Die gemeinsame IP-Adresse ist für beide LoadMaster Appliances identisch, obwohl sie zu jedem Zeitpunkt nur dem aktiven LoadMaster zugeordnet ist.

Das Ziel von redundanten LoadMastern ist es, ein zuverlässiges Datenverkehrsmanagement zu gewährleisten, auch wenn wenn ein LoadMaster nicht mehr verfügbar ist. Die Vorteile von HA sind wie folgt:

  • Eliminiert einen Single Point of Failure.
  • Die zweite (Standby-)Einheit überwacht die aktive Einheit, um zu erkennen, ob ein Fehler aufgetreten ist.
  • Die Persistenz kann mit den HA-Parametern beibehalten werden:
    • Inter HA L4 TCP-Verbindungsaktualisierungen
    • Inter HA L7-Persistenzaktualisierungen

Haftungsausschluss: Der Code und die Techniken, die im Folgenden erläutert werden, können frei verwendet und weitergegeben werden, allerdings ohne besondere Fehlerbehandlung. Der Grund dafür ist, zusätzliche Komplexität in der Logik, die wir implementieren werden, zu vermeiden und direkt auf den Punkt zu kommen. Die gesamte Validierung und Fehlerbehandlung kann in einer zweiten Phase implementiert werden, sobald der Hauptfluss und die Konzepte verstanden sind.

Das Bild unten zeigt die Startumgebung, die wir für die Konvertierung in das verwenden werden, was wir im zweiten Bild sehen können.

Bild 1 – Ausgangsumgebung
Bild 2 – Endergebnis

Voraussetzungen:

  • vSphere-Zugriff und -Anmeldeinformationen
  • Ein Computer, auf dem PowerShell ausgeführt werden kann
  • Eine Kemp 360 Central MELA-Testversion wird bereitgestellt und läuft – Alle Informationen zur Bereitstellung von Central finden Sie hier. Wir gehen davon aus, dass die Central MELA-Testversion bereits bereitgestellt wurde und ausgeführt wird (Informationen unten, wo Sie herunterladen können).
  • LoadMaster VLM-Bereitstellungsdateien (ovf und vmdk).
  • Kemp LoadMaster Powershell API-Wrapper.
  • Kemp 360 Central Powershell API-Wrapper (Beta).
  • Kemp Application Template (basierend auf Ihren Bedürfnissen, in unserem Beispiel verwenden wir Apache und IIS)
  • VMWare PowerCLI.
  • Die IP-Adresse unseres Webanwendungsservers

Beginnen wir mit dem Herunterladen aller erforderlichen Tools und Bibliotheken: Laden Sie Central und die LoadMaster VLM Deployment-Dateien herunter

1 – Erstellen Sie bei Bedarf ein kostenloses Kemp-Konto und laden Sie Kemp360Central für VMware und den LoadMaster VLM von hier herunter. Extrahieren Sie den gesamten Inhalt in einen Ordner, der für die Tests verwendet wird, z.B. C:\PowershellAutomationTest\VLM_Images. Bitte beachten Sie, dass die Zip-Datei, die für Central heruntergeladen wird, sowohl Central als auch die LoadMaster Deployment-Dateien enthält. Behalten Sie die LoadMaster-Bereitstellungsdatei vorerst beiseite, da sie in diesen Beispielen nicht verwendet wird.

2 – Laden Sie den Kemp LoadMaster Powershell API-Wrapper von hier herunter

Extrahieren Sie den Inhalt in einen Ordner, der leicht zugänglich ist, z. B. C:\PowershellAutomationTest\PowerShellWrapper

3 – Laden Sie den Kemp 360 Central Powershell API-Wrapper von hier herunter

4 – Laden Sie VMware PowerCLI herunter und installieren Sie es: Sobald wir alles auf dem lokalen Computer eingerichtet und konfiguriert haben, öffnen wir Microsoft Powershell ISE. Navigieren Sie in der Konsole zu dem Ordner, in den wir alle Materialien extrahiert haben, z. B. C:\PowershellAutomationTest\

Zu diesem Zeitpunkt sollten in diesem Ordner vorzufinden sein

  • PowerShell LoadMaster-APIs-Wrapperordner
  • Wrapperordner für PowerShell Central-APIs
  • VLM-Ordner in Central- und LoadMaster-Bereitstellungsdateien (siehe Abbildung unten)
Abbildung 3 – LoadMaster- und Central-Bereitstellungsdateien

Das Skript, das ich Ihnen zeigen werde,folgt diesen drei Schritten (Ansatz 1)

  1. Importieren Sie alle notwendigen Module für die Ausführung
  2. Authentifizierung beim Hypervisor
  3. Suchen Sie die OVF-Images und importieren Sie sie in unseren Hypervisor
  4. Nachdem dies erledigt ist, müssen die Maschinen aktiviert und dann konfiguriert werden, diese Schritte bestehen aus:
    • Starten der Maschine und warten, bis sie erreichbar ist
    • Akzeptieren der EULA
    • Lizenz für die Kemp-Webdienste
    • Akzeptieren Sie die kemp-Analyseberichte (sonst sind wir nicht in der Lage, unsere renomierten Produkte zu verbessern)
    • Festlegen des Administratorkennworts
    • Starten Sie die HA-Konfiguration

Ändern Sie die Werte der Variablen nach Ihren Bedürfnissen und führen Sie das Skript aus

##
$Id: HA LM-Bereitstellung in vSphere afabiano $
######## Importieren von Modulen
###Import-Module ".\Powershell-7.2.49.1.1562\Kemp.LoadBalancer.Powershell.psm1"Import-Module ".\Kemp.K360Central.Powershell\Kemp.K360Central.Powershell.psm1"###

# Deklarieren von Parametern, die für die Anmeldung im LM
benötigt werden### bal ist der Standard-Superuser
### kempPassword muss durch yuou
###



$KempAdmin = "bal"$KempPassword = "YOUR_



PASSWORD"$LoadMasterPort = "443"# LoadMaster HA1 Params$LMHA 1_Name = "PWS_DeviceHA1"# LoadMaster HA2 Params$LMHA 2_Name = "PWS_DeviceHA2"# Shared IP Params$LMHA_TAG = "133"$LMHA_SIP = "10.35.44.$($LMHA_TAG)"# vSphere Params



$HypervisorIp = "10.35.0.16"$HypervisorUser = " YOUR_VMWARE_USER "$HypervisorPassword = "YOUR_VMWARE_PASSWORD"




$HypervisorResourcePool = "YOUR_RESOURCE_POOL"










# LoadMaster OVF-Image Pfad
$VLMImagePath = "C:\Benutzer\afabiano\Dokumente\PS\VLM_IMAGES\LoadMaster-VLM-7.2.49.1.18450.RELEASE-VMware-VBox-OVF.ovf"

# Anmeldeinformationen
des Kemp-Kontos$KempIDACcount = 'YOUR_KEMP_ID'$KempIDPassword = 'YOUR_PASSWORD'# Verbindung zum Hypervisor
$HypervisorConnectionParams = @{
'Server' = $hypervisorIp'Benutzer
' = $hypervisorUser'Passwort
'


= $hypervisorPassword}

$hypervisorConnection = connect-VIServer -server $hypervisorIp -user $hypervisorUser -password $hypervisorPassword
$VMHost = Get-VMHost
$HypervisorResourcePool = Get-ResourcePool -Name $HypervisorResourcePool$params = @{
'ImagePath' = $VLMImagePath'VLMName
' = ""
'VMhost' = $VMHost'VMport
' = $LoadMasterPort'ResourcePool
' = $HypervisorResourcePool'KempIDAccount


' = $KempIDACcount'KempIDPassword
' = $KempIDPassword
'KempAdminPassword' = $KempPassword
}###### Maschine bereitstellen 1###$params['VLMName'] = $LMHA 1_Name Deploy-Machine @params###### Maschine 2 bereitstellen###$params['VLMName'] = $LMHA 2_Name Deploy-Machine @params


Start-Sleep 10
###



### VM-Details abrufen###

$LoadMasterHa 1 = Get-VM -Name $LMHA 1
_Name$LoadMasterHa 2 = Get-VM
-Name $LMHA 2
_Name




$LoadMasterHaFirstIP = $

LoadMasterHa1.Guest.IPAddress[0]$LoadMasterHaSecondIP = $LoadMasterHa 2.Guest.IPAddress[0]


####### HA1
####$HA 1Params = @{
'KempAdmin' = $KempAdmin'KempAdminPassword
' = $KempPassword'VMIP
' = $LoadMasterHaFirstIP'VMport
' = $LoadMasterPort'HAMode
' = 'HA First''SharedIP' = $LMHA_SIP'PartnerIP
'
= $LoadMasterHaSecondIP
}
Configure-HA @HA1Params

###### HA2
konfigurieren##
#


$HA2Params = @{
'KempAdmin' = $KempAdmin'KempAdminPassword
' = $KempPassword'VMIP
' = $LoadMasterHaSecondIP'VMport
' = $LoadMasterPort'HAMode
' = 'HA Second''SharedIP' = $LMHA_SIP'PartnerIP
'
= $LoadMasterHaFirstIP
}
Configure-HA @HA2Params

###### Neustart der Rechner, damit die Konfiguration funktioniert
###

Write-Output "Maschinen neu starten"
Restart-VMGuest -VM $LoadMasterHa 1 Restart-VMGuest -VM $LoadMasterHa 2 Start-Schlaf 40 Write-Output "Maschinen bereit" ### ### Deploy-Machine-Funktion ### Funktion deploy-machine() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$ImagePath, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VLMName, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMhost, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMport, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$ResourcePool, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempIDAccount, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempIDPassword, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdminPassword ) write-output "Bereitstellender Computer [$VLMName]" Import-VApp -Source $ImagePath -Name $VLMName -VMHost $VMhost Write-Output "Verschieben des Geräts in die Zielressource [$($ResourcePool)]" move-VM -VM $VLMName -Destination $ResourcePool Start-VM -VM $VLMName ### ### Zu diesem Zeitpunkt startet die Maschine, wir müssen ca. 20 Sekunden warten ### $VMDetails = Get-VM -Name $VLMName while (!$VMDetails.Guest.IPAddress) { Write-Output "-" Start-Schlaf -s 5 $VMDetails = Get-VM -Name $VLMName } $VMIPDetials = $VMDetails.Guest.IPAddress $VMIP = $VMIPDetials[0] ### ### Akzeptieren der EULA ### Write-Output "Akzeptieren der EULA" $LMResponse = Read-LicenseEULA -LoadBalancer $VMIP -LBPort $VMport $MagicString = $LMResponse.Data.Eula.MagicString $LMResponse = Confirm-LicenseEULA -LoadBalancer $VMIP -LBPort $VMport -Magic $MagicString $MagicString = $LMResponse.Data.Eula2.MagicString ### ### Lizenzierung des Geräts Gegen die Kemp-Webdienste ### Write-Output "Lizenzierung" $LMResponse = Request-LicenseOnline -LoadBalancer $VMIP -LBPort $VMport -KempId $KempIDAccount -Password $KempIDPassword ### ### Akzeptieren der Kemp-Analyseberichte (sonst werden wir nie in der Lage sein, unsere erstaunlichen Produkte zu verbessern:) ) ### Write-Output "Analytics" $LMResponse = Confirm-LicenseEULA2 -LoadBalancer $VMIP -LBPort $VMport -Magic $MagicString -Accept yes ### ### Legen Sie das Initialpasswort fest ### Write-Output "Initialpasswort" $LMResponse = Set-LicenseInitialPassword -LoadBalancer $VMIP -LBPort $VMport -Passwd $KempAdminPassword } Funktion Configure-HA() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdminPassword, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMport, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$HAMode, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$SharedIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$PartnerIP ) $SecureString = ConvertTo-SecureString -String $KempAdminPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Write-Output "Verbindung zum Gerät herstellen [$LMIP]:$LMPort" Write-Output "------------------------------" Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMport -Credential $LMCredentials Write-Output "Einstellen des HA-Modus [$HAMode]" Write-Output "------------------------------" Set-LmHAMode -HaMode $HAMode Set-NetworkInterface -InterfaceID 0 -Shared $SharedIP # Waith 15 Sekunden Write-Output "Warten Sie nach dem Setzen der Shared IP auf [$LMIP] -> $($SharedIP)" Write-Output "------------------------------" Start-Schlaf -s 15 # Konfigurieren der Partner-IP write-output "Setzen der Partner-IP auf [$LMIP] -> $PartnerIP" Write-Output "------------------------------" Set-NetworkInterface -InterfaceID 0 -Partner $PartnerIP Write-Output "Partner auf Gerät 2 konfiguriert" + $PartnerIP Write-Output "------------------------------" #Write-Ausgabe "================================================================================================================================================================================================= Start-Schlaf -s 10 #Set-LMHAConfiguration -havhid $HAID Write-Output "Gerät konfiguriert" }

Am Ende der Ausführung dieses Skripts sollten wir die beiden LoadMaster in HA konfiguriert haben. Wie wir auf dem Bild unten sehen können, ist der obere der aktive Master, der mittlere die Standby-Einheit und der letzte die Shared IP-Benutzeroberfläche.

Bild 4 – LoadMasters in HA

Was in dieser Phase übrig bleibt, ist das WebAnwendungsverbindungsteil mit den folgenden Schritten:

  • Hochladen einer Vorlage
  • Erstellen eines VS
  • Verknüpfen Sie meine Webanwendung real Server(s) an den erstellten VS
  • Test?

Das Hochladen einer Vorlage kann mithilfe dieses Befehls ausgeführt werden 

Install-Template -Pfad file_path Anmeldeinformationen

In unserem Skript werden wir diesen Teil des Codes haben, der sich damit befasst, und ich persönlich bevorzuge es, eine Funktion zu verwenden, die später wiederverwendet werden kann. Anstatt diese Funktion gegen das SharedIP-Gerät aufzurufen, können wir die LoadMaster HA-Funktionalität nutzen und eine kleine Änderung an unserem Ablauf vornehmen. Was wir tun können, ist den Ablauf in zwei Teile aufzuteilen, wobei der erste Teil das erste Gerät mit allem konfiguriert, was wir brauchen (Template für die Webanwendung, Erstellen der VirtualServices und Hinzufügen eines oder mehrerer Real Server). Der zweite Schritt besteht darin, die zweite Maschine zu erstellen und die HA-Konfiguration zu starten, so dass die gesamte VS-Konfiguration repliziert wird, sobald die beiden Maschinen synchronisiert sind.

Der neue Ablauf sieht dann wie folgt aus:

  • Setzen Sie Maschine 1 wie in den vorherigen Schritten ein
  • Maschine 1 konfigurieren
    • Laden Sie die Vorlage hoch (eine Funktion)
    • Erstellen der VS-Konfiguration (eine Funktion)
    • Fügen Sie die echten Server hinzu
  • Bereitstellen von Computer 2
  • HA konfigurieren
  • Test

Dazu mussten wir das vorherige Skript leicht abändern, so dass es nun wie folgt aussieht:

##
$Id: HA LM Deployment in vSphere afabiano $
####### Importieren von Modulen
###Import-Module ".\Powershell-7.2.49.1.1562\Kemp.LoadBalancer.Powershell.psm1"Import-Module ".\Kemp.K360Central.Powershell\Kemp.K360Central.Powershell.psm1"#####



# Deklarieren der benötigten
Parameter###$KempAdmin = "bal"$KempPassword = " YOUR_PASSWORD "$LoadMasterPort = "443"#

LoadMaster HA1 Params
$LMHA 1_Name = "PWS_DeviceHA1"









# LoadMaster HA2 Params$LMHA 2_Name = "PWS_DeviceHA2"# Shared IP Params$LMHA_TAG = "133"$LMHA_SIP = "10.35.34.$($LMHA_TAG)"# vSphere Params


$HypervisorIp = "YOUR_HYPERVISOR_IP"$HypervisorUser = " YOUR_HYPERVISOR_USER"$HypervisorPassword = "YOUR_HYPERVISOR_USER_PASSWORD"$HypervisorResourcePool = "YOUR_RESOURCE_POOL"$NetworkPool = "YOUR_NETWORK_POOL"



# LoadMaster OVF-Image-Pfad$VLMImagePath = "






SPEICHERORT DES OVF-IMAGES\
filename.ovf"

# Vorlagenpfad
$TemplatePath = "TEMPLATE_PATH\apache-http.tmpl"

# Anmeldeinformationen
des Kemp-Kontos$KempIDACcount = 'KEMPID'$KempIDPassword = 'KEMPID_PASSWORD'# VS-Parameter ##, der je nach Bedarf geändert werden soll$VSIP = '10.35.34.12'$VSPort = '443'$VSProtocol = 'tcp'$TemplateName = 'Apache HTTPS Offloaded'# RS-Parameter ##, der je nach Bedarf

geändert werden soll$RS 1IP = '10.35.34.11'$RS 1Port = '80'









$RS 2IP = '10.35.34.13'$RS 2Port = '80'
### Deploy-Machine function
###

Function Deploy-Machine() {
param([Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)][string]$ImagePath,[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)][string]$VLMName,[Parameter(
Mandatory=$true, ValueFromPipelineByPropertyName=$true)][string]


$VMhost,




[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
[string]$VMport,
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)][string]$ResourcePool,[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)][string]$KempIDAccount,[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)][string]$KempIDPassword,[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)][string]



$KempAdminPassword,



[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
[string]$NetworkPool
)

Write-Output "Deploying Machine [$VLMName]"Import-VApp -Source $ImagePath -Name $VLMName -VMHost $VMhost
Write-Output "Verschieben des Geräts in die Zielressource [$($ResourcePool)]"

Move-VM -VM $VLMName -Destination $ResourcePool
#####
# Ändern des Netzwerks
###Get-vm
$VLMName | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $NetworkPool -confirm:$false
Start-VM -VM $VLMName####### Wenn die Maschine startet, müssen wir ca. 20 Sekunden
warten###$VMDetails = Get-VM -Name $VLMName while (!$VMDetails.Guest.IPAddress)
{
Write-Output "-"
Start-Sleep -s 5
$VMDetails = Get-VM -Name $VLMName


}$VMIPDetials
= $VMDetails.Guest.IPAddress
$VMIP = $VMIPDetials[0]
####


## Akzeptieren der EULA
###

Write-Output "Akzeptieren der EULA"
$LMResponse = Read-LicenseEULA -LoadBalancer $VMIP -LBPort $VMport$MagicString = $LMResponse.Data.Eula.MagicString$LMResponse = Confirm-LicenseEULA -LoadBalancer $VMIP -LBPort $VMport
-Magic $MagicString$MagicString
= $LMResponse.Data.Eula2.MagicString

###
### Lizenzierung des Geräts Gegen die Kemp-Webdienste ### Write-Output "Lizenzierung" $LMResponse = Request-LicenseOnline -LoadBalancer $VMIP -LBPort $VMport -KempId $KempIDAccount -Password $KempIDPassword ### ### Akzeptieren der Kemp-Analyseberichte (sonst werden wir nie in der Lage sein, unsere erstaunlichen Produkte zu verbessern:) ) ### Write-Output "Analytics" $LMResponse = Confirm-LicenseEULA2 -LoadBalancer $VMIP -LBPort $VMport -Magic $MagicString -Accept yes ### ### Legen Sie das Initialpasswort fest ### Write-Output "Initialpasswort" $LMResponse = Set-LicenseInitialPassword -LoadBalancer $VMIP -LBPort $VMport -Passwd $KempAdminPassword } Funktion Configure-HA() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdminPassword, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMport, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$HAMode, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$SharedIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$PartnerIP ) $SecureString = ConvertTo-SecureString -String $KempAdminPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Write-Output "Verbindung zum Gerät herstellen [$LMIP]:$LMPort" Write-Output "------------------------------" Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMport -Credential $LMCredentials Write-Output "Einstellen des HA-Modus [$HAMode]" Write-Output "------------------------------" Set-LmHAMode -HaMode $HAMode Set-NetworkInterface -InterfaceID 0 -Shared $SharedIP # Waith 15 Sekunden Write-Output "Warten Sie nach dem Setzen der Shared IP auf [$LMIP] -> $($SharedIP)" Write-Output "------------------------------" Start-Schlaf -s 15 # Konfigurieren der Partner-IP write-output "Setzen der Partner-IP auf [$LMIP] -> $PartnerIP" Write-Output "------------------------------" Set-NetworkInterface -InterfaceID 0 -Partner $PartnerIP Write-Output "Partner auf Gerät 2 konfiguriert" + $PartnerIP Write-Output "------------------------------" #Write-Ausgabe "================================================================================================================================================================================================= Start-Schlaf -s 10 #Set-LMHAConfiguration -havhid $HAID Write-Output "Gerät konfiguriert" } Funktion upload-template-to-LM() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$TemplateLocation, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMport, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdminPassword ) $SecureString = ConvertTo-SecureString -String $KempAdminPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMport -Credential $LMCredentials Install-Template -Pfad $TemplateLocation } Funktion Create-VS() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempPassword, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSProtocol, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$TemplateName ) $SecureString = ConvertTo-SecureString -String $KempPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMPort -Credential $LMCredentials ### ### VS hinzufügen ### New-AdcVirtualService -VirtualService $VSIP -VSPort $VSPort -VSProtocol $VSProtocol -Template $TemplateName } Funktion Create-RS() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempPassword,[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSProtocol, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$RSIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$RSPort ) $SecureString = ConvertTo-SecureString -String $KempPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMPort -Credential $LMCredentials ### ### RealServer hinzufügen ### New-AdcRealServer -VirtualService $VSIP -VSPort $VSPort -VSProtocol $VSProtocol -RealServer $RSIP -RealServerPort $RSPort -Non_Local $true } # Herstellen einer Verbindung zum Hypervisor $HypervisorConnectionParams = @{ 'Server' = $hypervisorIp 'Benutzer' = $hypervisorUser 'Passwort' = $hypervisorPassword } $hypervisorConnection = Connect-VIServer -Server $hypervisorIp -User $hypervisorUser -Password $hypervisorPassword $VMHost = Get-VMHost $HypervisorResourcePool = Get-ResourcePool -Name $HypervisorResourcePool ### ### Maschine 1 bereitstellen ### $params = @{ 'ImagePath' = $VLMImagePath 'VLMName' = "" 'VMhost' = $VMHost 'VMport' = $LoadMasterPort 'ResourcePool' = $HypervisorResourcePool 'KempIDAccount' = $KempIDACcount 'KempIDPassword' = $KempIDPassword 'KempAdminPassword' = $KempPassword 'NetworkPool' = $NetworkPool } $params['VLMName'] = $LMHA 1_Name Bereitstellen von Maschinen @params ### ### Abrufen der VM-Details ### $LoadMasterHa 1 = Get-VM -Name $LMHA 1_Name ### Einen Snapshot erstellen New-Snapshot -VM $LoadMasterHa 1 -Name "TestSnapshotForHA1" -Beschreibung "Automatisierter Snapshot" -Quiesce -Memory $LoadMasterHaFirstIP = $LoadMasterHa 1.Guest.IPAddress[0] ### ### Konfigurieren ### $TemplateParams = @{ 'TemplateLocation' = $TemplatePath 'VMIP' = $LoadMasterHaFirstIP 'VMport' = $LoadMasterPort 'KempAdmin' = $KempAdmin 'KempAdminPassword' = $KempPassword } Upload-Template-To-LM-@TemplateParams ### ### Fügen Sie den VS und die RealServer hinzu ### $VSPArams = @{ 'VMIP' = $LoadMasterHaFirstIP 'VMPort' = $VMport 'KempAdmin' = $KempAdmin 'KempPassword' = $KempPassword 'VSIP' = $VSIP 'VSPort' = $VSPort 'VSProtocol' = $VSProtocol 'Vorlagenname' = $TemplateName } Create-VS-@VSPArams ### ### Fügen Sie den RS zum erstellten virtuellen Dienst hinzu ### $RSPArams = @{ 'VMIP' = $LoadMasterHaFirstIP 'VMPort' = $VMport 'KempAdmin' = $KempAdmin 'KempPassword' = $KempPassword 'VSIP' = $VSIP 'VSPort' = $VSPort 'VSProtocol' = $VSProtocol 'RSIP' = $RS 1IP 'RSPort' = $RS 1Port } Create-RS @RSParams ### Zweiter Real Server hinzufügen $RSPArams = @{ 'VMIP' = $LoadMasterHaFirstIP 'VMPort' = $VMport 'KempAdmin' = $KempAdmin 'KempPassword' = $KempPassword 'VSIP' = $VSIP 'VSPort' = $VSPort 'VSProtocol' = $VSProtocol 'RSIP' = $RS 2IP 'RSPort' = $RS 2Port } Create-RS @RSParams ### ### Maschine 2 bereitstellen ### $params['VLMName'] = $LMHA 2_Name Bereitstellen von Maschinen @params Start-Schlaf 10 ### ### Abrufen der VM-Details ### $LoadMasterHa 2 = Get-VM -Name $LMHA 2_Name ### Einen Snapshot erstellen New-Snapshot -VM $LoadMasterHa 2 -Name "TestSnapshotForHA2" -Beschreibung "Automatisierter Snapshot" -Quiesce -Memory $LoadMasterHaSecondIP = $LoadMasterHa 2.Guest.IPAddress[0] ### ### HA1 konfigurieren ### $HA 1Params = @{ 'KempAdmin' = $KempAdmin 'KempAdminPassword' = $KempPassword 'VMIP' = $LoadMasterHaFirstIP 'VMport' = $LoadMasterPort 'HAMode' = 'HA zuerst' 'SharedIP' = $LMHA_SIP 'PartnerIP' = $LoadMasterHaSecondIP } Configure-HA @HA1Params ### ### HA2 konfigurieren ### $HA 2Params = @{ 'KempAdmin' = $KempAdmin 'KempAdminPassword' = $KempPassword 'VMIP' = $LoadMasterHaSecondIP 'VMport' = $LoadMasterPort 'HAMode' = 'HA Sekunde' 'SharedIP' = $LMHA_SIP 'PartnerIP' = $LoadMasterHaFirstIP } Configure-HA-@HA2Params ### ### Neustart der Rechner, um die Konfiguration zum Laufen zu bringen ### Write-Output "Maschinen neu starten" Restart-VMGuest -VM $LoadMasterHa 1 Restart-VMGuest -VM $LoadMasterHa 2 Start-Schlaf 40 Write-Output "Maschinen bereit"

Am Ende dieser Skriptausführung werden wir Folgendes haben

Abbildung 5 – VS-Konfigurationsseite

Wenn wir versuchen, die VS-IP 10.35.34.12 zu erreichen, sehen wir unsere Web-App

Bild 6 – Web-App-Startseite

Zu Testzwecken können Sie dies manuell tun, um zu prüfen, ob alles wie erwartet funktioniert. Sie können aber auch Apache Bench verwenden, um zu prüfen, wie sich das System unter Stress verhält. Machen wir einen kurzen Testlauf

Ich habe Apache Bench mit diesen Parametern ausgeführt

-n 10000 -c 500 beim Ausführen der RS-Seite sah so aus:

Bild 7 – RS-Seite während des Tests

Virtuelle Service-Statistiken

Abbildung 8 – Seite "Virtual Service Stats"

Wie Sie von oben sehen können, im Bild 8 waren alle Anschlüsse auf die 2 RSs verteilt

In diesem Stadium haben wir unsere Anwendung in einer HA-Umgebung in VMware mit PowerShell zur Automatisierung der gesamten Bereitstellung eingerichtet und in Betrieb genommen.

Nun, da wir verstehen, was wirklich in einer solchen Bereitstellung involviert ist, gibt es noch eine andere Methode für diese Bereitstellung, die tatsächlich aus weniger Schritten besteht und uns in einigen Fällen mehr Kontrolle vor der Bereitstellung der Maschine ermöglicht, z. B. die Zuweisung einer IP-Adresse im Voraus, damit es keine Konflikte gibt, die Zuweisung eines Gateways usw.

Bei dieser Methode wird die Funktionalität von Kemp360 Central für die automatische Lizenzierung und Bereitstellung von Maschinen in VMware, KVM und XEN verwendet. Unter der Annahme, dass Ihr Central bereits in Betrieb ist und mit der MELA Trial-Lizenz aktiviert wurde, werden wir die folgenden Schritte etwas anders gestalten. Was wir erreichen wollen, ist die gleiche Konfiguration wie in unserem vorherigen Beispiel, aber diesmal mit Kemp360 Central. Das bedeutet weniger Schritte und weniger Komplexität, da Central sich um den Import, die Instanziierung und die Aktivierung des VLM-Images kümmert, d.h. die ganze "Komplexität" wird aus unseren Skripten entfernt, da Central das für uns erledigt. Die Schritte werden also sein:

  • Erstellen des HA-LoadMasters Konfiguration aus der Zentrale
  • Bereitstellen für eine bestimmte Ziel Umgebung (In unserem ersten Fall wird beides auf VMWare sein)
  • Anwenden der VS-Konfiguration
  • Test

Die Funktion, die wir nutzen werden, ist das LoadMaster Deployment. Wenn Sie möchten, können Sie zunächst die Schritte mit Hilfe der Benutzeroberfläche durchgehen, die Sie durch den Prozess der Erstellung eines oder mehrerer Geräte führt, und entscheiden, wie die Bereitstellung erfolgen soll (manueller Ansatz - Herunterladen und Instanziieren, automatisch - Central erledigt alles für uns), dies wird Ihnen helfen, sich mit dem Geschehen vertraut zu machen. Es gibt nur eine Voraussetzung, die für diesen Ablauf erfüllt sein muss: Wir sollten uns bei Central anmelden und mindestens eine Zielumgebung erstellen. Melden Sie sich dazu bei Central an, navigieren Sie zum Abschnitt Zielumgebungen (siehe Abbildung 10 unten), klicken Sie auf die Schaltfläche Neu erstellen und geben Sie die erforderlichen Parameter ein (siehe Abbildung 11). Die Schaltfläche Speichern wird erst verfügbar, wenn die Überprüfung der Anmeldeinformationen erfolgreich abgeschlossen wurde. Sobald die Zielumgebung korrekt erstellt wurde, können wir zurück zur PowerShell wechseln.

Abbildung 10 - LoadMaster-Bereitstellung
Bild 10 – Erstellung der Zielumgebung

Unser Powershell-Skript wird zunächst aus drei Funktionen bestehen

  • Erstellen der HA-Konfiguration
  • Bereitstellen für VMWare
  • Konfigurieren der VSs (wir haben diesen Teil bereits aus dem vorherigen Ansatz)
  • Test

Um dies tun zu können, müssen wir vor dem Einsatz einige Details wissen. Diese sind:

  • Der gewünschte Netzwerkname zur Zuweisung an die VM, die in VMWare definiert ist
  • Der Name des Ressourcenpools
  • Der Name des Datenspeichers

Kemp360 Central will map to the correct VMWare IDs and schedule the VMs for deployment with the right parameters.

Das folgende Skript ist ein Schnelltest, um zu überprüfen, ob alles wie erwartet mit einem einzelnen Rechner funktioniert. Der anfängliche Importabschnitt und die Variablendeklaration sind die gleichen wie in unseren vorherigen Beispielen, unten finden Sie nur den Aufruf der Funktion, die für die Erstellung des Profils und die Bereitstellung verantwortlich ist. Bitte beachten Sie, dass die Erstellung des Profils und die Bereitstellung zwei getrennte Schritte sind, so dass Sie z. B. zunächst 10 Profile erstellen und sich dann später für eine Bereitstellung in Ruhe entscheiden können.

#####
# Herstellen und Authentifizieren bei central
###Initialize-K360Central -Address $CentralIP -User $CentralAdmin -Password $CentralPassword -Port 443

###
# Erstellen einer LoadMaster-Bereitstellungsinstanz in Central
### Zuweisen von Netzwerkparametern
im Voraus###

$LMDeploymentParams = @{
'HAMode' = "SA"'DeploymentName' = "TestDeploymentFromPWS6"'DeploymentDescription' = "Test"
'Gateway' = "10.35.34.1"'Eth0Device1IP' = "


10.35.34.120/24"
'WUIPort' = "443"'Nameserver' = ""

}$obj = Create-LoadMaster-Deployment @LMDeploymentParams
$DeviceProfileID = $obj.Data.id

######
Bereitstellen des erstellten Profils
###
$params = @{
'TargetEnvironmentName' = 'vCenterPWS''ResourcePool'='afabiano''NetworkName'='Antonio_34''DataStore'='THEALLSPARK''AutoPowerOn'='no''DeviceProfileId'




= $DeviceProfileID
}

$InstanceID = LMInstance-Prepare @params

LMInstance-Deploy -InstanceID $InstanceID -verbose

Nach einigen Minuten befindet sich das Gerät in Ihrer Umgebung, wird je nach Ihren Präferenzen ein- und ausgeschaltet und automatisch mit Central verbunden, wie in der Abbildung unten dargestellt

Bild 11 – Bootmeldung der LoadMaster-Konsole

Bild 12 – LoadMaster korrekt mit der Zentrale verbunden

Jetzt ist es an der Zeit, die Dinge spannender zu machen. Lassen Sie uns unsere vorherige LoadMaster HA-Konfiguration mit der Template-Instanziierung automatisieren, uns mit Central verbinden und mit der Überwachung der Traffic-Spitzen beginnen. Unser Skript wird so simpel sein:

  • Schritt 1: Bereitstellen mit Central
  • Schritt 2: Konfigurieren der VS-Vorlage
  • Schritt 3: Kein Schritt 3

Am Ende der Ausführung dieses Skripts (in wenigen Minuten) ist unsere gesamte Umgebung betriebsbereit und fehlertolerant. Alles, was ich tun musste, war, unsere beiden Skripte zusammenzuführen und einige kleinere Anpassungen vorzunehmen. Insbesondere musste ich eine Funktion hinzufügen, die darauf achtet, dass die virtuellen Maschinen in Betrieb sind und die IP zugänglich ist. Das liegt daran, dass die Bereitstellung des virtuellen Geräts von der Zentrale aus asynchron erfolgt, um zu vermeiden, dass der Benutzer einige Minuten lang auf der Bereitstellungsseite hängen bleibt. Die andere kleine Anpassung bezieht sich auf die Namen der virtuellen Geräte. Wenn wir HA-Paare mit Central in einem beliebigen Hypervisor bereitstellen, werden automatisch die Bezeichnungen "-1" und "-2" an das Ende des Gerätenamens angehängt, damit dieser im Hypervisor unterschieden werden kann. Wenn ich mich zum Beispiel entscheide, meinen Einsatz als "superTest" zu bezeichnen und es sich um eine HA-Konfiguration handelt, erstellt Central im Hypervisor superTest-1 und superTest-2. Ich musste dies für die Funktion berücksichtigen, die darauf wartet, dass die Maschinen bereitgestellt werden und bereit sind. Dies ist dann das Endergebnis (ich lasse die IP der Schnittstellen und Geräte, alles andere sollte durch Ihre Konfiguration ersetzt werden):

##
$Id: HA LM-Bereitstellung in vSphere afabiano $
####### Importieren von Modulen
###Import-Module ".\Powershell-7.2.49.1.1562\Kemp.LoadBalancer.Powershell.psm1"Import-Module ".\Kemp.K360Central.Powershell\Kemp.K360Central.Powershell.psm1" -Force

###### Deklarieren benötigter Parameter
###$KempAdmin = "bal"$KempPassword = "Admin1234"#####


# Zentrale Parameter
###



$CentralAdmin = "admin"




$CentralPassword = "YOUR_CENTRAL_PASSWORD"
$CentralIP = " YOUR_CENTRAL_IP"$TargetEnvironmentName = "TARGET_ENVIRONMENT_NAME"$LoadMasterPort = "LOADMASTER_UI_PORT"$DeploymentName = "DEPLOYMENT_NAME"$DefaultGateway = "YOUR_DEFAULT_GATEWAY"




$LicenseName = "VLM-MAX"# LoadMaster HA1 Parameter im Format ip/cidr$Eth 0Device1IP = "10.35.34.111/24"# LoadMaster HA2 Parameter im Format ip/cidr

$Eth 0Device2IP = "10.35.34.112/24"






# Shared IP params$LMHA_TAG = "143"$LMHA_SIP = "10.35.34.$($LMHA_TAG)"# vSphere Params$HypervisorIp = "YOUR_HYPERVISOR_IP"$HypervisorUser = " YOUR_HYPERVISOR_USER"

$HypervisorPassword = "YOUR_PASSWORD"$HypervisorResourcePool = "YOUR_RESOURCE_POOL"$NetworkPool = "YOUR_NETWORK_POOL"$DataStore = "YOUR_DATASTORE"$AutoPowerOn = 'yes'

# Vorlagenpfad
$TemplatePath = "






ABSOLUTE_PATH\TO\THE\TEMPLATE\

apache-http.tmpl"# VS-Parameter$VSIP = '10.35.34.12'
$VSPort = '443'
$VSProtocol = 'tcp'
$TemplateName = 'Apache HTTPS Offloaded'# RS-Parameter
$RS 1IP = '10.35.34.11'$RS 1Port = '80'$RS 2IP = '10.35.34.13'$RS 2Port = '80'









Funktion upload-template-to-LM() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$TemplateLocation, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMport, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdminPassword ) $SecureString = ConvertTo-SecureString -String $KempAdminPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMport -Credential $LMCredentials Install-Template -Pfad $TemplateLocation } Funktion Create-VS() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempPassword, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSProtocol, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$TemplateName ) $SecureString = ConvertTo-SecureString -String $KempPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMPort -Credential $LMCredentials ### ### VS hinzufügen ### New-AdcVirtualService -VirtualService $VSIP -VSPort $VSPort -VSProtocol $VSProtocol -Template $TemplateName } Funktion Create-RS() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VMPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempAdmin, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$KempPassword, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSPort, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VSProtocol, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$RSIP, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$RSPort ) $SecureString = ConvertTo-SecureString -String $KempPassword -AsPlainText -Force $LMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $KempAdmin, $SecureString Initialize-LmConnectionParameters -Address $VMIP -LBPort $VMPort -Credential $LMCredentials ### ### RealServer hinzufügen ### New-AdcRealServer -VirtualService $VSIP -VSPort $VSPort -VSProtocol $VSProtocol -RealServer $RSIP -RealServerPort $RSPort -Non_Local $true } Funktion wait-machines() { Param( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VLMName 1, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$VLMName 2, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$hypervisorIp, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$hypervisorUser, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Zeichenfolge]$hypervisorPassword ) $hypervisorConnection = Connect-VIServer -Server $hypervisorIp -User $hypervisorUser -Password $hypervisorPassword $VMHost = Get-VMHost ### ### Zu diesem Zeitpunkt startet die Maschine, wir müssen ca. 20 Sekunden warten ### Schreib-Ausgabe $VLMName 1 $VMDetails 1 = Get-VM -Name $VLMName 1 $VMDetails 2 = Get-VM -Name $VLMName 2 while (!$VMDetails 1.Guest.IPAddress -und !$VMDetails 2.Guest.IPAddress) { Write-Output "-" Write-Output "wartende Maschine $($VLMName 1)" Start-Schlaf -s 10 $VMDetails 1 = Get-VM -Name $VLMName 1 $VMDetails 2 = Get-VM -Name $VLMName 2 if ($VMDetails 1.PowerState -ne "Eingeschaltet") { $v 1 = Start-VM $VLMName 1 } if ($VMDetails 2.PowerState -ne "Eingeschaltet") { $v 2 = Start-VM $VLMName 2 } } Start-Schlaf -s 5 } ### ### Herstellen und Authentifizieren bei Central ### Initialize-K360Central -Adresse $CentralIP -Benutzer $CentralAdmin -Passwort $CentralPassword -Port 443 ### ### Erstellen einer LoadMaster-Bereitstellungsinstanz in Central ### Zuweisen von Netzwerkparametern im Voraus ### $LMDeploymentParams = @{ 'HAMode' = "HA" 'Bereitstellungsname' = $DeploymentName 'DeploymentDescription' = "HA-Test" 'Gateway' = $DefaultGateway'Eth0Device1IP' = $Eth 0Device1IP 'Eth0Device2IP' = $Eth 0Device2IP 'SharedIP1' = $LMHA_SIP 'WUIPort' = $LoadMasterPort 'Nameserver' = "" 'Lizenzname' = $LicenseName } $obj = Create-LoadMaster-Deployment @LMDeploymentParams $DeviceProfileID = obj.Data.id $ ### ### Vorbereiten der Bereitstellung ### $params = @{ 'TargetEnvironmentName' = $TargetEnvironmentName 'ResourcePool' = $HypervisorResourcePool 'Netzwerkname' = $NetworkPool 'Datenspeicher' = $DataStore 'AutoPowerOn' = $AutoPowerOn 'DeviceProfileId' = $DeviceProfileID } $InstanceID = LMInstance-Prepare @params ### ### Bereitstellen der Maschine ### Und warten Sie 2 Minuten, bis die Bilder hochgeladen sind ### LMInstance-Deploy -InstanceID $InstanceID Start-Schlaf -s 240 ### ### Vorbereiten der Bereitstellung ### $params = @{ 'VLMName1' = "$($DeploymentName)-1" 'VLMName2' = "$($DeploymentName)-2" 'hypervisorIp' = $HypervisorIp 'hypervisorUser' = $HypervisorUser 'hypervisorPassword' = $HypervisorPassword } Wait-Machines @params ### ### Konfigurieren ### $TemplateParams = @{ 'TemplateLocation' = $TemplatePath 'VMIP' = $LMHA_SIP 'VMport' = $LoadMasterPort 'KempAdmin' = $KempAdmin 'KempAdminPassword' = $KempPassword } Upload-Template-To-LM-@TemplateParams ### ### Fügen Sie den VS und die RealServer hinzu ### $VSPArams = @{ 'VMIP' = $LMHA_SIP 'VMPort' = $LoadMasterPort 'KempAdmin' = $KempAdmin 'KempPassword' = $KempPassword 'VSIP' = $VSIP 'VSPort' = $VSPort 'VSProtocol' = $VSProtocol 'Vorlagenname' = $TemplateName } Create-VS-@VSPArams ### ### Fügen Sie den RS zum erstellten virtuellen Dienst hinzu ### $RSPArams = @{ 'VMIP' = $LMHA_SIP 'VMPort' = $LoadMasterPort 'KempAdmin' = $KempAdmin 'KempPassword' = $KempPassword 'VSIP' = $VSIP 'VSPort' = $VSPort 'VSProtocol' = $VSProtocol 'RSIP' = $RS 1IP 'RSPort' = $RS 1Port } Create-RS @RSParams ### Zweiter Real Server hinzufügen $RSPArams = @{ 'VMIP' = $LMHA_SIP 'VMPort' = $LoadMasterPort 'KempAdmin' = $KempAdmin 'KempPassword' = $KempPassword 'VSIP' = $VSIP 'VSPort' = $VSPort 'VSProtocol' = $VSProtocol 'RSIP' = $RS 2IP 'RSPort' = $RS 2Port } Create-RS @RSParams

 

 

Nach ein paar Minuten sehen wir dies in Kemp360 Central

Abbildung 13 – HA-Konfiguration in Central nach der PowerShell-Ausführung

Unten sehen Sie stattdessen die LoadMaster-Benutzeroberfläche nach dem Zugriff auf die gemeinsam genutzte IP (10.35.34.143)

Bild 14 – LoadMaster VS Konfiguration

Jetzt ist es an der Zeit, den Apache-Bench erneut auszuführen, allerdings mit einem etwas höheren Wert, da wir eine Art stetigen Datenverkehr benötigen. Nachfolgend sehen Sie, wie das Kemp360 Central Dashboard während der Testausführung aussah

Bild 15 – Zentrales Dashboard während der Testausführung

Bild 16 – LoadMaster Echtzeitstatistik für RS und vS
Abbildung 17 – Diagramme des zentralen Netzwerkverkehrs während des Tests

Ich hoffe, Ihnen hat dieser Artikel gefallen!

 

 

Veröffentlicht am

Antonio Fabiano

Antonio ist der Software-Architekt und die Design-Autorität für das Produkt Kemp360 Central mit einer grenzenlosen Leidenschaft für Problemlösungen, Programmierung und das Erlernen von Technologien. Er begann im Jahr 2000 als freiberuflicher Softwareentwickler und wechselte im Laufe der Jahre von einer Technologie zur anderen. In seiner Freizeit widmet er sich neben der Liebe zum SSC Napoli dem Programmieren.