Veeam Self-Service Backup Portal for vCloud Director

Jeder Service Provider wird sehr schnell feststellen müssen, dass der Bedarf der Kunden bezüglich einer Datensicherung recht hoch ist (was ja auch eigentlich sehr gut ist – solange man das auch anbieten kann). Wer mit dem VMware vCloud Director und damit auf der VMware vSphere Plattform arbeitet kommt nicht um den Platzhirsch, Veeam Backup & Replication herum. Doch gerade Service Provider müssen massiv auf Self-Service setzen, einerseits um Kosten zu sparen und andererseits um den Kunden die gewünschte Flexibilität zu gewähren. Hierfür bietet die Veeam Availablitiy Suite das Veeam Self-Service Backup Portal, welches auch mit dem VMware vCloud Director hervorragend  zusammenspielt.

Ein enorm wichtiges Kriterium ist für mich, dass der Kunde sich auch an dem neuen Portal mit seinen bereits bekannten Credentials anmelden kann und nicht noch weitere bekommt. Wie dieser Artikel von Luca Dell’Oca beschreibt sogar per LDAP: Use vCloud Director LDAP authentication with Veeam self-service portal

Veeam Self-Service Backup Portal – Aufbau

Der notwendigen Komponenten der Veeam Infrastruktur sind für Kenner der Veeam Availablity Suite nichts Neues. Einzig der Veeam Enterprise Manager wird wohl nicht so sehr verbreitet sein.

Mein Test Aufbau:

  • Veeam Backup & Replication Server
    • SQL Express
  • Veeam Backup Repository
    • Windows Server mit zwei Disks für ein Scale-out Repository
    • NFS Mount Server
  • Veeam Backup Proxy
    • Windows Server für VMware Hot-Add (Virtual Appliance Mode)
  • Veeam Enterprise Manager
    • SQL Express

Da es sich hier um einen Test Aufbau handelt, habe ich etwas an Ressourcen gespart. Die folgenden Sizing Angaben sind ein Wunsch für den produktiven Einsatz und nicht ganz so umgesetzt in meinem Lab. Speziell im Service Provider Umfeld sollte jedoch das korrekte Sizing und das Augenmerk auf spätere Skalierung oberste Prämisse sein. Ein guter Start für weitere Infos ist der Veeam Best Practice Guide mit dem Abschnitt Sizing and System Requirements.

Veeam Backup & Replication Server

Basis Setup des Veeam Backup & Replication Server habe ich mit meinem Veeam Availability Suite Unattended Install Script durchgeführt (unter 30 Minuten!).

Mein Sizing (20 Jobs):

  • 4 vCPUs
  • 16 GB RAM

Veeam Backup Repository

Um die Nutzung eines Scale-out Repository zu simulieren habe ich einen Windows Server mit zwei Disks bereitgestellt. Auf jeder Disk habe ich ein Backup Repository angelegt und diese dann als Extend`s für mein Scale-out Repository genutzt.

Veeam Self-Service Backup Portal - Scale-Out Repository

Veeam Self-Service Backup Portal - Scale-Out Repository Details

Bei einer großen Anzahl von Veeam Backup Proxy`s wird das Repository sehr schnell zum Flaschenhals. Das Sizing sollte daher gut aufeinander abgestimmt sein.

Mein Sizing je Server (4 Tasks):

  • 4 vCPUs
  • 16 GB RAM

Konfiguration Scale-out Repository:

  • Data Locality Mode

Performance Tweak:

  • RSS auf der Netzwerkkarte aktivieren
  • Filesystem Block Size 64KB

Veeam Backup Proxy

Als Backup Proxy kommt für mich in der gegebenen Infrastruktur nur der Virtual Appliance Mode in Frage. Eine sehr gute Gegenüberstellung der möglichen Veeam Backup Transport Typen hat Andreas Lesslhumer in seinem Artikel Veeam backup transportation modes – all you need to know erstellt.

Ich habe zur maximalen Skalierung auf jedem ESXi Host im vCloud Director Provider VDC einen Windows System als Hot-Add Proxy bereitgestellt.

Mein Sizing je Server (2 Tasks):

  • 2 vCPUs
  • 4 GB RAM

Tweak:

  • Automount per Diskpart deaktivieren

Veeam Enterprise Manager

