sql >> Base de Datos >  >> RDS >> PostgreSQL

Londiste Replicación con PostgreSQL 9.0

Londiste, herramienta de replicación Asynchronous Master/Slave desarrollada por Skytools. Es muy simple y fácil de usar creado como Slony. La lógica central detrás de Londiste o Slony es la activación remota. Mientras que londiste sigue un modelo de cola de eventos que no es el de Slony – I.

Descripción general de Skytools:
Skytools es una aplicación basada en Python, viene con un paquete de tres cosas PgQ, Londiste y Walmgr y también requiere el controlador Python-Postgres 'psycopg2'.

  • PGQ:su mecanismo de cola construido con pl/pgsql con el marco de Phython encima.
  • Londiste:Una herramienta de replicación escrita en Phyton usando PgQ como transportador de eventos.
  • Walmgr:crea una configuración de archivo WAL.

No voy a describir mucho aquí sobre el proceso del demonio de replicación de londiste, etc., porque puede encontrar el mejor tutorial sobre Skytools (PgQ/Londiste/WalMgr) en este enlace http://skytools.projects.postgresql.org/doc/.

Básicamente, mi demostración incluye cómo proceder con la replicación de Londiste con PostgreSQL 9.0 junto con los pasos de instalación. Digo, la documentación de Skytools y PostgreSQL Wiki (http://wiki.postgresql.org/wiki/Londiste_Tutorial) es más que nada para jugar con la replicación de Londiste.

Requisitos previos con enlaces de descarga:

  • 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

Mi demostración incluye lo siguiente:-

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/

Como su demostración simple con una tabla, probé con RHEL 6 32bit/PostgreSQL 9.0 con dos clústeres en mi caja local. Debería modificarlo según los requisitos reales.

Nota: Antes de continuar con la configuración, me gustaría recordar que todas las instalaciones de origen deben ser como usuario raíz y, después de la instalación, esos directorios deben tener permisos de usuario de Postgres.

Paso 1.
Instale PostgreSQL 9.0 y cree dos clústeres con el comando INITDB y asegúrese de que se ejecuten en 5432 y 5433 cada uno. (Recuerde, es un hecho antiguo que con el comando INITDB, el directorio pg_log no se creará en Data_directory, debe crearlo explícitamente).

Paso 2.
Instale skytools descargándolos desde el enlace anterior. Su mejor práctica es mantener todas las fuentes en una ubicación estándar común. Usé ‘/usr/local/src’ y skytools en ‘/opt/’. Ahora configure 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: Después de la instalación, verá dos módulos de contribución importantes (pgq y londiste) en la ubicación de contribución de PostgreSQL. Básicamente, estas dos contribuciones le brindan la funcionalidad de la replicación 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

Paso 3.
Instale psycopg2, es un controlador phyton-postgres que es necesario para skytools. En algún momento, estos controladores no vendrán con python, así que estos son los pasos de instalación.

# 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

Paso 4.
Otorgue la propiedad de Postgres a skytools y la ubicación de instalación de Postgres. Esto asegura que todos los archivos/ejecutables tengan permisos de usuario de Postgres.

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

Paso 5.
Establezca LD_LIBRARY_PATH &PYTHONPATH e inicie los dos clústeres recién creados. Puede colocarlos en .bash_profile del usuario de postgres como solución 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

Paso 6.
Cree dos bases de datos, londiste_provider en 5432 y londiste_subscriber en 5433. Cree una tabla con el nombre de clave principal 'ltest' en dos bases de datos e INSERTE algunos datos en la tabla londiste_provider (ltest) y luego complete la configuración de replicación, debería ver esos INSERT datos en el lado londiste_subscriber.

Es posible que no necesite CRETAE TABLE en el lado esclavo, en su lugar, puede usar el volcado/restauración de la estructura usando pg_dump/pg_restore, si tiene muchas tablas.

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

Paso 7.
Cree dos archivos .ini uno para londiste(londiste.ini) y otro para PgQ ticker(pgq_ticker.ini). También puede encontrar los archivos .ini de muestra de la instalación base de skytools. Por ejemplo:- ubicación "/opt/skytools-2.1.12/share/doc/skytools/conf".

Paso 8.
Cree dos directorios para los archivos de registro y PID y apúntelos en los parámetros de londiste.ini y pgq_ticker.ini.

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

Paso 9 .
Inicie la replicación con archivos .ini, primero instale londiste en el proveedor y el suscriptor y luego inicie el ticker (PgQ) para replicar las tablas.

Instale londiste en el proveedor y el suscriptor con los siguientes comandos uno por 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

Después de agregar, comience la replicación de la tabla.

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

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

Aquí complete la configuración de replicación. Ahora debería ver los datos de la tabla "ltest" en el lado esclavo (es decir, en el puerto 5433).

Paso 10.
Ahora entendamos lo que sucedió en segundo plano con la tabla/registros/pids/datos, etc., veamos uno por uno.

Información de registros:

Estructura de la tabla después de la replicación:

Estado de la cola de eventos
El estado de la replicación se puede verificar con la utilidad pgq de la siguiente manera:-

-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: Hay muy buenas opciones con las utilidades Londiste y PGQ para hacer I + D.
Espero que todos tengan una configuración de replicación exitosa de Londiste. Por favor, publique sus comentarios, son muy apreciados. Nos vemos pronto con más publicaciones.