SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Replicación usando
Slony- I
por Jaime Casanova
PostgreSQL
Conceptos
Requisitos
Configuración
Iniciando la replicación
Mantenimiento
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.
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).
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).
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.
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
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
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_cluster
node 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...]
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.
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_
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_
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' &
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_
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_
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_
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.
Mantenimiento: Quitar una tabla
PostgreSQL
set drop table.
set drop sequence.
Mantenimiento: Añadir un nuevo replication set
PostgreSQL
create set.
set add table / set add sequences.
subscribe set.
Mantenimiento: Quitar un replication set
PostgreSQL
De un solo nodo:
unsubscribe set.
De todos los nodos:
drop set.
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);
Mantenimiento: Failover
PostgreSQL
FAILOVER (ID = 1, BACKUP NODE = 2);

Más contenido relacionado

La actualidad más candente

Guia basica de comandos ubuntu
Guia basica de comandos ubuntuGuia basica de comandos ubuntu
Guia basica de comandos ubuntu
ssxdan
 
Comandos GNU/Linux-Unix y programación shell.
Comandos GNU/Linux-Unix y programación shell.Comandos GNU/Linux-Unix y programación shell.
Comandos GNU/Linux-Unix y programación shell.
Alan Resendiz
 
Comandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntuComandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntu
Monchitocm Cuemtz
 
Permisos de archivo
Permisos de archivoPermisos de archivo
Permisos de archivo
jarx75
 
Guia backtrack
Guia backtrackGuia backtrack
Guia backtrack
TECHTM
 
Instalacion zoneminder
Instalacion zoneminderInstalacion zoneminder
Instalacion zoneminder
icetrue
 
Control1 victoria diaz
Control1   victoria diazControl1   victoria diaz
Control1 victoria diaz
victdiazm
 

La actualidad más candente (19)

Comandos basicos linux
Comandos basicos linuxComandos basicos linux
Comandos basicos linux
 
Holameperdonas
HolameperdonasHolameperdonas
Holameperdonas
 
Comandos de linux
Comandos de linuxComandos de linux
Comandos de linux
 
2.6.montajes y accesos a medios
2.6.montajes y accesos a medios2.6.montajes y accesos a medios
2.6.montajes y accesos a medios
 
20 comandos linux que todos los administradores deben conocer
20 comandos linux que todos los administradores deben conocer20 comandos linux que todos los administradores deben conocer
20 comandos linux que todos los administradores deben conocer
 
Guia basica de comandos ubuntu
Guia basica de comandos ubuntuGuia basica de comandos ubuntu
Guia basica de comandos ubuntu
 
Manual ssh
Manual sshManual ssh
Manual ssh
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
Instrucciones basicas de mySQL
Instrucciones basicas de mySQLInstrucciones basicas de mySQL
Instrucciones basicas de mySQL
 
Comandos GNU/Linux-Unix y programación shell.
Comandos GNU/Linux-Unix y programación shell.Comandos GNU/Linux-Unix y programación shell.
Comandos GNU/Linux-Unix y programación shell.
 
Comandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntuComandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntu
 
Permisos de archivo
Permisos de archivoPermisos de archivo
Permisos de archivo
 
Configuracion Ubuntu Server
Configuracion Ubuntu ServerConfiguracion Ubuntu Server
Configuracion Ubuntu Server
 
Comandos%20 bsicos
Comandos%20 bsicosComandos%20 bsicos
Comandos%20 bsicos
 
Guia backtrack
Guia backtrackGuia backtrack
Guia backtrack
 
Instalacion zoneminder
Instalacion zoneminderInstalacion zoneminder
Instalacion zoneminder
 
Control1 victoria diaz
Control1   victoria diazControl1   victoria diaz
Control1 victoria diaz
 
COMANDOS BASICOS DE LINUX
COMANDOS BASICOS DE LINUXCOMANDOS BASICOS DE LINUX
COMANDOS BASICOS DE LINUX
 
Linux comandos 1
Linux comandos 1Linux comandos 1
Linux comandos 1
 

Similar a Slony i

Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
Johanna Mendez
 
58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico
Lucia Zambrano Franco
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
Leonardo Cezar
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_p
edvin_marcelo
 
Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06
Alexander Calderón
 
Sql dinamico14042011
Sql dinamico14042011Sql dinamico14042011
Sql dinamico14042011
josecuartas
 

Similar a Slony i (20)

Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Fundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLFundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQL
 
Habilidades de linux
Habilidades de linuxHabilidades de linux
Habilidades de linux
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_p
 
Mysql
MysqlMysql
Mysql
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 
Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06
 
Presentación de Postgresql 9.1
Presentación de Postgresql 9.1Presentación de Postgresql 9.1
Presentación de Postgresql 9.1
 
Pg pool cluster postgresql
Pg pool cluster postgresqlPg pool cluster postgresql
Pg pool cluster postgresql
 
Postgres trigger
Postgres triggerPostgres trigger
Postgres trigger
 
Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresql
 
RESUME SOBRE LA TERMINAL DE UBUNTU
RESUME SOBRE LA TERMINAL DE UBUNTU RESUME SOBRE LA TERMINAL DE UBUNTU
RESUME SOBRE LA TERMINAL DE UBUNTU
 
Comandos de ubuntu
Comandos de ubuntuComandos de ubuntu
Comandos de ubuntu
 
PostgreSQL BDR - Altenwald.pdf
PostgreSQL BDR - Altenwald.pdfPostgreSQL BDR - Altenwald.pdf
PostgreSQL BDR - Altenwald.pdf
 
Sql dinamico14042011
Sql dinamico14042011Sql dinamico14042011
Sql dinamico14042011
 
SQL avanzado
SQL avanzadoSQL avanzado
SQL avanzado
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 

Slony i

  • 3. 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.
  • 4. 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).
  • 5. 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).
  • 6. 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.
  • 7. 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
  • 8. 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
  • 9. 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_cluster node 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...]
  • 10. 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.
  • 11. 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_
  • 12. 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_
  • 13. 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' &
  • 14. 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_
  • 15. 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_
  • 16. 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_
  • 17. 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.
  • 18. Mantenimiento: Quitar una tabla PostgreSQL set drop table. set drop sequence.
  • 19. Mantenimiento: Añadir un nuevo replication set PostgreSQL create set. set add table / set add sequences. subscribe set.
  • 20. Mantenimiento: Quitar un replication set PostgreSQL De un solo nodo: unsubscribe set. De todos los nodos: drop set.
  • 21. 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);