PostgreSQL replicar en maestro-esclavo

Dos servicios postgresql en un mismo servidor y replicar en modo maestro-esclavo. Para esta configuración es necesario tener instalado y configurado previamente un servicio postgresql 9.2

Creamos y asignamos los permisos para el directorio que alojara todos los archivos necesarios para nuestra nueva instancia de servicio postgresql. #more

$ mkdir /var/lib/pgsql/9.2/data_slave
$ chown postgres.postgres /var/lib/pgsql/9.2/data_slave/

Hacemos una copia del script de inicio postgresql

$ cp /etc/init.d/postgresql-9.2 /etc/init.d/postgresql-slave9.2

Modificamos los siguientes parametros en el script

$ vim /etc/init.d/postgresql-slave9.2
PGPORT=5433
PGDATA=/var/lib/pgsql/9.2/data_slave
PGLOG=/var/lib/pgsql/9.2/pgstartup_slave.log

Agregamos el script al sistema de inicio y lo activamos.

$ chkconfig --add postgresql-slave9.2
$ chkconfig postgresql-slave9.2 on

Inicializamos nuestra instancia postgresql

$ service postgresql-slave9.2 initdb

Editamos estos parametros minimos para nuestra nueva instancia.

$ vim /var/lib/pgsql/9.2/data_slave/postgresql.conf
listen_addresses = '*'
port = 5433

Podemos copiar nuestra politica de acceso que tenemos en nuestra instancia anterior a la nueva instancia si asi lo consideramos optimo.

$ cp /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.2/data_slave/pg_hba.conf

Iniciamos nuestro nueva instancia de servicio postgresql

$ service postgresql-slave9.2 start

Conectandonos a la nueva instancia con psql

$ su - postgres
-bash-4.1$ psql -p5433

Servicio PostgreSQL en modo Maestro-Esclavo

Hasta este punto tenemos nuestras dos instancias, ahora seguimos con las configuraciones para replicar en modo maestro-esclavo.

Configuracion del servicio maestro.

Editamos el archivo principal de configuracion los paremetros para WAL

$ vim /var/lib/pgsql/9.2/data/postgresql.conf
wal_level = hot_standby
max_wal_senders = 1
wal_keep_segments = 50
archive_command = 'cp %p /tmp/backup/db001/%f'
archive_mode = on

Editamos el archivo de configuracion de accesos

$ vim /var/lib/pgsql/9.2/data/pg_hba.conf
host    replication     postgres        127.0.0.1/32            trust
host    replication     postgres        ::1/128                 trust

Reiniciamos el servidor maestro

service postgresql-9.2 restart

Ahora crearemos un snapshot de nuestro servidor maestro para el servidor esclavo.

$ su - postgres
-bash-4.1$ psql -c "SELECT pg_start_backup('mi_backup');"
-bash-4.1$ cp -rvf /var/lib/pgsql/9.2/data /tmp/
-bash-4.1$ psql -c "SELECT pg_stop_backup();"
-bash-4.1$ exit

Confuguraciones en el servicio esclavo

Detenemos el servicio

$ service postgresql-slave9.2 stop

Respaldamos los archivos de configuracion del servicio esclavo

$ cp /var/lib/pgsql/9.2/data_slave/*.conf /tmp/

Eliminamos el directorio del servicio esclavo. Copiamos el snapshot maestro al directorio del servicio esclavo

$ su - postgres
-bash-4.1$ rm -rf /var/lib/pgsql/9.2/data_slave/
-bash-4.1$ mv /tmp/data /tmp/data_slave
-bash-4.1$ cp -rvf /tmp/data_slave /var/lib/pgsql/9.2/

Restauramos los archivos de configuracion del esclavo.

-bash-4.1$ cp /tmp/*.conf /var/lib/pgsql/9.2/data_slave/

Eliminar el postmaster.pid y los archivos xlog

$ rm -f /var/lib/pgsql/9.2/data_slave/postmaster.pid
$ rm -r hotstandby2/pg_xlog/*

Editamos lo siguiente en el archivo principal de configuracion los paremetros para WAL

$ vim /var/lib/pgsql/9.2/data_slave/postgresql.conf
wal_level = hot_standby
archive_mode = on
archive_command = '/bin/true'
hot_standby = on

Creamos el archivo recovery.conf que es indispensable para que nuestro servicio esclavo empieze a recibir la replicacion.

$ cp /usr/pgsql-9.2/share/recovery.conf.sample /var/lib/pgsql/9.2/data_slave/recovery.conf
$ chown postgres.postgres /var/lib/pgsql/9.2/data_slave/recovery.conf

Agregamos las siguiente configuracion a recovery.conf

$ vim /var/lib/pgsql/9.2/data_slave/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=127.0.0.1 port=5432 user=postgres'
trigger_file = '/tmp/postgresql.slave.trigger'
restore_command = 'cp /tmp/backup/db001/%f \"%p\"'

Iniciamos el servicio esclavo

$ service postgresql-slave9.2 start

Armando Uch

An Accidental Engineer
• Lazy #Programmer • #TacOps 🌮 • #BOFH
🎸⚾️🍺☕️


2015-01-31