[MontelLUG] Lamentazioni su cluster Postgresql
Samuele
samuele.zanin a tiscali.it
Sab 25 Mar 2023 23:42:44 CET
Visto che si parla di riattivare questa lista, resoconto un po' di
impressioni che ho avuto sta settimana.
Se qualcuno ha voglia di interagine nella discussione ben venga.
Nonostante abbia scritto "lamentazioni" lo stile della mail non sarà
quello di Asbesto (anche se l'esperienza potrebbe sembrare uscita da uno
dei suoi racconti).
Non so se ci sia ancora Denis in ascolto su questa ml ed ha delle
soluzioni per i miei mal di pancia.
Premetto che in passato ho utilizzato Postgresql in passato in modo
abbastanza semplice, mai in configurazioni in cui gli si tirava il
collo. Diversamente la mia esperienza è stata quasi esclusivamente con
SQL Server.
Mi è stato chiesto di tirar su un cluster di database. Inizialmente in
modalità master-master, salvo poi convincere il richiedente che non era
il caso. L'unico motore di database in grado di fare questo in modo
serio a quanto ne so dovrebbe essere Oracle, ma non l'ho sperimentato.
Quindi configurazone master-slave. Ho scelto Postgresql perché in ambito
open, è l'unica scelta sensata.
Vado a vedermi la documentazione su come si mette in piedi il tutto e...
tante belle parole... sembra fare quello che mi serve... gestisce il
travaso in tempo reale del transaction log dal nodo master allo slave...
cerco esempi di configurazione... ma... manca tutta la parte di gestione
del cluster automatizzata.
Cioè bisogna delegarla a strumenti esterni. Ma perché?!? SQL Server
gestisce in modo pulito tutto da solo. Si integra nativamente con WFC.
Non bisogna inventarsi script alla buona.
Nel caso di Postgresql, c'è Percona, repmgr, svariati progetti su github
che sai quando sono nati, ma non sai se e per quanto verranno mantenuti
E SE funzionano realmente o solo nella testa dello sviluppatore (o come
amava dire il Potta: notabug funziona sul mio computer).
Come ca$$o faccio a proporre una soluzione ufficiale e supportata?
(leggesi, se il cluster va in malora e qualcuno si mette alla ricerca di
qualcun altro da mettere a pecorella, poter dimostrare di aver fatto
tutto a regola d'arte e non fare la fine della pecorella).
Scelgo repmgr che mi sembra il più semplice e minimale (meno roba
superflua c'è, meno probabilità c'è che qualcosa si rompa). Anche perché
con Percona ho sentito svariata gente Porconare in passato.
Tiro su il cluster, la documentazione in qualche punto è un po' vaga, ma
parte. Poi provo a fare lo spostamento del master da un nodo all'altro
e... va in errore... e non è che faccia il rollback in automatico
ritornando ad una situazione consistente... no, i due nodi restano
inebetiti. E tra una boia ed un comando, un comando ed una boia, ci
scappa la risincronizzare di brutto della replica pur di venirne fuori.
Dopo alcune ore di rumamento di forum, trovo che un tizio ha risolto
settando un parametro. Che nel frattempo ha cambiato nome ed unità di
misura. Con quello risolvo. Nel frattempo ho testato varie condizioni di
incongruenza tra i nodi del cluster.
E poi devi configurare a mano sudo, e se ci hai RedHat in un modo, se
chi hai Ubuntu in un altro, se hai systemdmerda tra i coglioni in un
altro... e poi aggiungere il PATH per pg_rewind... ecc. ecc.
E comunque l'impressione è di una teiera di porcellana in una savana di
elefanti.
Poi la gestione dell'ip flottante è affidata a keepalived. Ok,
l'equivalente di WFC nel caso di SQL Server. Ma... uno pensa che
keepalived e Postgresql comunichino in modo nativo ed efficiente, magari
usando un qualche plugin di Postgresql per keepalived. No. Keepalived,
ogni 2 secondi (o a seconda del tempo che impostate) fa un fork di una
shell che lancia uno script bash il quale forka prima psql, il quale
apre una nuova connessione verso il db (cosa computazionalmente
onerosa), esegue una query il cui risultato viene sparato in output e
parsato da un grep anch'esso forkato dalla precedente shell. Poi
keepalived guarda se tutto sto circo acrobatico ha generato come
risposta uno zero od un uno. Casso che efficiensa. Quasi quasi scrivo a
Greta lamentando lo spreco di energia per tutta sta roba.
Dico, fare in modo che Postgresql comunichi tramite socket con
keepalived no?
Boh, alla fine in una giornata ho tirato su tutta la baracca, ma resta
sempre l'impressione che sia tutto in equilibrio precario. Anche perché
potrebbero aggiornare Postgresql e rompere la compatibilità con repmgr,
oppure cambiare l'outupt della query eseguita da keepalive.
Ora corro a dormire che sta notte riattivano la fottuta ora legale.
--
Il messaggio e' stato analizzato alla ricerca di virus o
contenuti pericolosi da MailScanner, ed e'
risultato non infetto.
More information about the montellug
mailing list