replicación usando slony i - postgresqlwiki.postgresql.org/images/b/b3/slony_i.pdf · guardar las...
TRANSCRIPT
![Page 1: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/1.jpg)
Replicación usando Slony- I
por Jaime Casanova
![Page 2: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/2.jpg)
PostgreSQL
Conceptos
Requisitos
Configuración
Iniciando la replicación
Mantenimiento
![Page 3: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/3.jpg)
Conceptos
PostgreSQL
Cluster: Es el conjunto de instancias de bases de datos PostgreSQL que están envueltos en la replicación.
Nodo: Se le llama así a cada una de las bases de datos envueltas en la replicación.
Replication set: Es el conjunto de tablas y/o secuencias a ser replicadas. En un mismo cluster pueden haber varios sets.
![Page 4: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/4.jpg)
Conceptos
PostgreSQL
Origin: Es el nodo principal (maestro), es el único en el que se puede escribir.
Subscribers: Son todos los demás nodos en el cluster (esclavos), son los que reciben los datos en la réplica.
Providers: Es un nodo subscriber (esclavo) que sirve como proveedor para un subconjunto de nodos en el cluster (actúa como un nodo origin pero no se permite a ninguna aplicación escribir en él).
![Page 5: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/5.jpg)
Requisitos
PostgreSQL
Postgresql >= 7.3.3 (7.4.8 o superior es recomendado).
Verificar que postgres este aceptando conexiones (listen_addresses='*' y el pg_hba.conf)
Definir la estructura del cluster (a cada nodo del cluster se le debe identificar con un número).
![Page 6: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/6.jpg)
Requisitos
PostgreSQL
Definir los replication sets (llaves para las tablas que no tienen un PK, tablas, secuencias).
Tablas relacionadas por un FK deberían estar en el mismo replication set.
![Page 7: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/7.jpg)
Configuración
PostgreSQL
IMPORTANTE
Todos los nodos involucrados en la replicación deben estar usando un timezone reconocido por PostgreSQL (en Ecuador lo correcto es GMT+5)
Se debe setear en el archivo postgresql.conf
![Page 8: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/8.jpg)
Configuración
PostgreSQL
Usaremos un rol especifico para la replicación. create user slony superuser;
Se deben crear los roles y tablespaces en los nodos. pg_dumpall -r | psql -h dir_ip -p puerto pg_dumpall -t | psql -h dir_ip -p puerto
Crear la base de datos y el esquema de la base de datos en los nodos.
pg_dump -C -s base_datos | psql -h dir_ip -p puerto
![Page 9: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/9.jpg)
Iniciando la replicación
PostgreSQL
Las siguientes líneas se deben incluir en todos los scripts de slonik, grabelas en un archivo que será incluido en los demás scripts. Yo lo llame common.slonik: cluster name = $nombre_clusternode 1 admin conninfo = 'host=$ip_maestro dbname=$base user=$usuario';node 2 admin conninfo = 'host=$ip_esclavo dbname=$base user=$usuario';
[añada tantas líneas como nodos tenga su cluster...]
![Page 10: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/10.jpg)
Iniciando la replicación
PostgreSQL
Inicializar el cluster y los nodos.
Guardar las rutas para comunicar los diferentes nodos entre sí.
Iniciar los procesos slon.
Crear un replication set.
Añadir tablas y secuencias al replication set.
Subscribir los nodos al replication set.
![Page 11: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/11.jpg)
Iniciando la replicación
PostgreSQL
Debemos inicializar el cluster indicando cual será el maestro y luego incluimos los nodos: #!/bin/sh
slonik <<_EOF_ include <common.slonik>;
init cluster (id=1, comment = 'maestro'); store node (id=2, comment = 'esclavo1');_EOF_
![Page 12: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/12.jpg)
Iniciando la replicación
PostgreSQL
Debemos indicarle como comunicar cada uno de los servidores con los otros: #!/bin/sh
slonik <<_EOF_ include <common.slonik>;
store path (server = 1, client = 2, conninfo='dbname=$base host=$ip_maestro user=$usuario'); store path (server = 2, client = 1, conninfo='dbname=$base host=$ip_esclavo user=$usuario');_EOF_
![Page 13: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/13.jpg)
Iniciando la replicación
PostgreSQL
Iniciamos los procesos slon. Uno por cada nodo: slon -d2 $cluster_name 'host=$ip_maestro dbname=$base user=$usuario' &slon -d2 $cluster_name 'host=$ip_esclavo dbname=$base user=$usuario' &
![Page 14: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/14.jpg)
Iniciando la replicación
PostgreSQL
Creamos un replication set, este es el conjunto de tablas y secuencias a ser copiadas: #!/bin/sh
slonik <<_EOF_ include <common.slonik>;
create set (id=1, origin=1, comment='Primer grupo de tablas');_EOF_
![Page 15: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/15.jpg)
Iniciando la replicación
PostgreSQL
Se añaden tablas y secuencias al replication set, esto debe planificarse de forma adecuada puesto que no se pueden añadir mas tablas una vez que el replication set se este replicando: #!/bin/sh
slonik <<_EOF_ include <common.slonik>;
set add sequence (set id=1, origin=1, id=1, fully qualified name = 'public.address_book_address_book_id_seq', comment='address book id'); set add table (set id=1, origin=1, id=1, fully qualified name = 'public.address_book', comment='address booK table');
_EOF_
![Page 16: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/16.jpg)
Iniciando la replicación
PostgreSQL
Finalmente subscribimos los nodos a los replication sets: #!/bin/sh
slonik <<_EOF_ include <common.slonik>;
subscribe set (id=1, provider=1, receiver=2, forward=yes);
_EOF_
![Page 17: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/17.jpg)
Mantenimiento: Añadir una nueva tabla
PostgreSQL
Crear un nuevo replication set.
Añadir la tabla y/o secuencia al nuevo set.
Subscribir los nodos al replication set.
Merge set.
![Page 18: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/18.jpg)
Mantenimiento: Quitar una tabla
PostgreSQL
set drop table.
set drop sequence.
![Page 19: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/19.jpg)
Mantenimiento: Añadir un nuevo replication set
PostgreSQL
create set.
set add table / set add sequences.
subscribe set.
![Page 20: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/20.jpg)
Mantenimiento: Quitar un replication set
PostgreSQL
De un solo nodo:
unsubscribe set.
De todos los nodos:
drop set.
![Page 21: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/21.jpg)
Mantenimiento: Cambiar papeles
PostgreSQL
lock set(id=1, origin=1);
wait for event (origin = 1, confirmed = 2);
move set (id = 1, old origin = 1, new origin = 2);
wait for event (origin = 1, confirmed = 2);
![Page 22: Replicación usando Slony I - PostgreSQLwiki.postgresql.org/images/b/b3/Slony_I.pdf · Guardar las rutas para comunicar los diferentes nodos entre sí. Iniciar los procesos slon](https://reader033.vdocumento.com/reader033/viewer/2022050210/5f5c97a78086767029446e7e/html5/thumbnails/22.jpg)
Mantenimiento: Failover
PostgreSQL
FAILOVER (ID = 1, BACKUP NODE = 2);