PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Londiste-Replikation mit PostgreSQL 9.0

Londiste, asynchrones Master/Slave-Replikationstool, entwickelt von Skytools. Es ist sehr einfach und benutzerfreundlich wie Slony erstellt. Kernlogik hinter Londiste oder Slony ist Remote Triggering. Wohingegen londiste dem Ereigniswarteschlangenmodell folgt, das nicht ihr Slony – I ist.

Überblick über Skytools:
Skytools ist eine Python-basierte Anwendung, die mit einem Paket aus drei Dingen PgQ, Londiste und Walmgr geliefert wird und außerdem den Python-Postgres-Treiber „psycopg2“ benötigt.

  • PGQ :Sein Warteschlangenmechanismus, der mit pl/pgsql mit dem Phython-Framework darauf gebaut wurde.
  • Londiste:Ein in Phyton geschriebenes Replikationstool, das PgQ als Ereignistransporter verwendet.
  • Walmgr :Erstellt ein WAL-Archivierungs-Setup.

Ich werde hier nicht viel über den londiste-Replikations-Daemon-Prozess usw. beschreiben, da Sie das beste Tutorial zu Skytools (PgQ/Londiste/WalMgr) unter diesem Link finden http://skytools.projects.postgresql.org/doc/.

Grundsätzlich enthält meine Demo, wie Sie mit der Londiste-Replikation mit PostgreSQL 9.0 fortfahren, zusammen mit Installationsschritten. Ich sage, die Skytools-Dokumentation und das PostgreSQL-Wiki (http://wiki.postgresql.org/wiki/Londiste_Tutorial) sind mehr als alles, um mit der Londiste-Replikation herumzuspielen.

Voraussetzungen mit Download-Links:

  • 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

Meine Demo beinhaltet Folgendes:-

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 einfache Demo mit einer Tabelle habe ich es mit RHEL 6 32bit/PostgreSQL 9.0 mit zwei Clustern in meiner lokalen Box versucht. Sie müssten es gemäß den tatsächlichen Anforderungen anpassen.

Hinweis: Bevor ich mit der Einrichtung fortfahre, möchte ich daran erinnern, dass alle Quellinstallationen als Root-Benutzer erfolgen müssen und dass diese Verzeichnisse nach der Installation Postgres-Benutzerberechtigungen besitzen sollten.

Schritt 1.
Installieren Sie PostgreSQL 9.0 und erstellen Sie zwei Cluster mit dem INITDB-Befehl und stellen Sie sicher, dass sie jeweils auf 5432 und 5433 laufen. (Denken Sie daran, es ist eine alte Tatsache, dass mit dem INITDB-Befehl pg_log das Verzeichnis nicht unter Data_directory erstellt wird, Sie müssen es explizit erstellen.)

Schritt 2.
Installieren Sie skytools, indem Sie es über den obigen Link herunterladen. Es empfiehlt sich, alle Quellen an einem gemeinsamen Standardspeicherort zu speichern. Ich habe ‚/usr/local/src‘ und skytools unter ‚/opt/‘ verwendet. Konfigurieren Sie nun skytools mit 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

Hinweis: Nach der Installation sehen Sie zwei wichtige Contrib-Module (pgq &londiste) unter PostgreSQL contrib location. Grundsätzlich bieten Ihnen diese beiden Beiträge die Funktionalität der Londiste-Replikation.

# 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

Schritt 3.
Installieren Sie psycopg2, einen Phyton-Postgres-Treiber, der für Skytools erforderlich ist. Manchmal werden diese Treiber nicht mit Python geliefert, also hier sind die Installationsschritte.

# 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

Schritt 4.
Geben Sie das Eigentum an Postgres an Skytools und den Postgres-Installationsort. Dadurch wird sichergestellt, dass alle Dateien/ausführbaren Dateien Postgres-Benutzerberechtigungen haben.

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

Schritt 5.
Setzen Sie LD_LIBRARY_PATH &PYTHONPATH und starten Sie die beiden neu erstellten Cluster. Sie können sie als dauerhafte Lösung in .bash_profile des Postgres-Benutzers platzieren.

$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

Schritt 6.
Erstellen Sie zwei Datenbanken, londiste_provider in 5432 und londiste_subscriber in 5433. Erstellen Sie eine Tabelle mit dem Primärschlüsselnamen 'ltest' in zwei Datenbanken und fügen Sie einige Daten in die Tabelle londiste_provider (ltest) ein und nach Abschluss der Replikationseinrichtung sollten Sie diese INSERT sehen Daten auf der Seite londiste_subscriber.

Möglicherweise benötigen Sie CRETAE TABLE auf der Slave-Seite nicht, stattdessen können Sie Struktur-Dump/Restore verwenden, indem Sie pg_dump/pg_restore verwenden, wenn Sie viele Tabellen haben.

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

Schritt 7.
Erstellen Sie zwei .ini-Dateien, eine für londiste (londiste.ini) und eine für PgQ-Ticker (pgq_ticker.ini). Sie können auch die Beispiel-.ini-Dateien von der Basisinstallation von skytools finden. Beispiel:- Speicherort „/opt/skytools-2.1.12/share/doc/skytools/conf“.

Schritt 8.
Erstellen Sie zwei Verzeichnisse für Log- und PID-Dateien und weisen Sie sie in den Parametern von londiste.ini und pgq_ticker.ini zu.

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

Schritt 9 .
Starten Sie die Replikation mit .ini-Dateien, installieren Sie zuerst londiste auf Provider und Subscriber und starten Sie dann den Ticker (PgQ) zum Replizieren der Tabellen.

Installieren Sie londiste auf Anbieter und Abonnent mit den folgenden Befehlen nacheinander:

$ 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

Starten Sie nach dem Hinzufügen die Replikation der Tabelle.

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

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

Schließen Sie hier die Replikationseinrichtung ab. Jetzt sollten Sie die „ltest“-Tabellendaten auf der Slave-Seite sehen (d. h. auf Port 5433).

Schritt 10.
Lassen Sie uns nun verstehen, was alles im Hintergrund mit Tabellen/Protokollen/PIDs/Daten usw. passiert ist. Sehen wir uns eines nach dem anderen an.

Protokollinformationen:

Tabellenstruktur nach der Replikation:

Status der Ereigniswarteschlange
Der Replikationsstatus kann mit dem Dienstprogramm pgq wie folgt überprüft werden:-

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

Hinweis: Es gibt sehr gute Optionen mit Londiste- und PGQ-Hilfsprogrammen, um Forschung und Entwicklung zu betreiben.
Ich hoffe, Sie alle haben eine erfolgreiche Londiste-Replikationseinrichtung. Bitte posten Sie Ihre Kommentare, die sehr geschätzt werden. Bis bald mit weiteren Beiträgen.