PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Réplication Londiste avec PostgreSQL 9.0

Londiste, outil de réplication maître/esclave asynchrone développé par Skytools. C'est très simple et convivial créé comme Slony. La logique de base derrière Londiste ou Slony est le déclenchement à distance. Alors que londiste suit un modèle de file d'attente d'événements qui n'est pas le leur dans Slony - I.

Vue d'ensemble sur Skytools :
Skytools est une application basée sur Python, elle est livrée avec un ensemble de trois choses PgQ, Londiste &Walmgr et elle nécessite également le pilote Python-Postgres ‘psycopg2’.

  • PGQ :son mécanisme de file d'attente construit avec pl/pgsql avec un framework phython en plus.
  • Londiste :un outil de réplication écrit en Phyton utilisant PgQ comme transporteur d'événements.
  • Walmgr :Crée une configuration d'archivage WAL.

Je ne vais pas décrire grand-chose ici concernant le processus du démon de réplication londiste, etc., car vous pouvez trouver le meilleur tutoriel concernant Skytools (PgQ/Londiste/WalMgr) dans ce lien http://skytools.projects.postgresql.org/doc/.

Fondamentalement, ma démo explique comment procéder à la réplication Londiste avec PostgreSQL 9.0 ainsi que les étapes d'installation. Je dis que la documentation Skytools et le wiki PostgreSQL (http://wiki.postgresql.org/wiki/Londiste_Tutorial) sont plus que n'importe quoi pour jouer avec la réplication Londiste.

Prérequis avec liens de téléchargement :

  • 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

Ma démo comprend les éléments suivants :-

SE :RHEL 6 32 bits
Version DB :PostgreSQL 9.0
Deux clusters et base de données :londiste_provider sur 5432, Londiste_subscriber sur 5433
Table :une table (ltest)
Emplacement du fichier .ini :/opt/skytools-2.1.12/scripts
Emplacement de Skytools :/opt/skytools-2.1.12
Emplacement de PG 9.0 :/opt/PostgreSQL/9.0/

Comme démo simple avec une table, j'ai essayé avec RHEL 6 32bit/PostgreSQL 9.0 avec deux clusters dans ma boîte locale. Vous devrez le modifier en fonction des besoins réels.

Remarque : Avant d'aller de l'avant avec la configuration, je voudrais rappeler que toutes les installations source doivent être en tant qu'utilisateur root et qu'après l'installation, ces répertoires doivent posséder les autorisations utilisateur Postgres.

Étape 1.
Installez PostgreSQL 9.0 et créez deux clusters avec la commande INITDB et assurez-vous qu'ils s'exécutent sur 5432 et 5433 chacun. (Rappelez-vous, c'est un fait ancien qu'avec la commande INITDB, le répertoire pg_log ne sera pas créé sous Data_directory, vous devez le créer explicitement.)

Étape 2.
Installez skytools en téléchargeant à partir du lien ci-dessus. Il est recommandé de conserver toutes les sources dans un emplacement standard commun. J'ai utilisé '/usr/local/src' et skytools sous '/opt/'. Configurez maintenant skytools avec 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

Remarque : Après l'installation, vous verrez deux modules de contribution importants (pgq et londiste) sous l'emplacement de la contribution PostgreSQL. Fondamentalement, ces deux contributions vous offrent la fonctionnalité de réplication 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 racine racine 4613 11 janvier 13:24 pgq_ext.sql
-rw-r--r--. 1 root root 1170 Jan 11 13:24 pgq_lowlevel.sql
-rw-r--r--. 1 racine racine 69798 11 janvier 13:24 pgq.sql
-rw-r--r--. 1 racine racine 3940 11 janvier 13:24 pgq_triggers.sql
-rw-r--r--. 1 racine racine 54182 11 janvier 13:24 pgq.upgrade.sql

Étape 3.
Installez psycopg2, c'est un pilote phyton-postgres qui est nécessaire pour skytools. Parfois, ces pilotes ne sont pas livrés avec Python, voici donc les étapes d'installation.

# 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

Étape 4.
Donnez la propriété de Postgres à skytools et à l'emplacement d'installation de postgres. Cela garantit que tous les fichiers/exécutables disposent des autorisations d'utilisateur Postgres.

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