Der Einfachheit halber habe ich diesen mit meinem Veeam Availability Suite Unattended Install Script zusammen auf dem Veeam Backup & Replication Server installiert. Aus Gründen der Sicherheit im produktiven Umfeld ziemlich bedenklich. Aber dazu kommen wir später.

Mein Sizing:

  • 4 vCPUs
  • 8 GB RAM

Performance Tweak:

Veeam Self-Service Backup Portal – Sicherheit

Ich bin der Meinung, man kann die Komponenten in diesem Aufbau in mindestens drei Sicherheits-Zonen aufteilen.

  1. Zone für den Zugriff von außen (Rot)
  2. Zone für Management Systeme (Blau)
  3. Zone für Backup Daten (Orange)

Veeam Self-Service Backup Portal - Security Zones

Um die Umgebung und die Kundendaten zu schützen sollten für die rote und orange Zone sehr explizite Firewall Regeln gelten.

Die notwendigen Ports sind sehr übersichtlich im Veeam Best Practice Guide im dem Abschnitt Networking Diagrams dargestellt. Mehr Detail sind aber noch im User Guide for VMware vSphere zu finden.

Veeam Self-Service Backup Portal – Administration

Ich überspringe hier die Basis Konfiguration von Veeam Backup & Replication sowie Veeam Enterprise Manager.

Initial sind grundlegend folgende Schritte zu machen:

  1. Veeam Backup Repositories erstellen
  2. Veeam Backup Proxies hinzufügen
  3. vCenter hinzufügen
  4. vCloud Director hinzufügen
  5. Konfigurations Backup einrichten
  6. Backup Server im Enterprise Manager hinzufügen

Und damit kommen wir zu den Veeam Self-Service Backup Portal spezifischen Aufgaben.

 vCloud Org im Veeam Self-Service Backup Portal Berechtigen

Veeam Self-Service Backup Portal - vCloud Org

Organization:

Werden aus dem VMware vCloud Director eingelesen.

Repository:

Alle Repositories aus dem Veeam Backup Server stehen hier zur Verfügung.

Quota:

Kann frei vergeben werden. Dieses kann auch die tatsächliche Kapazität überschreiten!

Job Scheduling:

Mögliche Optionen:

  • Allow: Tenant has full access to all job scheduling options
  • Allow: Tenant can create daily and monthly jobs only
  • Deny: Creates daily jobs with randomized start time within the backup window
  • Deny: Creates job with no schedule assigned

Advanced Job Settings:

Hiermit können die Job Einstellung für den Tenant vorgegeben werden.

Veeam Self-Service Backup Portal - vCloud Org Job Template

Erzeugt werden die eigenen Vorlagen am besten durch deaktivierte Backup Jobs.

Automation

Natürlich wird so ein Prozess im Service Provider Umfeld automatisiert werden. Dazu ist die Veeam Backup Enterprise Manager RESTful API fester Bestandteil vom Veeam Enterprise Manager.

Wer sich noch nicht mit dieser API beschäftigt hat, findet einen guten Einstieg mit dem Artikel Consuming the Veeam REST API in PowerShell – Part 1 – Starting a job von Mike Preston. Ich habe schon in anderen Projekten mit dieser API gearbeitet, der vCloud Director Teil war jedoch neu für mich.

Mein Skript zur Veeam Enterprise Manager Organization Konfiguration:

Veeam Self-Service Backup Portal - vCloud Org PowerShell

Ich habe als Skriptsprache für die REST API Calls PowerShell gewählt (weil ich das am besten beherrsche), es kann aber natürlich auch in jeder anderen Sprache umgesetzt werden.

[String] $Server = "<Veeam Ent. Manager IP / name>"
[Boolean] $HTTPS = $True
[String] $Port = "9398"
[PSCredential] $Credential = Get-Credential
[String] $Org = "<Your vCloud Director Org>"
[String] $JobTemplateName = "<Your Job name>" 
[String] $RepoName = "<Your Repository name>" 
[Long] $Quota = 500

#region: Workaround for SelfSigned Cert
add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
#endregion

#region: Switch Http/s
if ($HTTPS -eq $True) {$Proto = "https"} else {$Proto = "http"}
#endregion

#region: POST - Authorization
[String] $URL = $Proto + "://" + $Server + ":" + $Port + "/api/sessionMngr/?v=latest"
Write-Verbose "Authorization Url: $URL"
$Auth = @{uri = $URL;
            Method = 'POST';
            }
