Replica PostgreSQL

Ci mettiamo costantemente in questo ufficio e la domanda continua a venire. Come affrontare la replica PostgreSQL? Non sto parlando nemless di cluster avanzati, semplicemente mantenendolo semplice con Master-Slave, Master-MultiSlave e Master-Master. Trovo che l'impostazione per MySQL è in genere piuttosto semplice. Il failover è semplice se non perfetto, soprattutto per quanto sia facile da configurare. Abbiamo giocato con Slony, ma è un po 'troppo in mano (cambiamenti di schema richiedono interventi, nuovi database richiedono interventi, ecc.). PGPool2 era piuttosto carino, fino a quando un nodo è sceso e non siamo riusciti a trovare un modo grazioso (diverso da portre tutto in basso e ripristinare il nodo caduto) per get la replica in sincronia. Fondamentalmente è qui che voglio in genere:

  • Facilità di installazione (io risolverò per una configuration difficile, ma è facile da espandere)
  • Failover semplificato
  • Portare un nodo caduto in giusto richiede tempo (ad esempio come mysql. Il server scende, lo metti in su e aspetta che la replica raggiunga)
  • I cambiamenti di schema non rompono la replica
  • L'aggiunta di un nuovo database al server è senza soluzione di continuità (ad esempio, come mysql, è ansible replicare un integer server DB, per cui un nuovo database viene creato sul master, si propaga automaticamente allo slave)

