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