$AuthXML = Invoke-WebRequest @Auth -ErrorAction Stop -Credential $Credential
#endregion


#region: GET - Get BR Server
"`nGet All Registered Veeam Server..."
[String] $URL = $Proto + "://" + $Server + ":" + $Port + "/api/backupServers?format=Entity"
Write-Verbose "Get BR Server Url: $URL"
$BRServer = @{uri = $URL;
                   Method = 'GET';
				   Headers = @{'X-RestSvcSessionId' = $AuthXML.Headers['X-RestSvcSessionId']}
           } 
	
$BRServerXML = Invoke-RestMethod @BRServer -ErrorAction Stop

$BRServerXML.BackupServers.BackupServer | select Name, UID, Port, Version

$BRServerUID = $BRServerXML.BackupServers.BackupServer.UID
#endregion



#region: GET - Get BR Template Job
"`nGet all Backup Jobs to filter Template..."
[String] $URL = $Proto + "://" + $Server + ":" + $Port + "/api/jobs?format=Entity"
$BRJobs = @{uri = $URL;
                   Method = 'GET';
				   Headers = @{'X-RestSvcSessionId' = $AuthXML.Headers['X-RestSvcSessionId']}
           } 
	
$BRJobsXML = Invoke-RestMethod @BRJobs -ErrorAction Stop

$BRJobsXML.Jobs.Job | select Name, UID, Platform | ft -AutoSize

foreach ($Job in $BRJobsXML.Jobs.job) {
    if ($job.name -eq $JobTemplateName) {$JobTemplateXML = $Job} 
}

$BRJobUID = $JobTemplateXML.uid
#endregion

#region: GET - Get BR Repo
"`nGet all Backup Repositories to filter Selected..."
[String] $URL = $Proto + "://" + $Server + ":" + $Port + "/api/repositories?format=Entity"
$BRRepos = @{uri = $URL;
                   Method = 'GET';
				   Headers = @{'X-RestSvcSessionId' = $AuthXML.Headers['X-RestSvcSessionId']}
           } 
	
$BRReposXML = Invoke-RestMethod @BRRepos -ErrorAction Stop

$BRReposXML.Repositories.Repository | select Name, UID, Kind

foreach ($Repo in $BRReposXML.Repositories.Repository) {
    if ($Repo.name -eq $RepoName) {$RepoXML = $Repo} 
}

$BRRepoUID = $RepoXML.uid
#endregion

#region: POST - Add vCloud Org
"`nCreate vCloud Org..."
[String] $URL = $Proto + "://" + $Server + ":" + $Port + "/api/vCloud/orgConfigs"
$VCloudOrganizationConfigCreate = @{uri = $URL;
                   Method = 'POST';
				   Headers = @{'X-RestSvcSessionId' = $AuthXML.Headers['X-RestSvcSessionId'];
                                'Content-Type' = 'application/xml'}
Body = @"
<VCloudOrganizationConfigCreateSpec xmlns="http://www.veeam.com/ent/v1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <OrganizationName>$org</OrganizationName>
    <BackupServerUid>$BRServerUID</BackupServerUid>
    <RepositoryUid>$BRRepoUID</RepositoryUid>
    <QuotaGb>$Quota</QuotaGb>
    <TemplateJobUid>$BRJobUID</TemplateJobUid>
    <JobSchedulerType>Full</JobSchedulerType>
</VCloudOrganizationConfigCreateSpec>
"@
           } 

	$VCloudOrganizationConfigCreateXML = Invoke-RestMethod @VCloudOrganizationConfigCreate -ErrorAction Stop
#endregion

#region: GET - Get vCloud Org
"`nGet all vCloud Org`s..."
[String] $URL = $Proto + "://" + $Server + ":" + $Port + "/api/vCloud/orgConfigs?format=Entity"
$VCloudOrganizationConfig = @{uri = $URL;
                   Method = 'GET';
				   Headers = @{'X-RestSvcSessionId' = $AuthXML.Headers['X-RestSvcSessionId']}
           } 
	
$VCloudOrganizationConfigXML = Invoke-RestMethod @VCloudOrganizationConfig -ErrorAction Stop

