sql >> Databasteknik >  >> RDS >> PostgreSQL

Londiste-replikering med PostgreSQL 9.0

Londiste, Asynchronous Master/Slave replikeringsverktyg utvecklat av Skytools. Dess mycket enkel och användarvänlig skapad som Slony. Kärnlogiken bakom Londiste eller Slony är Remote Triggering. Medan londiste följer händelsekömodell som inte är deras i Slony – I.

Översikt över Skytools:
Skytools är en Python-baserad applikation, den kommer med ett paket med tre saker PgQ,Londiste &Walmgr och det kräver också Python-Postgres-drivrutinen 'psycopg2'.

  • PGQ:Dess kömekanism byggd med pl/pgsql med phython-ramverk ovanpå.
  • Londiste:Ett replikeringsverktyg skrivet i Phyton med PgQ som händelsetransportör.
  • Walmgr :Skapar en WAL-arkiveringsinställning.

Jag tänker inte beskriva mycket här angående londiste replikeringsdemonprocess etc., eftersom du kan hitta den bästa handledningen angående Skytools(PgQ/Londiste/WalMgr) i denna länk http://skytools.projects.postgresql.org/doc/.

I grund och botten inkluderar min demo hur man går vidare med Londiste-replikering med PostgreSQL 9.0 tillsammans med installationssteg. Jag säger, Skytools dokumentation och PostgreSQL Wiki (http://wiki.postgresql.org/wiki/Londiste_Tutorial) är mer än vad som helst att leka med Londiste-replikering.

Förutsättningar med nedladdningslänkar:

  • 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

Min demo innehåller följande:-

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/

Som sin enkla demo med ett bord har jag försökt med RHEL 6 32bit/PostgreSQL 9.0 med två kluster i min lokala box. Du skulle behöva justera det enligt de faktiska kraven.

Obs! Innan jag går vidare med installationen vill jag påminna om att alla källinstallationer måste vara som root-användare och efter installationen bör dessa kataloger äga Postgres-användarbehörigheter.

Steg 1.
Installera PostgreSQL 9.0 och skapa två kluster med INITDB-kommandot och se till att de körs på 5432 och 5433 vardera. (Kom ihåg, det är ett gammalt faktum att med INITDB-kommandot pg_log katalogen inte kommer att skapas under Data_directory måste du skapa den explicit.)

Steg 2.
Installera skytools genom att ladda ner från länken ovan. Dess bästa praxis att hålla alla källor på en gemensam standardplats. Jag använde '/usr/local/src' och skytools under '/opt/'. Konfigurera nu skytools med 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

Obs! Efter installationen kommer du att se två viktiga bidragsmoduler (pgq &londiste) under PostgreSQL bidragsplats. I grund och botten ger dessa två bidrag dig funktionaliteten för londiste-replikering.

# 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

Steg 3.
Installera psycopg2, det är en phyton-postgres-drivrutin som är nödvändig för skytools. Ibland kommer dessa drivrutiner inte med python, så här är installationsstegen.

# 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

Steg 4.
Ge äganderätten till Postgres till skytools och postgres installationsplats. Detta säkerställer att alla filer/körbara filer har Postgres användarbehörighet.

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

Steg 5.
Ställ in LD_LIBRARY_PATH &PYTHONPATH och starta de två nyskapade klustren. Du kan placera dem i .bash_profile för postgres användare som permanent lösning.

$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

Steg 6.
Skapa två databaser, londiste_provider i 5432 och londiste_subscriber i 5433. Skapa en tabell med primärnyckelnamnet 'ltest' i två databaser och INFOGA lite data i londiste_provider (ltest)-tabellen och senare slutförande av replikeringsinställningarna bör du se dessa INSERT data på londiste_subscriber-sidan.

Du kanske inte behöver CRETAE TABLE på slavsidan, istället kan du använda strukturdump/restore genom att använda pg_dump/pg_restore, om du har många tabeller.

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

Steg 7.
Skapa två .ini-filer en för londiste(londiste.ini) och en annan för PgQ ticker(pgq_ticker.ini). Du kan också hitta exempel på .ini-filer från basinstallationen av skytools. T.ex.:- “/opt/skytools-2.1.12/share/doc/skytools/conf” plats.

Steg 8.
Skapa två kataloger för logg- och PID-filer och peka dem i parametrarna londiste.ini och pgq_ticker.ini.

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

Steg 9 .
Starta replikeringen med .ini-filer, installera först londiste på leverantör och prenumerant och starta sedan tickern (PgQ) för att replikera tabellerna.

Installera londiste på leverantör och abonnent med nedanstående kommandon ett efter ett:

$ 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

Efter att ha lagt till starta replikeringen av tabellen.

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

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

Slutför här replikeringsinställningen. Nu bör du se "ltest" tabelldata på slavsidan (dvs på 5433-porten).

Steg 10.
Låt oss nu förstå vad som hände i bakgrunden med tabell/loggar/pids/data etc., låt oss se en efter en.

Logginformation:

Tabellstruktur efter replikering:

Händelseköstatus
Replikeringsstatus kan kontrolleras med pgq-verktyget enligt nedan:-

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

Obs! Det finns mycket bra alternativ med Londiste &PGQ-verktyg för att göra FoU.
Hoppas att ni alla har en lyckad Londiste-replikeringsinstallation. Vänligen skriv dina kommentarer som är mycket uppskattade. Vi ses snart med några fler inlägg.


  1. Varning:mysqli_query():Det gick inte att hämta mysqli

  2. Spara utdata från sql-funktionen till csv-fil (COPY) med dynamiskt filnamn

  3. MySQL SLÄPP UNIK BEGRÄNSNING

  4. Vad är skillnaden mellan MS Access och SQL?