23 ago

Instalación de PostgreSQL – Parte 4 – Configuración de la replicación

Venga ya esta la última parte de manual de como instalar PostgreSQL, nos ponemos en situación.

A estas alturas debemos tener:

Un sistema de ficheros montado –> Instalación de PostgreSQL – Parte 1 – Optimización del sistema

Un PostgreSQL instalado y configurado –> Instalación de PostgreSQL – Parte 2 – Instalación y configuració

Parámetros del Kernel modificados para que trabajen bien con nuestra configuración. –> Instalación de PostgreSQL – Parte 3 – Optimización del sistema operativo

Así que ahora nos queda montar una replicación chachi para que el sistema pueda entrar en producción con alguna seguridad….

Vamos a montar una replicación Hot Standby/Streaming Replication, es una de las alternativas, yo la selecciono porque tiene las siguientes ventajas, principalmente:

  1. Consultas al servidor secundario
  2. Replicación del schema

Y cosas a tener en cuenta.

  1. Se replica toda la base de datos, no se especifican tablespaces
  2. Los dos servidores tienen que ser de 32 o 64 bits
  3. No se pueden hacer cambios en el esclavo. (No es un cluster)
  4. Enviamos registros WAL no ficheros enteros, por lo que la replicación es más rápida.

Pues dicho esto vamos al lío!

Debemos instalar el segundo servidor, el procedimiento es igual a lo explicado en los post anteriores.

Un vez instalado debemos tener el servicio apagado y empezamos por el servidor maestro.

Servidor Maestro – Configuración

Lo primero que vamos hacer es permitir que el esclavo se pueda conectar al maestro, pero con la opcion de replicacion, esto lo haremos en el fichero pg_hba.conf.

sudo vi /var/lib/pgsql/9.2/data/pg_hba.conf

Y añadimos la linea siguiente.

host replication postgres ipdelservidoresclavo/32 trust

Importante que la parte de replication seguido de un usuario con permisos de super usuario, podemos utilizar el usuario postgre o crear un usuario con la siguiente sentencia.

CREATE USER usuario WITH SUPERUSER ENCRYPTED PASSWORD 'contraseña';

Y por ultimo el tipo de autentificación trust/md5.

Ahora el fichero de postgresql.sql, explicamos los parámetros y después modificamos, así aseguramos que entendemos lo que estamos tocando.

listen_addresses = '*'

Aquí debemos asegurarnos en el caso que tengamos otro valor que *, que el servidor esclavo se va a poder conectar al maestro, sino mal vamos.

wal_level = hot_standby

Aqui le estamos diciendo que los ficheros wal se guarden en el método hot_standby con lo que nos permitirá realizar consultas en el servidor secundario.

max_wal_senders = 1

Número de conexiones que vas a permitir, aquí deberemos colocar el numero de servidores esclavos que vayamos a tener, en mi caso 1.

wal_keep_segments = 32

Aquí vamos a decirle el numero de segmentos wal que el servidor principal va a guardar antes de empezar a borrarlos o rotarlos, esto es necesario que sea un poco alto ya que un corte de conexión entre los servidores o durante las tareas de backup es posible que podamos perder la replica.

Con esto sencillos parámetros ya tenemos configurado el servidor maestro, ahora solo falta reiniciar el servicio para cargar la configuración.

Servidor Esclavo – Configuración

Pues nos vamos también al fichero postgresql.conf, donde debemos activar la opción  hot_standby

hot_standb = on

Con esta opción le decimos al servidor esclavo que permitirá las consultas.

Vale, ahora vamos por el meollo de la cuestion, debemos crear un fichero recovery.conf en el directorio $PGDATA, podemos saber cual es nuestro directorio $PGDATA haciendo lo siguiente:

cat /etc/init.d/postgresql-9.2 | grep "^PGDATA"
PGDATA=/var/lib/pgsql/9.2/data

O sea en mi caso PGDATA=/var/lib/pgsql/9.2/data, bien pues explicamos que debemos poner el recovery.conf y después lo creamos.

