Replicación con Streaming Replication PostgreSQL

Se desea configurar dos servidores postgres postgreSQL01 (maestro) y postgreSQL02 (esclavo). El servidor master postgreSQL01 estará modo Lectura/Escritura (Read/writer) y el servidor slave postgreSQL02 estará modo sólo Lectura (Read).

Diagrama:

  .------.                 .--------.
  |      |          W      |   DB   |
  |Pgpool|----+----------->| MASTER |----.
  |      |    |            |        |    |
  `------`    |            `--------`    | STREAMING REPLICATION
              |            .--------.    |
              |     R      |   DB   |    |
              +----------->|  SLAVE |<---+      
                           |        |    
                           `--------` 

NOTA: El servicio del PostgreSQL debe estar detenido en el servidor esclavo, en nuestro caso postgreSQL02

Configuración del maestro:

1. Editar archivo de configuración de postgres

operador@postgreSQL01:/# nano /etc/postgresql/9.4/main/postgresql.conf


2. Efectuar los siguientes cambios:

listen_addresses = '*' # 'localhost,IP_address_of_THIS_host'
port = 5432
wal_level = hot_standby
archive_mode = on
archive_command = 'cp -i "%p" /var/lib/postgresql/9.4/main/archive/"%f" </dev/null'
max_wal_senders = 1
wal_keep_segments = 30

Donde:

  • wal_level = hot_standby -> Define cuanta información se grabará en los archivos WAL generados
  • archive_mode = on -> Se activa el archivo de archivos WAL en el servidor maestro
  • archive_command -> Será el comando que se ejecute cada vez que haya un nuevo archivo WAL listo para ser mandado
  • max_wal_senders = 1 -> Indica las conexiones concurrentes o cuantos servidores de Standby se van a conectar al servidor primario
  • wal_keep_segments = 30 -> Especifica el número máximo de archivos WAL que serán retenidos en el directorio pg_xlog en caso de retrasarse el proceso SR Streaming replication

NOTA: Los parámetros hot_standby y max_standby_archive_delay son ignorados por el servidor maestro

3. Editar archivo de configuración de conexión

operador@postgreSQL01:/# nano /etc/postgresql/9.4/main/pg_hba.conf

4. Efectuar los siguientes cambios:

host replication replicar IP_address_of_slave/32 md5
host replication replicar IP_address_of_master/32 md5

5. Crear usuario replicar con roles de replication:

operador@postgreSQL01:/$ psql -c "CREATE USER replicar REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'yourpassword';"

Respaldar base de datos origen:
NOTA: Se requiere tener instalado rsync y un usuario valido en servidor esclavo para trasnmitir información

1. Inciar modo backup en postgresql:

operador@postgreSQL01:/# psql -Upostgres -c "select pg_start_backup('initial_backup');"

2. Efectuar copia y transmisión de la información

operador@postgreSQL01:/# rsync -cva --inplace --exclude=*pg_xlog* postmaster.pid ruta_cluster_servidor_maestro IP_servidor_esclavo:ruta_cluster_servidor_esclavo

donde:

     -cva ->
     --inplace ->
     --exclude = *pg_xlog* postmaster.pid ->
     ruta_cluster_servidor_master -> En instalación debian por defecto es /var/lib/postgresql/9.4/main/
     IP_servidor_esclavo ->
     ruta_cluster_servidor_esclavo -> En instalación debian por defecto es /var/lib/postgresql/9.4/main/
    

3. Detener modo backup postgresql:

operador@postgreSQL01:/# psql -c "select pg_stop_backup();"

Servidor Esclavo:

1. Editar archivo de configuración de conexión

operador@postgreSQL02:/# nano /etc/postgresql/9.4/main/pg_hba.conf

2. Efectuar los siguientes cambios:

host replication replicar IP_address_of_master/32 md5
host replication replicar IP_address_of_slave/32 md5

3. Editar archivo de configuración de postgres

operador@postgreSQL02:/# nano /etc/postgresql/9.4/main/postgresql.conf

4. Efectuar los siguientes cambios:

listen_addresses = '*' # 'localhost,IP_address_of_THIS_host'
port = 5432
hot_standby = on

Donde:

  • hot_standby = on -> Habilita consultas en el servidor esclavo (Read Only)

Le parámetros wal_level es ignorados por el servidor esclavo

5. Crear archivo recovery:

operador@postgreSQL02:/# nano /var/lib/postgresql/9.4/main/recovery.conf

6. Incluir la siguiente información:

standby_mode = 'on'
primary_conninfo = 'host= port=5432 user=replicar password=yourpassword'
trigger_file = '/tmp/trigger_file'
restore_command = 'cp /var/lib/postgresql/9.4/main/archive/%f "%p"'
archive_cleanup_command = 'pg_archivecleanup /var/lib/postgresql/9.4/main/archive %r'

donde:

standby_mode -> Activar el modo standby
primary_conninfo -> Cadena de conexión desde el servidor esclavo hacia el servidor maestro
trigger_file -> 
restore_command -> Comando shell para copiar un segmento almacenado de la serie de archivos WAL
archive_cleanup_command -> Comando de shell que se ejecutará en cada restartpoint. archive_cleanup_command permite la limpieza de viejos archivos comprimidos WAL que ya no son necesarios por el servidor esclavo.

7. Crear carpeta archive:

operador@postgreSQL02:/# mkdir -p /var/lib/postgresql/9.4/main/archive

8. Cambiar el dueño de la carpeta creada:

operador@postgreSQL02:/# chown postgres.postgres /var/lib/postgresql/9.4/main/archive

9. Reiniciar el Servicio:

operador@postgreSQL02:/# /etc/init.d/postgres restart

10. Comprobar la replicación:

Enlace:
Replicación en PostgreSQL (II) – Hot Standby/Streaming Replication
Streaming Replication Postgresql
Hot_Standby Postgresql
HA PostgreSQL Cluster by Streaming Replication + pgpool-II
How To Set Up Master Slave Replication on PostgreSQL on an Ubuntu 12.04 VPS
Replicación y Alta Disponibilidad en PostgreSQL

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s