FlashArray: Veeam - BfSS/Snapshot-Integration QoS Throttling PowerShell Script (over OAuth 2.0)
Aktualisiert: 9. Mai 2021
Sie setzen FlashArray(s), ein schnelles SAN, Veeam Backup & Replikation und die Storage-Integration für Backups ein? Dann könnte ich hier etwas für Sie haben, but first ... was macht eigentlich eine Backup Storage-Integration?:
Mit "Backup from Storage Snapshots" (BfSS) können Sie Backup und Replikation für VMware vSphere-VMs, deren Festplatten auf Speichersystemen gehostet werden, beschleunigen. Wenn Sie ein Backup von Speicher-Snapshots durchführen, nutzt Veeam Backup & Replication zuvor erstellte Speicher-Snapshots für die Verarbeitung von VM-Daten. Mit Backups von Speicher-Snapshots können Sie die Auswirkungen von Backup- und Replikationsaktivitäten auf die Produktionsumgebung reduzieren und RPOs verbessern. - übersetzt aus dem offiziellen Veeam User Guide für VMware vSphere (VBR10)
Nachfolgend erkläre ich kurz den wesentlichen Unterschied beim Einsatz der Integration.
Reguläre Prozessierung beim Backup / Streaming Backup
Sollten Sie keine Storage-Integration nutzen, dann wird als Basis für eine Sicherung ein VMware vSphere-Snapshot verwendet. Der konsistente VM-Zustand mit seinen Daten wird zum Snapshot-Zeitpunkt für die Dauer des Backups eingefroren.
VBR triggert einen Snapshot der virtuellen Maschine. Die vDisks der VM werden in einen schreibgeschützten Zustand versetzt.
Veeam kopiert dann die VM-Daten von den geschützten Festplatten der VM. Alle Änderungen, während die Sicherung durchgeführt wird, werden in Deltadateien geschrieben.
Nach Abschluss der VM-Kopie, wird der vSphere-Snapshot "commited". Die Delta-Files werden mit den vDisks zusammengeführt und die vSphere-Snapshots werden abschließend bereinigt.
Das Problem hier: bei regulären Backups (auch oftmals als Streaming Backup bezeichnet) kann die Verarbeitung von VM-Daten - je nach Maschine/VM-Größe - lange dauern. Wenn nun eine Sicherung für eine hochfrequentierte transaktionale Anwendung VM durchgeführt wird, kann die Deltadatei groß werden. Ein Snapshot-Commit-Prozess wird dann viel Zeit in Anspruch nehmen und die VM kann sich während dieses Prozesses aufhängen bzw. beeinträchtigt werden. Um dieses Problem zu beseitigen, können Sie "Backup from Storage Snapshots" verwenden.

Backup from Storage Snapshot
VBR triggert einen Snapshot der virtuellen Maschine. Die vDisks der VM werden in einen schreibgeschützten Zustand versetzt.
Veeam steuert über die Integration die Erstellung eines FlashArray-Snapshots der Volumes an, die die VM und den VMware vSphere-Snapshot beinhalten.
Der VMware vSphere-Snapshot auf dem ursprünglichen Storage-Volume wird unmittelbar nach der Erstellung des FlashArray-Snapshots gelöscht. Veeam Backup & Replication greift auf den "geklonten" VMware vSphere-Snapshot innerhalb des Storage-Snapshot zu und kopiert die VM-Daten daraus. Der vSphere-Snapshot existiert daher nur für eine äußerst kurze Zeit, in der Regel wenige Sekunden. Die Deltadateien werden dadurch nicht groß, und die Zeit für den "Commit" des VMware vSphere-Snapshots geringst.
Wenn die Sicherung abgeschlossen ist, wird der temporär erstellte Storage-Snapshot entfernt.