standby_mode = 'on'

Le decimos que el servidor arrancara el standby_mode

primary_conninfo = 'host=ipmaestro port=5432 user=postgres'

Cadena de conexión que utilizara para conectarse al maestro

Le damos permiso al usuario postgres.

chown postgres.postgres /var/lib/pgsql/9.2/data/recovery.conf

Vale pues vamos hacer la primera copia desde el servidor maestro al servidor esclavo del pg_base.

Nos vamos al servidor maestro nos conectamos al postgre y lanzamos.

psql -c "SELECT pg_start_backup('label')"

rsync -aP --exclude postmaster.pid -- exclude '*.conf' --exclude postmaster.opts /opt/PostgreSQL/9.2/ ipesclavo:/opt/PostgreSQL/9.2/

psql -c "SELECT pg_stop_backup()"

Con esto lo que estamos haciendo es, primero decirle a la base de datos que se ponga en modo backup para aseguranos la consistencia de los datos, después copiamos directamente el contenido de la BD master al esclavo excluyendo los ficheros de configuración y por ultimo sacamos a la base de datos de esta de backup.

Pues hecho eso lo único que nos queda es levantar la replica y deberemos ver algo así en el log.

LOG:  entering standby mode
LOG:  redo starts at 0/2000020
LOG:  record with zero length at 0/20001E8
LOG:  streaming replication successfully connected to primary
LOG:  consistent recovery state reached at 0/2000210
LOG:  database system is ready to accept read only connections
[  OK  ]

Así que ya tenemos nuestra replica montada!

Sentencias para comprobar el estado de la réplica.

Una buena comprobación es el fichero de log, pero ahi van unas sentencias muy interesantes.

[[email protected]] psql -h 127.0.0.1 -U postgres -c "select client_addr, state, sent_location, write_location,flush_location, replay_location from pg_stat_replication;"

client_addr  |   state   | sent_location | write_location | flush_location | replay_location
---------------+-----------+---------------+----------------+----------------+-----------------
62.73.191.194 | streaming | 0/3007C60     | 0/3007C60      | 0/3007C60      | 0/3007C60

Aqui veremos todos los clientes conectados el punto del WAL que esta utilizando y el sistema de replicación.

[[email protected] ~]# psql -h 127.0.0.1 -U postgres -c "select now() - pg_last_xact_replay_timestamp() AS replication_delay;"
replication_delay
-------------------

Esto nos mostrara el tiempo que retraso que tenemos en el esclavo respecto al maestro, comando muy util.

[[email protected] data]# ps auxww | grep ^postgres
postgres  9537  0.0  0.0 196600 10160 ?        S    Aug21   0:00 /usr/pgsql-9.2/bin/postmaster -p 5432 -D /var/lib/pgsql/9.2/data
postgres  9539  0.0  0.0 177420  1144 ?        Ss   Aug21   0:00 postgres: logger process
postgres  9540  0.0  0.0 196664  2052 ?        Ss   Aug21   0:00 postgres: startup process   recovering 000000010000000000000003
postgres  9541  0.0  0.0 196600  1816 ?        Ss   Aug21   0:00 postgres: checkpointer process
postgres  9542  0.0  0.0 196600  1372 ?        Ss   Aug21   0:00 postgres: writer process
postgres  9543  0.0  0.0 204696  3848 ?        Ss   Aug21   0:09 postgres: wal receiver process   streaming 0/3007EC0
postgres  9544  0.0  0.0 177632  1276 ?        Ss   Aug21   0:00 postgres: stats collector process

Estado de los procesos del sistema linux, donde podemos ver lo que esta haciendo.

Ale a disfrutarlo!

2 thoughts on “Instalación de PostgreSQL – Parte 4 – Configuración de la replicación

  1. Pingback: Instalación de PostgreSQL – Parte 4 – Configuración de la replicación « DbRunas – Noticias y Recursos sobre Bases de Datos

  2. Pingback: Resumen – Instalación de PostgreSQL 9.2 optimizada para sistemas de producción | Miguel Ángel Ausó

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>