MySQL gestisce la maggior parte di questi abbastanza bene, ma ho una certa affettuità per PostgreSQL. Inoltre, abbiamo alcune situazioni in cui è la nostra unica opzione e vorremmo aggiungere una replica al mix. Cosa stai utilizzando attualmente e come ti senti sulla tua soluzione? Questo non è un post di MySQL contro PostgreSQL, lo prometto, perché non è quello che sto cercando di avviare. 🙂

  • iptables: cambia politica o utilizza la regola catch-all?
  • DH GEX gruppo fuori gamma
  • copiare un file 2 connessioni lontano?
  • Come scaricare con wget senza i seguenti collegamenti con i parametri
  • Setfacl: operazione non supportta
  • Come consentire ai membri di un gruppo di modificare le autorizzazioni di file su Linux
  • Imansible accedere alla port 80 dalla posizione remota, ma funziona in locale?
  • Utilizzare una NIC per creare più interfacce per Linux KVM
  • nmap mostra la port aperta ma netstat non lo fa
  • manutenzione / installazione di gemme ruby / ruby su binari su Linux in generale e Gentoo
  • "Success = n" syntax di controllo nei file pam.conf / pam.d / *
  • Bash trova il command di output verbose
  • 10 Solutions collect form web for “Replica PostgreSQL”

    Breve risposta – non esiste ancora una soluzione per PostgreSQL se hai bisogno di slave online readonly.

    Ci sono due importnti progetti di sviluppo attualmente in corso in questa area che sono inclusi in PostgreSQL 9.0 (spring / estate 2010), vale a dire:

    • Replica sincrona:

    http://wiki.postgresql.org/wiki/NTT's_Development_Projects

    • Leggere solo schiavi di standby caldi:

    http://wiki.postgresql.org/wiki/Hot_Standby

    che in combinazione mira a raggiungere la facilità d'uso della replica MySQL-stile less i bug / problemi MySQL ha più gli utenti di affidabilità conoscono da PostgreSQL.

    Tutto questo è stato lanciato da un manifesto del Team Core PostgreSQL nel 2008:

    http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

    Le soluzioni di replica di PostgreSQL fino ad oggi con la più grande base utente sono Slony-I (più costose per le scritture, rendono schemate le modifiche dello schema), WAL shipping / walmgr (lo slave non può essere utilizzato online) e pgQ / londiste da Skype / Skytools più strumenti / blocchi di costruzione che una soluzione finita).

    Ho scritto alcune cose su Log Shipping, walmgr e Slony-I, vedi

    http://blogs.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20 per ulteriori informazioni.

    E per gettare un'altra soluzione nell'anello: rubirop.

    Per confrontarsi con i tuoi requisiti:

    • Facile installazione
      Sì, questo è in realtà il fulcro primario del rubyrep.
    • Failover semplificato
      Sì. Infatti rubyrep fa master-master replica – per fallire, nessuna azione è necessaria affatto. Basta iniziare a utilizzare l'altro database.
    • I cambiamenti di schema non rompono la replica
      Sì.
      Per le modifiche alle chiavi non primarie, la replica non deve neppure fermarsi (ma assicuratevi che lo schema sia modificato contemporaneamente da entrambe le parti)
      Per aggiungere / rimuovere le tabelle, è sufficiente riavviare il demone di replica. Cambiando solo la colonna chiave primaria di una tabella prende un po 'di sforzo.
    • L'aggiunta di un nuovo database al server è senza soluzione di continuità (ad esempio, come mysql, è ansible replicare un integer server DB, per cui un nuovo database viene creato sul master, si propaga automaticamente allo slave)
      Questo solo è supportto in modo limitato: each rubyrep setup replica solo un database alla volta. (Ma è molto facile impostare la replica per più di un database.)

    Non hai parlato di avere un hot-read slave come requisito, quindi intendo proporre usando Heartbeat sia con storage condiviso che DRBD. Fa solo la cosa giusta e l'amministrazione è una brezza. È l'equivalente Linux di cluster di vecchi Microsoft SQL Server. Un nodo è attivo e l'altro nodo è passivo mentre i dati sono condivisi tra i due. Non è necessario preoccuparsi della replica basata su SQL perché è gestita in modo più basso al livello del block.

    Seriamente, è di gran lunga la soluzione migliore se non hai bisogno di lettori slave. La roba dell'archivio WAL era al massimo nel migliore dei modi e devi impostare nuovamente tutto se si è mai interrotto il process di spedizione per un riavvio del server. slony e londiste non tagliano la senape. Se vuoi rimanere sull'tree di origine principale e non andare in commercio, Heartbeat è la tua scommessa migliore.

    Dalle tue esigenze sembra che PITR è il modo più semplice per risolvere il problema:

    Ripristino on-line e ripristino in tempo reale (PITR)

    Non hai detto che dovresti interrogare il server slave, quindi PITR potrebbe essere giusto.

    È la parte standard di PostgreSQL dalla versione 8.0, per cui probabilmente hai già tutto il necessario per ottenerlo e funzionare.

    Se troverai anche istruzioni troppo verbose, date un'occhiata a SkyTools WalMgr che farà il process di creazione / failover a un task di command singolo dati in modalità standby.

    Per scenari di replica più complessi, ho avuto una buona esperienza Slony-1, ma PostgreSQL ha molte buone opzioni di replica / HA disponibili.

    Se si desidera una replica asynchronous master / slave considerare Londiste (parte del pacchetto skytools da Skype) wiki.postgresql.org/wiki/Londiste_Tutorial

    È facile da installare, aggiungendo un nuovo DB è facile, la replica semplicemente "cattura".

    Il failover non è però incorporato. Dovresti cambiare le stringhe di connessione dell'applicazione o ignorare la connessione DB dietro un altro livello di software.

    Alcune modifiche dello schema sono facili. Altri sono più difficili. Dipende dalla tua applicazione. La prossima versione di skytools (ver 3.0) dovrebbe gestire DDL e includere strutture per rendere più facile il failover.

    Ci siamo trasferiti a Londiste dopo aver trovato Slony troppo doloroso da usare.

    Vedi una discussione qui, forse che può aiutare:

    http://blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html

    e

    Concorrenti a Bucardo Version One, trovati in basso nella pagina:

    http://www.planetpostgresql.org/

    Non ci sono davvero modi liberi / open-source per fornire quello che stai cercando. Se vuoi qualcosa che è così chiavi in ​​mano, guarda le varie soluzioni di replica commerciale di terze parti.

    Adesso è ansible ordinare la propria replica con Postgres utilizzando la spedizione WAL (Write-Head Log):

    http://www.postgresql.org/docs/8.3/interactive/warm-standby.html 

    Questo è fondamentalmente in cui è ansible inserire un nodo secondario in modalità di ripristino continuo e importre i log di transactions in each intervallo di piccole size. La configuration di Postgres ha "stub" per consentire di fare determinate cose quando un Postgres quando un WAL è stato completato e quindi no, e questo è quello che l'installazione è predicata su – utilizzando quegli "stub".

    Tuttavia, ciò non consente di eseguire master-master e / o replicazione circolare.

    In each caso, funziona sicuramente per l'erudienza, ma non lo chiamerò "installazione facile", "failover semplice", "senza soluzione di continuità", o qualcosa di simile.

    Tranne che per l'aggiunta di un nuovo database, è ansible provare Mammoth Replicator ( https://projects.commandprompt.com/public/replicator ). È open-source, facile da installare e support il failover. Le principali limitazioni sono il database singolo e l'impossibilità di replicare le modifiche DDL, entrambe sono nell'elenco TODO.

    Postgres-R sembrava promettente ma non so se il progetto è ancora vivo.

    Sto attualmente guardando il replicatore del tungsteno, sono ancora lontano da una conclusione definitiva, ma probabilmente vale la pena dare un'occhiata.

    http://www.continuent.com

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.