PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Replica Londiste con PostgreSQL 9.0

Londiste, strumento di replica master/slave asincrono sviluppato da Skytools. È molto semplice e intuitivo creato come Slony. La logica principale dietro Londiste o Slony è il trigger remoto. Considerando che londiste segue il modello di accodamento degli eventi che non è il loro in Slony - I.

Panoramica su Skytools:
Skytools è un'applicazione basata su Python, viene fornita con un pacchetto di tre elementi PgQ, Londiste e Walmgr e richiede anche il driver Python-Postgres 'psycopg2'.

  • PGQ:il suo meccanismo di coda costruito con pl/pgsql con sopra il framework phython.
  • Londiste:uno strumento di replica scritto in Phyton che utilizza PgQ come trasportatore di eventi.
  • Walmgr:crea una configurazione di archiviazione WAL.

Non descriverò molto qui per quanto riguarda il processo del demone di replica londiste ecc., Perché puoi trovare il miglior tutorial su Skytools(PgQ/Londiste/WalMgr) in questo link http://skytools.projects.postgresql.org/doc/.

Fondamentalmente, la mia demo include come procedere con la replica Londiste con PostgreSQL 9.0 insieme ai passaggi di installazione. Dico che la documentazione Skytools e il wiki PostgreSQL (http://wiki.postgresql.org/wiki/Londiste_Tutorial) sono più di qualsiasi altra cosa su cui giocare con la replica Londiste.

Prerequisiti con link per il download :

  • PostgreSQL – PostgreSQL 9.0 http://www.enterprisedb.com/products-services-training/pgdownload
  • skytools – skytools-2.1.12.tar.gz http://pgfoundry.org/frs/download.php/2872/skytools-2.1.12.tar.gz
  • psycopg2 – psycopg2-2.4.2.tar.gz http://initd.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.2.tar.gz

La mia demo include quanto segue:-

OS                     : RHEL 6 32 bit
DB version : PostgreSQL 9.0
Two Clusters & Database: londiste_provider on 5432,Londiste_subscriber on 5433
Table : One Table (ltest)
Location of .ini file : /opt/skytools-2.1.12/scripts
Location of Skytools : /opt/skytools-2.1.12
Location of PG 9.0 : /opt/PostgreSQL/9.0/

Come semplice demo con una tabella, ho provato con RHEL 6 32bit/PostgreSQL 9.0 con due cluster nella mia casella locale. Dovresti modificarlo secondo i requisiti effettivi.

Nota: Prima di procedere con l'installazione, vorrei ricordare che tutte le installazioni di origine devono essere come utente root e dopo l'installazione quelle directory dovrebbero possedere i permessi utente di Postgres.

Passaggio 1.
Installa PostgreSQL 9.0 e crea due cluster con il comando INITDB e assicurati che vengano eseguiti su 5432 e 5433 ciascuno. (Ricorda, è un vecchio fatto che con il comando INITDB la directory pg_log non verrà creata in Data_directory è necessario crearla esplicitamente.)

Passaggio 2.
Installa skytools scaricando dal link sopra. È buona norma mantenere tutte le sorgenti in un'unica posizione standard comune. Ho usato '/usr/local/src' e skytools sotto '/opt/'. Ora configura skytools con PostgreSQL 9.0 'pg_config'.

# tar -xvf skytools-2.1.12.tar.gz
# cd /usr/local/src/skytools-2.1.12
# ./configure --prefix=/opt/skytools-2.1.12 --with-pgconfig=/opt/PostgreSQL/9.0/bin/pg_config
# make
# make install

Nota: Dopo l'installazione vedrai due importanti moduli contrib (pgq e londiste) sotto PostgreSQL contrib location. Fondamentalmente, questi due contributi ti danno la funzionalità della replica londiste.

# cd /opt/PostgreSQL/9.0/share/postgresql/contrib
# ll lond*
-rw-r--r--. 1 root root 29771 Jan 11 13:24 londiste.sql
-rw-r--r--. 1 root root 27511 Jan 11 13:24 londiste.upgrade.sql

# ll pgq*
-rw-r--r--. 1 root root 4613 Jan 11 13:24 pgq_ext.sql
-rw-r--r--. 1 root root 1170 Jan 11 13:24 pgq_lowlevel.sql
-rw-r--r--. 1 root root 69798 Jan 11 13:24 pgq.sql
-rw-r--r--. 1 root root 3940 Jan 11 13:24 pgq_triggers.sql
-rw-r--r--. 1 root root 54182 Jan 11 13:24 pgq.upgrade.sql

Passaggio 3.
Installa psycopg2, è un driver phyton-postgres necessario per skytools. A volte questi driver non vengono forniti con Python, quindi ecco i passaggi di installazione.

# tar -xvf psycopg2-2.4.2.tar.gz
# cd psycopg2-2.4.2
# python setup.py install --prefix=/usr/local
# python setup.py build_ext --pg-config /opt/PostgreSQL/9.0/bin/pg_config

Passaggio 4.
Concedi la proprietà di Postgres a skytools e al luogo di installazione di Postgres. Questo assicura che tutti i file/eseguibili siano con autorizzazioni utente Postgres.

# chown -R postgres:postgres /opt/skytools-2.1.12 
# chown -R postgres:postgres /opt/PostgreSQL/9.0/

Passaggio 5.
Imposta LD_LIBRARY_PATH e PYTHONPATH e avvia i due cluster appena creati. Puoi inserirli in .bash_profile dell'utente postgres come soluzione permanente.

$export PYTHONPATH=/opt/skytools-2.1.12/lib/python2.6/site-packages/
$export LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
or
$ vi .bash_profile
export PYTHONPATH=/opt/skytools-2.1.12/lib/python2.6/site-packages/
export LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
:wq
$ . .bash_profile (execute to take effect of new settings)

Now Start the two cluster

$ pg_ctl -o "-p 5432" -D /opt/PostgreSQL/9.0/data start
$ pg_ctl -o "-p 5433" -D /opt/PostgreSQL/9.0/data_1 start

Passaggio 6.
Crea due database, londiste_provider in 5432 e londiste_subscriber in 5433. Crea una tabella con il nome della chiave primaria 'ltest' in due database e INSERT alcuni dati nella tabella londiste_provider (ltest) e successivamente al completamento dell'impostazione della replica dovresti vedere quelli INSERT dati nel lato londiste_subscriber.

Potresti non aver bisogno di CRETAE TABLE sul lato slave, invece puoi usare il dump/ripristino della struttura usando pg_dump/pg_restore, se hai molte tabelle.

On 5432
psql -p 5432 -c "create database londiste_provider;"
psql -p 5432 londiste_provider
londiste_provider=# create table ltest(id int primary key);
londiste_provider=# insert into ltest VALUES (generate_series(1,10));
INSERT 0 10

On 5433
psql -p 5433 -c "create database londiste_subscriber;"
psql -p 5433 londiste_subscriber
londiste_subscriber=# create table ltest(id int primary key);

Passaggio 7.
Crea due file .ini, uno per londiste(londiste.ini) e un altro per PgQ ticker(pgq_ticker.ini). Puoi anche trovare i file .ini di esempio dall'installazione di base di skytools. Es:- Posizione "/opt/skytools-2.1.12/share/doc/skytools/conf".

Passaggio 8.
Crea due directory per i file di log e PID e puntale nei parametri di londiste.ini e pgq_ticker.ini.

$ cd /opt/PostgreSQL/9.0
$ mkdir log pid

Fase 9 .
Avvia la replica con i file .ini, prima installa londiste su provider e abbonato e poi avvia il ticker (PgQ) per la replica delle tabelle.

Installa londiste su provider e abbonato con i seguenti comandi uno per uno:

$ cd /opt/skytools-2.1.12/bin
$ ./londiste.py ../scripts/londiste.ini provider install
2012-01-12 14:56:03,667 11073 INFO plpgsql is installed
2012-01-12 14:56:03,674 11073 INFO txid_current_snapshot is installed
2012-01-12 14:56:03,675 11073 INFO Installing pgq
2012-01-12 14:56:03,676 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/pgq.sql
2012-01-12 14:56:03,816 11073 INFO Installing londiste
2012-01-12 14:56:03,816 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

-bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber install
2012-01-12 14:56:17,871 11081 INFO plpgsql is installed
2012-01-12 14:56:17,872 11081 INFO Installing londiste
2012-01-12 14:56:17,873 11081 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

-->Now, Install PqQ and start ticker with .ini file.

-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini install
2012-01-11 16:45:03,219 6348 INFO plpgsql is installed
2012-01-11 16:45:03,225 6348 INFO txid_current_snapshot is installed
2012-01-11 16:45:03,228 6348 INFO pgq is installed

-bash-4.1$ ./pgqadm.py -d ../scripts/pgqadm.ini ticker -d

-->Add the table to provider & subscriber to replicate.

-bash-4.1$ ./londiste.py ../scripts/londiste.ini provider add ltest
2012-01-12 15:03:39,583 11139 INFO Adding public.ltest

-bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber add ltest
2012-01-12 15:03:47,367 11146 INFO Checking public.ltest
2012-01-12 15:03:47,384 11146 INFO Adding public.ltest

Dopo l'aggiunta avvia la replica della tabella.

-bash-4.1$ ./londiste.py ../ scripts/londiste.ini replay -d

Note: "-d" option is to run the londiste/PgQ daemons in background.

Qui completa la configurazione della replica. Ora dovresti vedere i dati della tabella "ltest" su Slave Side (cioè sulla porta 5433).

Passaggio 10.
Ora vediamo cosa è successo in background a table/logs/pids/data ecc., Vediamo uno per uno.

Informazioni sui registri:

Struttura della tabella dopo la replica:

Stato coda eventi
Lo stato della replica può essere verificato con l'utilità pgq come di seguito:-

-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini status
Postgres version: 9.0.1 PgQ version: 2.1.8

Event queue Rotation Ticker TLag
------------------------------------------------------------------------------
londiste.replica 3/7200s 500/3s/60s 6s
------------------------------------------------------------------------------

Consumer Lag LastSeen
------------------------------------------------------------------------------
londiste.replica:
myfirstlondiste 6s 6s
------------------------------------------------------------------------------

Nota: Ci sono ottime opzioni con le utilità Londiste e PGQ per svolgere attività di ricerca e sviluppo. Per favore, pubblica i tuoi commenti, quelli sono molto apprezzati. A presto con altri post.