Für weitere Informationen zur Integration: "Veeam Backup & Replication 10: User Guide for VMware vSphere".
Mit Pure Storage FlashArrays kann man die Snapshot-Integration ohne zusätzliche Lizenzen/Kosten (all features incl.) nutzen, die Funktionalität/Lizenzierung bei Veeam muss gegeben sein (zur Veeam Lizenzübersicht).
Konfiguration Pure Storage Plugins für Veeam B&R
Sollten Sie noch keine Snapshot-Integration nutzen, den Einsatz von BfSS in Zukunft planen, dann verweise ich auf die Installationsanleitung von "JD". JD Wallace [twitter | LinkedIn] ist Pure Storage Principal Systems Engineer und hat eine Historie bei Veeam. Er hat hier bereits einen guten Beitrag veröffentlicht und mir erlaubt seine Beiträge zu referenzieren.
Zu seinem Blogbeitrag geht es hier: "Use Pure Storage® FlashArray™ Snapshots with Veeam® for Faster Backups and Improved RPOs".
Ebenfalls hat er ein Video zur Konfiguration erstellt: "Setting up the Pure Storage® plug-in for Veeam® Backup and Replication™".
Thanks JD for that and Greetings to US.
Zum eigentlichen Thema
Es ist mit der aktuellsten Version Veeam Backup & Replication und der Pure Storage-Integration nicht möglich beim Backup von Storage-Snapshots auf Volume-Ebene (Snapshots) Bandbreitenbeschränkungen/QoS-Limits zu definieren.
Meinen Recherchen nach ist dies nativ bei keinem Mitbewerber über die jeweiligen Veeam-Integrationen möglich.
Solch Anforderungen findet man jedoch immer häufiger in Enterprise-/Mittelstand-/MSP-Umgebungen, aber auch in performanten SAN-Infrastrukturen (ab 16G FC oder 25G iSCSI) vor. Eine performante Infrastruktur (Backupinfrastruktur inbegriffen) kann dazu führen, dass Sie große Mengen an Daten (lesend) beim Backup aus dem Storage-System "saugen". Dies kann wiederum dazu führen, dass die verfügbare Leistung des Systems unkontrolliert für den Traffic der Datensicherung verwendet wird - unpraktisch. Eine Sicherung soll immer schnellstmöglich abgeschlossen werden, jedoch keinesfalls die Leistung ihrer eigentlichen Produktivsysteme beschränken.
Hier ist die Mischung aus der Storage-Integration (BfSS) von Pure Storage und Veeam Backup & Replication mit dem "Pure Storage Veeam BfSS Volume QoS Throttling" PowerShell Skript eine denkbare Lösung, um solch Verhalten zu verhindern.
So what does the script actually do?:
Kurzgesagt macht das Skript nichts anderes als:
periodische Prüfung, ob Veeam BfSS Jobs laufen
falls ja, wird eine Verbindung über OAuth 2.0 (Verbindung über Schlüssel am API Client) mit dem FlashArray initiiert und auf den Veeam BfSS Volumes das zuvor definierte Bandbreiten-Limit gesetzt.
Ich habe einen Ablaufplan zum Skript erstellt, dies sagt mehr als tausend Worte:

Es sieht komplizierter aus als es tatsächlich ist! Die Arbeit für die Aktivierung des QoS übernimmt sowieso dann das Skript ツ .
Die Skript-Verwendung
Es werden zwei PowerShell Skripts geliefert, wobei eins davon nur initial für die Erstellung des API Clients benötigt wird.

Die Skripts werden auf dem VBR Server ausgeführt, da für die Verwendung das Veeam PowerShell Add-On benötigt wird. Falls auf dem VBR noch keine Pure Storage PowerShell SDK2 installiert ist, erledigen Sie dies als Erstes. Die Installation kann über die PowerShell Gallery oder das beigefügte MSI-Paket erfolgen.
HINWEIS: Bitte lesen Sie die in der ZIP enthaltenen Releasenotes!
1. Erstellung API Client auf dem FlashArray (OAuth 2.0)
Führen Sie das "Pure_Storage_create_FlashArray_API_client_Creator.ps1" als Administrator aus. Geben Sie die Verbindungsdaten (IP oder DNS) zur FlashArray VIP und dem zu verwendenden Benutzer/Passwort mit "array_admin"-Rechten ein.
HINWEIS: Der verwendete Benutzer wird später für die Interaktionen im User-Kontext des Auditing mit dem FlashArray verwendet.
Ich erstellte mir vorab auf dem FlashArray einen eindeutigen Benutzer (veeamqos) als "array_admin" um die Nachverfolgung im Audit Trail möglichst übersichtlich zu machen.

Im Hintergrund wird nun automatisch auf dem FlashArray ein API Client mit dem Namen "veeamqos" und SSH Verbindungsschlüsseln/Zertifikate angelegt.
Es wird ein Log erstellt, in dem die zukünftigen Informationen für die Verbindung hinterlegt werden. Speichern Sie diese Informationen für die spätere Verwendung ab. Achten Sie darauf, dass die Loginhalte nach erneuter Ausführung der Skripte (auf weiteren FlashArrays) immer überschrieben werden.
Sollten Sie planen mehrere FlashArrays/ActiveCluster mit dem Skript zu nutzen, dann wiederholen Sie diese Schritte für die verbleibenden Systeme.
Die erzeugten Verbindungsschlüssel werden im lokalen Benutzerverzeichnis im Ordner \.ssh\... abgelegt. Sollten diese einmal abhanden gekommen sein, dann kann der bestehende API Client gelöscht werden und mit den obigen Schritten neu generiert werden.
(Das verwendete Skript wird nicht für die Verwendung des "Pure_Storage_Veeam_BfSS_Volume_QoS_Throttling.ps1" Skripts benötigt.)

