> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/de/config/hosting/high-availability.md).

# Hochverfügbarkeit

Konfigurieren Sie PowerShell Universal für Hochverfügbarkeit mit SQL-Persistenz, Load Balancern, einseitiger Git-Synchronisierung und Status-Health-Checks über geclusterte Knoten hinweg.

PowerShell Universal kann für Hochverfügbarkeit (HA) konfiguriert werden, indem SQL Server- oder PostgreSQL-Persistenz mit einem Load Balancer kombiniert wird. Dadurch bleiben Front-End-Tools wie Apps erreichbar und Back-End-Tools wie Jobs können weiterlaufen, wenn ein Knoten nicht verfügbar ist.

In dieser Topologie verteilt ein Load Balancer den Datenverkehr über die Ports 443/80 an jeden PSU-Knoten. Jeder Knoten liest und schreibt unabhängig über Port 1433 in die gemeinsam genutzte SQL Server- (oder PostgreSQL-) Datenbank und ruft seine Konfiguration über die Ports 443/80 aus dem gemeinsam genutzten Git-Repository ab.

## Persistenzkonfiguration

Verwenden Sie SQL-Persistenz oder PostgreSQL-Persistenz, damit jeder Knoten im Cluster Job-Warteschlangen, App-Tokens, Identitäten und andere persistierte Daten gemeinsam nutzt. Konfigurieren Sie jeden Knoten mit derselben Datenbankverbindungszeichenfolge.

Während Jobs ausgeführt werden und Benutzer sich anmelden, speichert PowerShell Universal die zugehörigen Daten in der gemeinsamen Datenbank, sodass sie für andere Knoten verfügbar sind.

## Quellcodeverwaltungskonfiguration

Verwenden Sie die Git-Synchronisierung, um die PowerShell-Konfigurationsskripte zu speichern und zu versionieren, die PowerShell Universal-Knoten verwalten. Eine einseitige Git-Synchronisierung wird häufig bevorzugt, da die Knoten schreibgeschützt sind und die Konfiguration abrufen, nachdem sie in den Produktionsbranch gemerged wurde. Jeder Knoten ruft die Konfiguration in einem konfigurierbaren Intervall ab, das standardmäßig eine Minute beträgt. Das Speichern der Git-Konfigurationseinstellungen in der Datenbank reduziert die Konfiguration pro Knoten.

## Lastverteilung

PowerShell Universal unterstützt Load Balancer wie F5 und nginx. Load Balancer müssen Folgendes bereitstellen:

* Persistente (Sticky) Sitzungen für die Admin-Konsole und Apps.
* WebSocket-Unterstützung für die Admin-Konsole und Apps.

Konfigurieren Sie den Load Balancer so, dass er die Status-API für Health-Checks verwendet. Eine `200`-Antwort bedeutet, dass das Ziel fehlerfrei ist und Traffic empfangen kann; eine `5xx`-Antwort bedeutet, dass es keinen Traffic empfangen sollte.

## Status-APIs

### `/api/v1/status`

`/api/v1/status` meldet den Zustand des aktuellen Knotens. Versetzen Sie einen Knoten über **Manage > Computers & Groups > Computers** in den Wartungsmodus, damit dieser Endpunkt `503` zurückgibt und der Knoten während der Wartung aus dem Load-Balancer-Traffic entfernt wird.

Er gibt eine 5xx-Antwort zurück, wenn einer der folgenden Fälle zutrifft:

* Der Computer befindet sich in einem Startfehler-Zustand.
* Der Computer befindet sich im Wartungsmodus.
* Eine kritische App konnte nicht gestartet werden.
* Die Endpunktkonfiguration ist nicht leer, aber es werden keine API-Endpunkte ordnungsgemäß ausgeführt.
* Ein Endpunkt-Runspace-Pool ist erschöpft. Die Antwort lautet `503` mit `One or more endpoint runspace pools are exhausted.`

Eine leere `.universal/endpoints.ps1`-Datei ist fehlerfrei und verursacht keine Fehlerantwort.

### `/api/v2/status`

`/api/v2/status` ist der Endpunkt für den Clusterzustand. Zusätzlich zu den oben genannten Endpunktprüfungen gibt er `503` zurück, wenn:

* Ein Computer im Cluster offline ist und sich nicht im Wartungsmodus befindet.
* Die Git-Synchronisierung auf einem Knoten nicht erfolgreich ist.
* Die Endpunktkonfiguration nicht leer ist, aber keine API-Endpunkte ordnungsgemäß ausgeführt werden.
* Ein Endpunkt-Runspace-Pool erschöpft ist. Der Antworttext lautet `One or more endpoint runspace pools are exhausted.`

Verwenden Sie `/api/v2/status` für einen Load-Balancer-Health-Probe, wenn ein Ziel aus dem Dienst entfernt werden soll, falls der Cluster nicht fehlerfrei ist oder eine Endpunktumgebung keine Kapazität hat. Wenn zum Beispiel eine Endpunktumgebung eine maximale Runspace-Anzahl von eins hat und ihr einziger Runspace belegt ist, gibt der Endpunkt `503` zurück; er gibt wieder `200` zurück, wenn Kapazität verfügbar ist.

Eine leere `.universal/endpoints.ps1`-Datei ist fehlerfrei und verursacht keine Fehlerantwort.

## Einschränkungen

Hochverfügbare PowerShell Universal-Cluster weisen die folgenden Einschränkungen auf.

### Caching über mehrere Knoten

Caching mit `$Cache` ist auf einen einzelnen Prozess auf einem einzelnen Knoten begrenzt. Beispielsweise hat jede App, die außerhalb der integrierten Umgebung ausgeführt wird, ihren eigenen Cache.

`Set-PSUCache` gibt Daten nicht knotenübergreifend frei, sofern nicht `-Persist` angegeben wird. Fügen Sie diesen Switch hinzu, wenn alle Knoten dieselben Cache-Daten benötigen.

### App-Broadcast über mehrere Knoten

App-Broadcast-Nachrichten über mehrere Knoten werden nicht unterstützt. Cmdlets wie `Show-UDToast -Broadcast` zeigen einen Toast nur für verbundene Benutzer des aktuellen Knotens an; sie senden keinen Broadcast an Apps auf anderen Knoten.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/de/config/hosting/high-availability.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
