sql >> Database >  >> RDS >> PostgreSQL

Londiste-replicatie met PostgreSQL 9.0

Londiste, asynchrone master/slave-replicatietool ontwikkeld door Skytools. Het is heel eenvoudig en gebruiksvriendelijk gemaakt zoals Slony. Kernlogica achter Londiste of Slony is Remote Triggering. Terwijl londiste het wachtrijmodel voor gebeurtenissen volgt, wat niet hun in Slony – I is.

Overzicht op Skytools:
Skytools is een op Python gebaseerde applicatie, het wordt geleverd met een bundel van drie dingen PgQ,Londiste &Walmgr en het vereist ook het Python-Postgres-stuurprogramma 'psycopg2'.

  • PGQ:Het wachtrijmechanisme is gebouwd met pl/pgsql met een phython-framework erbovenop.
  • Londiste:een replicatietool geschreven in Phyton met PgQ als gebeurtenistransporter.
  • Walmgr:Creëert een WAL-archiveringsconfiguratie.

Ik ga hier niet veel beschrijven over het londiste-replicatiedaemon-proces enz., omdat je de beste tutorial over Skytools (PgQ/Londiste/WalMgr) kunt vinden in deze link http://skytools.projects.postgresql.org/doc/.

Kortom, mijn demo omvat hoe verder te gaan met Londiste-replicatie met PostgreSQL 9.0 samen met installatiestappen. Ik zeg, Skytools-documentatie en PostgreSQL Wiki (http://wiki.postgresql.org/wiki/Londiste_Tutorial) is meer dan wat dan ook om te spelen met Londiste-replicatie.

Vereisten met downloadlinks :

  • 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

Mijn demo omvat het volgende:-

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/

Als eenvoudige demo met één tabel heb ik het geprobeerd met RHEL 6 32bit/PostgreSQL 9.0 met twee clusters in mijn lokale box. Je zou het moeten aanpassen volgens de werkelijke vereisten.

Opmerking: Voordat ik verder ga met de installatie, wil ik eraan herinneren dat alle broninstallaties als rootgebruiker moeten zijn en dat die mappen na installatie over Postgres-gebruikersrechten moeten beschikken.

Stap 1.
Installeer PostgreSQL 9.0 en maak twee clusters met het INITDB-commando en zorg ervoor dat ze elk op 5432 &5433 draaien. (Vergeet niet dat het een oud feit is dat met het INITDB-commando pg_log directory niet wordt aangemaakt onder Data_directory, je moet het expliciet maken.)

Stap 2.
Installeer skytools door te downloaden via de bovenstaande link. Het is de beste methode om alle bronnen op één gemeenschappelijke standaardlocatie te bewaren. Ik gebruikte '/usr/local/src' en skytools onder '/opt/'. Configureer nu skytools met 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

Opmerking: Na de installatie ziet u twee belangrijke bijdragenmodules (pgq &londiste) onder PostgreSQL-bijdragelocatie. Kortom, deze twee bijdragen geven je de functionaliteit van londiste-replicatie.

# 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

Stap 3.
Installeer psycopg2, het is een phyton-postgres driver die nodig is voor skytools. Soms worden deze stuurprogramma's niet met python geleverd, dus hier zijn de installatiestappen.

# 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

Stap 4.
Geef eigendom van Postgres aan skytools en postgres installatielocatie. Dit zorgt ervoor dat alle bestanden/uitvoerbare bestanden met Postgres-gebruikersrechten zijn.

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

Stap 5.
Stel de LD_LIBRARY_PATH &PYTHONPATH in en start de twee nieuw aangemaakte clusters. Je kunt ze in .bash_profile van postgres-gebruiker plaatsen als permanente oplossing.

$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

Stap 6.
Maak twee databases, londiste_provider in 5432 en londiste_subscriber in 5433. Maak een tabel met de primaire sleutelnaam 'ltest' in twee databases en INSERT enkele gegevens in de londiste_provider (ltest) tabel en later voltooit u de replicatie-instellingen. U zou die moeten zien INSERT gegevens in de londiste_subscriber-kant.

Mogelijk hebt u CRETAE TABLE niet nodig aan de slave-zijde, maar kunt u structure dump/restore gebruiken door pg_dump/pg_restore te gebruiken, als u veel tabellen heeft.

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);

Stap 7.
Maak twee .ini-bestanden, één voor londiste(londiste.ini) en één voor PgQ ticker(pgq_ticker.ini). U kunt ook de voorbeeld-.ini-bestanden van de basisinstallatie van skytools vinden. Bijv.:- "/opt/skytools-2.1.12/share/doc/skytools/conf" locatie.

Stap 8.
Maak twee mappen voor log- en PID-bestanden en verwijs ze naar de parameters van londiste.ini en pgq_ticker.ini.

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

Stap 9 .
Start de replicatie met .ini-bestanden, installeer eerst londiste op provider en abonnee en start vervolgens de ticker (PgQ) voor het repliceren van de tabellen.

Installeer londiste op provider en abonnee met onderstaande commando's een voor een:

$ 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

Na het toevoegen start de replicatie van de tabel.

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

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

Voltooi hier de replicatie-instellingen. Nu zou u de "ltest" -tabelgegevens op Slave Side (d.w.z. op 5433-poort) moeten zien.

Stap 10.
Laten we nu eens begrijpen wat er allemaal op de achtergrond is gebeurd met tabellen/logs/pids/data enz.. Laten we een voor een bekijken.

Loggegevens:

Tabelstructuur na replicatie:

Status gebeurteniswachtrij
Replicatiestatus kan worden gecontroleerd met het pgq-hulpprogramma zoals hieronder:-

-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
------------------------------------------------------------------------------

Opmerking: Er zijn zeer goede opties met Londiste &PGQ-hulpprogramma's om R &D te doen.
Ik hoop dat jullie allemaal een succesvolle Londiste-replicatie-installatie hebben. Plaats alstublieft uw opmerkingen, die worden zeer op prijs gesteld. Tot snel met nog wat berichten.


  1. Waarom is 1899-12-30 de nuldatum in Access / SQL Server in plaats van 31-12?

  2. Aan de slag met Oracle Application Express-APEX

  3. MySQL-foutcode:1175 tijdens UPDATE in MySQL Workbench

  4. Is het mogelijk om Full Text Search (FTS) te gebruiken met LINQ?