Étape 5.
Définissez LD_LIBRARY_PATH &PYTHONPATH et démarrez les deux clusters nouvellement créés. Vous pouvez les placer dans .bash_profile de l'utilisateur postgres en tant que solution 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 :
ou
$ 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 (exécutez pour prendre effet des nouveaux paramètres)

Démarrez maintenant les deux clusters

$ 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

Étape 6.
Créez deux bases de données, londiste_provider en 5432 et londiste_subscriber en 5433. Créez une table avec le nom de clé primaire 'ltest' dans deux bases de données et INSÉREZ quelques données dans la table londiste_provider (ltest) et plus tard à la fin de la configuration de la réplication, vous devriez voir ces INSÉRER données du côté londiste_subscriber.

Vous n'aurez peut-être pas besoin de CRETAE TABLE côté esclave, mais vous pouvez utiliser la structure dump/restore en utilisant pg_dump/pg_restore, si vous avez plusieurs tables.

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

Étape 7.
Créez deux fichiers .ini un pour londiste(londiste.ini) et un autre pour PgQ ticker(pgq_ticker.ini). Vous pouvez également trouver les exemples de fichiers .ini à partir de l'installation de base de skytools. Par exemple :- Emplacement "/opt/skytools-2.1.12/share/doc/skytools/conf".

Étape 8.
Créez deux répertoires pour les fichiers log et PID et pointez-les dans les paramètres de londiste.ini et pgq_ticker.ini.

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

Étape 9 .
Démarrez la réplication avec les fichiers .ini, installez d'abord londiste sur le fournisseur et l'abonné, puis démarrez le ticker (PgQ) pour répliquer les tables.

Installez londiste sur le fournisseur et l'abonné avec les commandes ci-dessous une par une :

$ cd /opt/skytools-2.1.12/bin
$ ./londiste.py ../scripts/londiste.ini provider install
2012-01-12 14:56:03,667 11073 INFO plpgsql est installé. 14:56:03,676 11073 INFO Lecture depuis /opt/skytools-2.1.12/share/skytools/pgq.sql
2012-01-12 14:56:03,816 11073 INFO Installation de londiste
2012-01 -12 14:56:03,816 11073 INFO Lecture depuis /opt/skytools-2.1.12/share/skytools/londiste.sql

-bash-4.1$ ./londiste.py ../scripts/ installation de l'abonné londiste.ini
2012-01-12 14:56:17,871 11081 INFO plpgsql est installé
2012-01-12 14:56:17,872 11081 INFO Installation de londiste
2012-01- 12 14:56:17,873 11081 INFO Lecture depuis /opt/skytools-2.1.12/share/skytools/londiste.sql

-->Maintenant, installez PqQ et lancez le ticker avec le fichier .ini.

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

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

-->Ajouter la table au fournisseur et à l'abonné à répliquer.

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

-bash-4.1$ ./ londiste.py ../scripts/londiste.ini subscriber add ltest
2012-01-12 15:03:47,367 11146 INFO Vérification de public.ltest
2012-01-12 15:03:47,384 11146 INFO Ajout de public.ltest

Après l'ajout, lancez la réplication de la table.

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

Remarque :l'option "-d" permet d'exécuter les démons londiste/PgQ en arrière-plan.

Terminez ici la configuration de la réplication. Vous devriez maintenant voir les données de la table "ltest" du côté esclave (c'est-à-dire sur le port 5433).

Étape 10.
Maintenant, comprenons ce qui s'est passé en arrière-plan pour les tables/journaux/pids/données, etc., voyons un par un.

Informations sur les journaux :

Structure de la table après réplication :

État de la file d'attente des événements
L'état de la réplication peut être vérifié avec l'utilitaire pgq comme ci-dessous :-

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

Feuille d'événement Rotation Ticker TLag
--------------------------------------------- ---------------------------------
londiste.replica 3/7200s 500/3s/60s 6s
------------------------------------------------------------ -------------------------------

Retard du consommateur pour la dernière fois
---- -------------------------------------------------- ------------------------
londiste.replica :
myfirstlondiste 6s 6s
------- -------------------------------------------------- ---------------------

Remarque : Il existe de très bonnes options avec les utilitaires Londiste et PGQ pour faire de la R &D.
En espérant que vous avez tous une configuration de réplication Londiste réussie. S'il vous plaît poster vos commentaires ceux-ci sont très appréciés. A bientôt avec d'autres publications.