Nella prima parte di questo blog, abbiamo menzionato alcuni concetti importanti relativi a un buon ambiente di replica PostgreSQL. Ora vediamo come combinare tutte queste cose insieme in modo semplice utilizzando ClusterControl. Per questo, supponiamo che tu abbia installato ClusterControl, ma in caso contrario puoi andare al sito ufficiale o fare riferimento alla documentazione ufficiale per installarlo.
Distribuzione della replica in streaming PostgreSQL
Per eseguire una distribuzione di un cluster PostgreSQL da ClusterControl, seleziona l'opzione Distribuisci e segui le istruzioni visualizzate.
Quando si seleziona PostgreSQL, è necessario specificare l'utente, la chiave o la password e Porta per connetterti tramite SSH ai tuoi server. Puoi anche aggiungere un nome per il tuo nuovo cluster e specificare se desideri che ClusterControl installi per te il software e le configurazioni corrispondenti.
Dopo aver impostato le informazioni di accesso SSH, è necessario definire le credenziali del database , versione e datadir (opzionale). Puoi anche specificare quale repository utilizzare.
Nel passaggio successivo, devi aggiungere i tuoi server al cluster che creerai utilizzando l'indirizzo IP o il nome host.
Nell'ultimo passaggio, puoi scegliere se la tua replica sarà Sincrona o Asincrono, quindi premi semplicemente su Distribuisci.
Una volta terminata l'attività, puoi vedere il tuo nuovo cluster PostgreSQL nel schermata principale di ClusterControl.
Ora che hai creato il tuo cluster, puoi eseguire diverse attività su di esso, come aggiungere un sistema di bilanciamento del carico (HAProxy), un pool di connessioni (PgBouncer) o un nuovo slave di replica sincrono o asincrono.
Aggiunta di slave di replica sincroni e asincroni
Vai a ClusterControl -> Azioni cluster -> Aggiungi slave di replica.
Puoi aggiungere un nuovo slave di replica o anche importarne uno esistente. Scegliamo la prima opzione e proseguiamo.
Qui è necessario specificare il server master, l'indirizzo IP o il nome host di il nuovo slave di replica, la porta e, se si desidera ClusterControl, installare il software o includere questo nodo in un sistema di bilanciamento del carico esistente. Puoi anche configurare la replica in modo che sia sincrona o asincrona.
Ora hai installato il tuo cluster PostgreSQL con le repliche corrispondenti, vediamo come migliorare le prestazioni aggiungendo un pool di connessioni.
Distribuzione di PgBouncer
Vai a ClusterControl -> Seleziona PostgreSQL Cluster -> Azioni Cluster -> Aggiungi Load Balancer -> PgBouncer. Qui puoi distribuire un nuovo nodo PgBouncer che verrà distribuito nel nodo del database selezionato, o anche importare un PgBouncer esistente.
Dovrai specificare un indirizzo IP o un nome host, la porta di ascolto e Credenziali PgBouncer. Premendo su Deploy PgBouncer, ClusterControl accederà al nodo, installerà e configurerà il tutto senza alcun intervento manuale.
Puoi monitorare lo stato di avanzamento nella Sezione Attività ClusterControl. Al termine, è necessario creare il nuovo Pool. Per questo, vai su ClusterControl -> Seleziona il cluster PostgreSQL -> Nodi -> nodo PgBouncer.
Dovrai aggiungere le seguenti informazioni:
-
Nome host PgBouncer:seleziona gli host del nodo per creare il pool di connessioni.
-
Nome pool:i nomi pool e database devono essere gli stessi.
-
Nome utente: seleziona un utente dal nodo primario di PostgreSQL o creane uno nuovo.
-
Modalità pool:può essere:sessione (predefinita), transazione o pool di istruzioni.
-
Dimensione pool:dimensione massima dei pool per questo database. Il valore predefinito è 20.
-
Numero massimo di connessioni al database:configurare un massimo a livello di database. Il valore predefinito è 0, che significa illimitato.
Ora dovresti essere in grado di vedere il Pool nella sezione Node.
Per aggiungere High Availability al tuo database PostgreSQL, vediamo come distribuire un bilanciatore di carico.
Distribuzione del sistema di bilanciamento del carico
Per eseguire un'implementazione del servizio di bilanciamento del carico, seleziona l'opzione Aggiungi Load Balancer nel menu Azioni del cluster e completa le informazioni richieste.
È necessario aggiungere IP o nome host, porta, criterio e nodi stai per usare. Se stai usando PgBouncer, puoi sceglierlo nella casella combinata del tipo di istanza.
Per evitare un singolo punto di errore, è necessario distribuire almeno due nodi HAProxy e utilizzare Keepalived che consente di utilizzare un indirizzo IP virtuale nell'applicazione assegnata al nodo HAProxy attivo. Se questo nodo si guasta, l'indirizzo IP virtuale verrà migrato al sistema di bilanciamento del carico secondario, in modo che la tua applicazione possa continuare a funzionare normalmente.
Distribuzione mantenuta
Per eseguire una distribuzione Keepalived, seleziona l'opzione Aggiungi Load Balancer nel menu Azioni del cluster, quindi vai alla scheda Keepalived.
Qui, seleziona i nodi HAProxy e specifica l'indirizzo IP virtuale che essere utilizzato per accedere al database (o pooler di connessione).
In questo momento, dovresti avere la seguente topologia:
E questo significa:HAProxy + Keepalived -> PgBouncer -> PostgreSQL Database nodes , questa è una buona topologia per il tuo cluster PostgreSQL.
Funzione di ripristino automatico ClusterControl
In caso di errore, ClusterControl promuoverà il nodo standby più avanzato a primario e ti avviserà del problema. Inoltre, esegue il failover sul resto del nodo di standby per la replica dal nuovo server primario.
Per impostazione predefinita, HAProxy è configurato con due porte diverse:lettura-scrittura e sola lettura. Nella porta di lettura-scrittura, hai il nodo del database primario (o PgBouncer) online e il resto dei nodi offline, mentre nella porta di sola lettura hai sia il nodo primario che quello standby online.
Quando HAProxy rileva che uno dei tuoi nodi non è accessibile, lo contrassegna automaticamente come offline e non ne tiene conto per l'invio del traffico ad esso. Il rilevamento viene eseguito dagli script di controllo dello stato configurati da ClusterControl al momento della distribuzione. Questi controllano se le istanze sono attive, se sono in fase di ripristino o sono di sola lettura.
Quando ClusterControl promuove un nodo standby, HAProxy contrassegna il vecchio primario come offline per entrambe le porte e mette il nodo promosso online nella porta di lettura-scrittura.
Se il tuo HAProxy attivo, a cui è assegnato un indirizzo IP virtuale a cui si connettono i tuoi sistemi, fallisce, Keepalived migra automaticamente questo indirizzo IP al tuo HAProxy passivo. Ciò significa che i tuoi sistemi potranno continuare a funzionare normalmente.
Conclusione
Come puoi vedere, avere una buona topologia PostgreSQL è facile se usi ClusterControl e se stai seguendo i concetti di base delle best practice per la replica PostgreSQL. Naturalmente, l'ambiente migliore dipende dal carico di lavoro, dall'hardware, dall'applicazione, ecc, ma puoi usarlo come esempio e spostare i pezzi di cui hai bisogno.