Automatizzare il failover in PostgreSQL 9.1


18

Come si configurano due server identici per il failover automatico in PostgreSQL 9.1.

OS

Centos 5
PostgreSQL 9.1 compilato dalla fonte
L'account utente postgres esiste su entrambe le macchine e ha una chiave ssh senza password per connettersi ad entrambe le macchine.

La mia configurazione attuale:

Configurazione del server principale:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust

Server di standby

postgresql.conf e pg_hba.conf sono identici a quelli configurati sul server principale.

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

Grazie a hzRoot, ora capisco come passare il server dallo standby al master.

Utilizzando i seguenti comandi, posso sincronizzare il nuovo slave con il nuovo master e quindi ottenere il backup e l'esecuzione della replica.

Sul nuovo master (10.0.66.2)

  1. su - postgres
  2. toccare trigger.txt in / opt / pgsql91 / data /
  3. recovery.conf diventa recovery.done
  4. psql -c "; SELECT pg_start_backup ('backup', true)";
  5. rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
  6. psql -c "; SELECT pg_stop_backup ()";

Sul nuovo slave (10.0.66.1)

  1. creare il file recovery.conf: cp recovery.done in recovery.conf
  2. vi recovery.conf cambia indirizzo ip: primary_conninfo = 'host = 10.0.66.2'
  3. avviare postgresql

Quindi le mie domande ora sono:

  1. È questo il modo corretto di cambiare ruolo?
  2. Qualcuno ha automatizzato questo processo, in caso affermativo cosa hai fatto?
  3. Se la replica sincrona è abilitata, ho notato che il nuovo server principale non eseguirà il commit di alcuna transazione perché è in attesa che lo slave risponda. Non esiste uno slave, tuttavia, poiché l'altro server, il vecchio master è inattivo. È corretto o devo disabilitare temporaneamente la replica sincrona mentre il nuovo slave è inattivo?

1. sì, corretto 2. può essere meglio non automatizzare quel processo. 3. quindi hai bisogno di almeno 2 slave e 1 master. perché come hai detto sync. la replica richiede almeno 2 nodi per eseguire il commit della sincronizzazione. se c'è un solo nodo principale, non sarai in grado di eseguire il commit ..
sftsz

i passaggi 4, 5 e 6 non sono necessari sul nuovo master perché, beh, si sta replicando per cominciare. In secondo luogo, cosa accadrebbe se il master morisse e fosse offline - non si sarebbe in grado di connettersi ad esso. I passaggi 4,5 e 6 vengono in genere eseguiti su un nuovo nodo slave che si unisce al pool di repliche.
Eric

@Eric mentre giocavo con questo, sono richiesti i passaggi 4,5,6 per riportare il vecchio maestro in condizione di lavoro. Rendere lo standby nuovo primario crea immediatamente una nuova voce WAL, quindi ora è 1 voce prima del vecchio master. Avvio del vecchio master in modalità standy mi ha generato errori, quindi ho dovuto fare i passaggi 4,5,6 sul vecchio master per sincronizzarlo con il nuovo master (usando pg_basebackup, che può trasmettere l'intero xlog dal nuovo master - sostituisce i passaggi 4,5,6 in postgres> = 9,1 credo). Ho ragione o ho fatto qualcosa di sbagliato e questo non dovrebbe essere necessario?
Dalibor Filus,

Risposte:


8

Dai un'occhiata a repmrg :

repmgr è un insieme di strumenti open source che aiuta DBA e amministratori di sistema a gestire un cluster di database PostgreSQL.

Sfruttando la funzionalità Hot Standby introdotta in PostgreSQL 9, repmgr semplifica notevolmente il processo di impostazione e gestione del database con requisiti di elevata disponibilità e scalabilità.

repmgr semplifica l'amministrazione e la gestione quotidiana, migliora la produttività e riduce i costi complessivi di un cluster PostgreSQL:

  • monitorare il processo di replica; consentendo ai DBA di emettere alti
  • operazioni di disponibilità come passaggi e fallimenti.

Fa due cose:

  1. repmgr: programma di comando che esegue attività sul cluster e quindi esce
  2. repmgrd: demone di gestione e monitoraggio che controlla il cluster e può automatizzare le azioni remote.

Per il failover automatico, repmgrd fa il trucco e non è uno SPOF nella tua rete, come pgPool. Tuttavia, è ancora importante monitorare tutti i demoni e ripristinarli dopo un fallimento.

La versione 2.0 sta per essere rilasciata, compresi gli RPM.


Ciao Frank, grazie per la tua risposta. Non ho sentito parlare di repmrg e lo proverò sicuramente.
Craig Efrein,

Ciao ancora Frank, grazie per la risposta, era esattamente quello che stavo cercando. Finalmente ho potuto provarlo oggi.
Craig Efrein,

4

nel tuo file recovery.conf dovresti aggiungere una riga che dice a postgres di eseguire il failover da master a slave. dovresti aggiungere

trigger_file = '/any/file/to/trigger'

quando si crea questo file su un determinato percorso. i nodi cambieranno. (il file non include nulla, è solo un trigger)

puoi trovare ulteriori informazioni sulla replica in streaming

d'altra parte, potrebbe essere possibile farlo automaticamente creato con alcuni trucchi, ma usare strumenti di monitoraggio e fare fail-up manuale sarà meglio ..


Grazie per la risposta. Potrebbero volerci un paio di giorni prima che io possa provarlo, ma tornerò sicuramente da te.
Craig Efrein,

Ti darò +1 per la risposta trigger_file che mi ha aiutato a semplificare notevolmente il processo. Non è l'intera risposta che è come automatizzare completamente il processo. Un'altra cosa che ho notato è che mentre il master era inattivo, le transazioni non venivano completate perché attendeva che il master riconoscesse. Ciò è stato risolto utilizzando la replica asincrona
Craig Efrein il

È davvero fantastico. Ho molte critiche sulla mancanza di flessibilità nell'implementazione della replica di PostgreSQL, ma questo è un modo fantastico e semplice di gestire il failover.
Aaron Brown,

1
Tuttavia, assume il ruolo di master anche quando il master stesso è ancora in esecuzione (quindi hai due master). Questo non è automatizzato da Postgres stesso.
Dalibor Filus,

0

Qualcuno ha preso in considerazione l'utilizzo di pgpool-II per questo?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

Ho impostato la replica per PostgreSQL. Sembra che la parte difficile accada quando il vecchio maestro ritorna.

Da quello che ho letto, sembra che pgpool possa automatizzare gran parte di ciò. Tuttavia non sono sicuro che sfrutti le funzionalità di replica già presenti in PostgreSQL 9.1.


1
pgPool è un singolo punto di errore, perdi tutto quando va giù.
Frank Heikens,

1
La ringrazio per la risposta. Ho provato PGPool II con risultati contrastanti sia su CentOS che su Debian e alla fine ho rinunciato.
Craig Efrein,

1
Perché non usare pgpool II con HAproxy? Con un battito cardiaco e ascolto ip mobile?
Mikiemorales,

Solo per riferimento storico, pgpool-ii non funziona attualmente su Windows.
tommed
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.