OAuth 2.0 Übersicht

2. Anpassung Skript-Variablen auf Ihr System
Mit Hilfe des zuvor erstellten API Client Creator Log Files passen Sie nun das Hauptskript "Pure_Storage_Veeam_BfSS_Volume_QoS_Throttling.ps1" an.
Zu ändern (copy-paste) sind die Variablen für den Verbindungsaufbau in den Zeilen:
Zeile 13 ($FlashArrayEndPoint)
Zeile 14 ($ArrayClientname)
Zeile 17 ($ArrayUsername)
Zeile 20 ($clientId)
Zeile 21 ($keyId)
Zeile 23 ($privateKeyFile)
Zu ändern (copy-paste) ist die Variable für den gewünschten QoS-Wert der Volume-Bandbreiten in den Zeilen:
Zeile 27 ($BandwidthLimit) - Angabe in Bytes (default Wert: 1Gb/s)
Abschließend zu ändern (copy-paste) sind die Variablen für den später konfigurierten geplanten Task (dieser wird für das Beenden des Skripts nach periodischer Ausführung benötigt) und den Log-Dateinamen:
Zeile 116 - Name des zugehörigen Scheduled Tasks
Zeile 120 - Name des Log-Dateinamen
Speichern Sie abschließend das Skript an geeigneter Stelle (z. B. C:\Scripts) auf dem VBR Server ab.
Sollten Sie planen mehrere FlashArrays/ActiveCluster mit dem Skript zu nutzen, dann wiederholen Sie diese Schritte für die verbleibenden Systeme.
3. Import/Erstellung einer geplanten Aufgabe
Wie bereits erwähnt muss abschließend noch der Scheduled Task für die periodische Aktivierung des Skripts konfiguriert werden. Ebenfalls beigefügt ist eine Vorlage (.XML) zum einfachen Import des Tasks. Mit wenigen Anpassungen kann die geplante Aufgabe angelegt werden.
Es ist im Standard eine Ausführung des Tasks alle 2 Minuten (auch 1 Minute denkbar) vorgesehen, dieser Wert kann jedoch nach Belieben angepasst werden.
Importierte Aufgaben müssen initial immer aktiviert werden!
Insofern Sie keinen Import der Aufgaben-Vorlage wünschen, finden Sie in den RELEASENOTES eine entsprechende Beschreibung zur Einrichtung der Aufgabe mit den dafür notwendigen Optionen, um einen reibungslosen Skriptablauf zu gewähren.
Sollten Sie planen mehrere FlashArrays/ActiveCluster mit dem Skript zu nutzen, dann wiederholen Sie diese Schritte für die verbleibenden Systeme.
Sollten Sie mehrere FlashArrays/ActiveCluster mit der Integration und dem Skript verwenden, könnte der Speicherort der Skripte wie folgt aussehen.

Über das FlashArray Audit Trail (oder auch Pure1) werden entsprechende Interaktionen des Skripts protokoliert.

Das Script kann man im PUREFLASH.blog Mitgliederbereich kostenfrei herunterladen. Die Registrierung ist fix erledigt, sie ist unverbindlich und jederzeit widerrufbar. Neben dem Script gibt es bereits mehrere weitere Inhalte zum Downloaden. Anmelden lohnt sich also!: zum geschützten Bereich.
Das Script habe ich gemeinsam mit den Release Notes in eine ZIP-Datei gepackt, diese ist ca. 3MB groß. Falls noch nicht geschehen, müssen Sie die PowerShell SDK 2.0 noch installieren.
Weitere Infos - Links
Sämtliche offiziell veröffentlichten Einstellungsmöglichkeiten in der GUI, aber auch CLI können über die "on-board" User Guides der Pure Storage Systeme nachgelesen werden.
Im Purity Hauptmenü hierzu auf "Help" klicken.
Der User Guide ist wie das Hauptmenü gegliedert und kann von Ebene zu Ebene geöffnet werden. Eine Suchfunktion ist auch integriert - hier kann mit Schlagworten gesucht werden.
WEB: Pure Storage (Pure1) Supportportal - Ticketsystem und Unterstützung *(erfordert registrierte FlashSysteme)
TEL: Pure Storage Telefonsupport: GER - (+49) (0)800 7239467; INTERNATIONAL - (+1) 650 7294088
WEB: Pure Storage OFFICIAL Blog