$VCloudOrganizationConfigXML.VCloudOrganizationConfigs.VCloudOrganizationConfig | select Name, UID, QuotaGb | ft -AutoSize
#endregion

Das Skript habe ich auch als GitHub Gist zur Verfügung gestellt.

Bestehende Backups

Wer bereits vor der Einführung des Self-Service Portals vCloud Director Backup Jobs direkt im Veeam Backup & Replication Server eingerichtet hatte, kann diese mit dem PowerShell Cmdlet Set-VBRvCloudOrganizationJobMapping für den Tenant im Portal verfügbar machen.

Veeam Self-Service Backup Portal – Tenant

Nachdem eine vCloud Director Organisation im Veeam Enterprise Manager berechtigt wurde können sich laut der Fehlermeldung im Portal alle User mit den Rechten ‚Administrator Control‘ und ‚Administrator View‘ anmelden.

Veeam Self-Service Backup Portal - Portal Failed Login

Leider scheint das so nicht ganz korrekt zu sein, ein vCloud Direktir vApp User mit diesen zusätzlichen Rechten kann sich immer noch nicht erfolgreich anmelden. Alle Organization Administrators können sich jedoch ohne Probleme anmelden und haben vollen Zugriff auf die Funktionen.

Ich hoffe ich kann zu dem Berechtigungsproblem bald noch mal ein Update zum Artikel hinzufügen. Wer mir einen Tipp geben kann, gerne einen Kommentar hinterlassen.

Zugriff der User erfolgt im Normalfall über folgende URL:

https://<Veeam Ent. Manager FQDN>:9443/vCloud/<vCloud Director Org Name>/

Um den Zugriff sicherer und zugleich komfortabler zu gestalten habe ich das Portal hinter einen Load-Balancer bzw. Reverse Proxy mit Web Application Firewall gesetzt (in meinem Lab KEMP Virtual LoadMaster). Der Zugriff erfolg in meinem Lab über die URL:

https://<FQDN>/vCloud/<vCloud Director Org Name>/

Den Veeam Enterprise Manager HTTP(S) Port permanent auf 443 im IIS umzustellen ist übrigens nicht empfehlenswert, jedes Update führt dann zu Problemen. Man kann aber alternativ 443 als zusätzlichen Port im IIS hinzufügen.

Übersicht

Als Startseite bietet das Veeam Self-Service Backup Portal dem Nutzer einen schnellen Überblick über seine letzten Backup Jobs und das zur Verfügung stehende Backup Storage.

Veeam Self-Service Backup Portal - User Dashboard

Backup Jobs überwachen

In der Ansicht der Backup Jobs kann zusätzlich zu der offensichtlichen Liste der vorhandenen Jobs noch tiefer in den letzten Lauf oder alle Läufe der Jobs hineingeklickt werden.

Veeam Self-Service Backup Portal - User Jobs

Bis hin zu den Logs der einzelnen Tasks:

Veeam Self-Service Backup Portal - User Task Logs

Backup Jobs erstellen

Der Tenant kann in dem Portal Backup Jobs für verschiedene VMware vCloud Director Objekt Typen erstellen:

  • vCloud Direktor Organisationen
  • vCloud Direktor virtual DataCenter
  • vCloud Direktor vApp`s
  • vCloud Direktor VM`s

Je nach Typ werden dann natürlich auch die nachfolgenden Objekte gesichert (z.B. Bei einer vApp: Netzwerke, VM´s, etc.).

Hier eine Step-by-Step Diashow eines neuen Backup Jobs:

Die erweiterten J0b Parameter und das Ziel Repository werden vom Provider vorgegeben (Siehe Abschnitt Administration).

VM Restore

Der VM Restore bei vCloud Director umfasst nicht nur VM`s sondern auch ganze vApp`s. An einer vApp können noch weitere Objekte wie zum Beispiel Netzwerke oder Firewall Regeln hängen.

Meine Test vApp für den Restore Test hat all diese Objekte:

Veeam Self-Service Backup Portal - vCD vApp Diagram

Veeam Self-Service Backup Portal - vCD vApp Networking

Für diesen Test habe ich die komplette vApp gelöscht und den Restore über das Veeam Self-Service Backup Portal gestartet.

Veeam Self-Service Backup Portal - User Restore VM 1

Veeam Self-Service Backup Portal - User Restore VM 2

Der Restore Prozess kann dann über das Portal vom Tenant auch komplett überwacht werden:

