> 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/it/config/hosting/high-availability.md).

# Alta disponibilità

Configuri l'alta disponibilità di PowerShell Universal utilizzando la persistenza SQL, i bilanciatori di carico, la sincronizzazione git unidirezionale e i controlli di integrità dello stato tra i nod

PowerShell Universal può essere configurato per l'alta disponibilità (HA) combinando la persistenza SQL Server o PostgreSQL con un bilanciatore di carico. In questo modo gli strumenti di front-end, come le app, restano accessibili e gli strumenti di back-end, come i job, possono continuare a essere eseguiti quando un nodo non è disponibile.

In questa topologia, un servizio di bilanciamento del carico distribuisce il traffico a ciascun nodo PSU sulle porte 443/80. Ogni nodo legge e scrive in modo indipendente sul database SQL Server (o PostgreSQL) condiviso sulla porta 1433 e recupera la propria configurazione dal repository Git condiviso sulle porte 443/80.

## Configurazione della persistenza

Utilizzi la persistenza SQL, o la persistenza PostgreSQL, in modo che ogni nodo del cluster condivida le code dei job, i token delle app, le identità e gli altri dati persistiti. Configuri ogni nodo con la stessa stringa di connessione al database.

Man mano che i job vengono eseguiti e gli utenti effettuano l'accesso, PowerShell Universal memorizza i dati correlati nel database condiviso in modo che siano disponibili agli altri nodi.

## Configurazione del controllo del codice sorgente

Utilizzi la sincronizzazione Git per archiviare e controllare la versione degli script di configurazione PowerShell che gestiscono i nodi PowerShell Universal. La sincronizzazione Git unidirezionale è spesso preferita perché i nodi sono di sola lettura e recuperano la configurazione dopo che è stata unita nel branch di produzione. Ogni nodo recupera la configurazione a un intervallo configurabile, che per impostazione predefinita è di un minuto. Memorizzare le impostazioni di configurazione Git nel database riduce la configurazione per singolo nodo.

## Bilanciamento del carico

PowerShell Universal supporta bilanciatori di carico come F5 e nginx. I bilanciatori di carico devono fornire:

* Sessioni persistenti (sticky) per la console di amministrazione e le app.
* Supporto WebSocket per la console di amministrazione e le app.

Configuri il bilanciatore di carico per utilizzare l'API di stato per i controlli di integrità. Una risposta `200` indica che la destinazione è integra e può ricevere traffico; una risposta `5xx` indica che non deve ricevere traffico.

## API di stato

### `/api/v1/status`

`/api/v1/status` riporta lo stato di integrità del nodo corrente. Metta un nodo in modalità di manutenzione da **Manage > Computers & Groups > Computers** per fare in modo che questo endpoint restituisca `503` e rimuova il nodo dal traffico del bilanciatore di carico durante la manutenzione.

Restituisce una risposta 5xx quando si verifica una delle seguenti condizioni:

* Il computer si trova in uno stato di errore di avvio.
* Il computer è in modalità di manutenzione.
* L'avvio di un'app critica non è riuscito.
* La configurazione degli endpoint non è vuota ma nessun endpoint API è in esecuzione correttamente.
* Un pool di runspace di un endpoint è esaurito. La risposta è `503` con `One or more endpoint runspace pools are exhausted.`

Un file `.universal/endpoints.ps1` vuoto è considerato integro e non causa una risposta di errore.

### `/api/v2/status`

`/api/v2/status` è l'endpoint di integrità del cluster. Oltre ai controlli sugli endpoint descritti sopra, restituisce `503` quando:

* Un qualsiasi computer del cluster è offline e non è in modalità di manutenzione.
* La sincronizzazione Git non è riuscita su un nodo.
* La configurazione degli endpoint non è vuota ma nessun endpoint API è in esecuzione correttamente.
* Un pool di runspace di un endpoint è esaurito. Il corpo della risposta è `One or more endpoint runspace pools are exhausted.`

Utilizzi `/api/v2/status` per un probe di integrità del bilanciatore di carico quando una destinazione deve essere rimossa dal servizio se il cluster non è integro o se un ambiente di endpoint non ha capacità. Ad esempio, quando un ambiente di endpoint ha un numero massimo di runspace pari a uno e il suo unico runspace è occupato, l'endpoint restituisce `503`; restituisce nuovamente `200` quando la capacità è disponibile.

Un file `.universal/endpoints.ps1` vuoto è considerato integro e non causa una risposta di errore.

## Limitazioni

I cluster PowerShell Universal ad alta disponibilità presentano le seguenti limitazioni.

### Caching multi-nodo

Il caching con `$Cache` è limitato a un singolo processo su un singolo nodo. Ad esempio, ogni app eseguita al di fuori dell'ambiente integrato dispone della propria cache.

`Set-PSUCache` non condivide i dati tra i nodi a meno che non venga specificato `-Persist`. Includa questo switch quando tutti i nodi richiedono gli stessi dati della cache.

### Broadcast delle app multi-nodo

I messaggi di broadcast delle app multi-nodo non sono supportati. I cmdlet come `Show-UDToast -Broadcast` mostrano un toast solo agli utenti connessi del nodo corrente; non lo trasmettono alle app sugli altri nodi.


---

# 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/it/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.