Veeam Self-Service Backup Portal - User Restore VM 3

Nach dem erfolgreichen Restore ist die vApp mit allen VM´s und MetaDaten (Netzwerke, Firewall und NAT Regeln, vApp Einstellungen) wieder vollständig im vCloud Director vorhanden.

Genauso sauber hat der Restore ohne das Vorherige löschen der vApp funktioniert.

Es ist noch zu beachten, dass nach dem Restore der kompletten vApp vorherige SavePoints nicht mehr für einen VM Retsore in die originale Lokation zu verwenden sind. Die vApp wurde mit einer neuen ID neu erzeugt. Ein Restore an einen anderen Ort (vApp oder Storage Policy) ist über das Veeam Self-Service Backup Portal nicht vorgesehen.

File Restore

File Restores können für Windows und für die meisten Linux Derivate ebenfalls über das Veeam Self-Service Backup Portal durchgeführt werden. Mit der kleinen Einschränkung, dass ich den Tenants nur den Download der Files und nicht den direkten Restore in den Gast empfehlen würde. Für den Restore direkt in den Gast werden meist die Netzwerkanforderungen nicht erfüllt sein.

Veeam Self-Service Backup Portal - User Restore File

Um die Files von Linux VM`s zu öffnen muss durch den Provider einmal der Wizard für die Multi-OS File Level Recovery Appliance auf dem Veeam Backup & Replication Server gestartet werden. Um auch hier möglichst skalierbar zu sein ist es zu empfehlen die Appliances nicht mit statischen IP`s sondern über einen DHCP zu konfigurieren.

Dieser Hinweis ist ebenfalls im Veeam Best Practice Guide in dem Abschnitt Veeam vCloud Director Self-Service Portal zu finden.

Veeam Self-Service Backup Portal – Überwachung

Um die Backup und Restore Jobs der Kunden zentral im Blick zu haben kann ich aus eigener Erfahrung das Veeam Content Pack for VMware vRealize Log Insight sehr empfehlen.

Veeam Self-Service Backup Portal - Log Insight Dashboard

Mit ein paar weiteren Log Analysen kann man z.B. auch Anmeldung mit nicht ausrechend berechtigen Usern identifizieren:

Veeam Self-Service Backup Portal - Log Insight Logs

Veeam Self-Service Backup Portal – Verbesserungswünsche

Ich habe um meine Wünsche zu adressieren auch den Thread im Veeam Service Provider Forum eröffnet.

Tenant Funktionen

Als größtes Problem sehe ich aktuell die pauschale Zuordnung von Backup Job Funktionen an alle Tenants. Ich würde mir wünschen, dass der Provider festlegen kann ob der Tenant Guest processing nutzen darf oder nicht. Damit könnte dann auch der Reiter ITEMS für des Veeam Self-Service Backup Portal ein- und ausgeblendet werden (aktuell nur mit einem kleinen Trick möglich). Das gleiche Problem habe ich mit dem File Restore direkt in den Gast. Für beide Funktionen sind spezielle Netzwerkanforderungen notwendig, die meist nicht erfüllt werden. Daher sollte das immer optional sein.

Mehrere Backup Repositories

Ich würde mir wünschen, dass der Provider dem Tenant mehrere Repositories zuordnen kann. Damit könnte man mehrere Anforderungen erfüllen:

  • Verschiedene Performance Klasse
  • Verschiedene Standorte

Mehrere Standorte sind dann interessant, wenn ein Provider über eine vCloud Director Zelle mehrere VDC Lokationen anbieten möchte.

Logs

Die Logs, die der Tenant im Veeam Self-Service Backup Portal sehen kann sind mir entschieden zu detailliert. Ich denke nicht, dass Kunden sehen müssen warum der Job fehlgeschlagenen ist, wo das Bottleneck war oder welche Transport Methode verwendet wird.

Restore an andere Lokation

Bei der Recherche im Veeam Service Provider Forum bin ich noch auf eine andere, absolut korrekte Anforderung gestoßen. Ein anderer Nutzer möchte in eine andere Storage Policy wiederherstellen. Dieses würde ich sogar noch erweitern und zwar sollte eine einzelne VM auch in eine andere bzw. neue vApp wiederhergestellt werden können.

#LongLiveVCD

Leave a Reply