Administración clústeres mediante repmgr

From PostgreSQL wiki
Jump to navigationJump to search

Pondrémos a su disposición un ejemplo de como utilizar repmgr para que entienda su funcionamiento. Este ejemplo es para uso académico.

Requisitos de instalación:


Instalar (ubuntu): libxslt1-dev, libedit-dev, libpam0g-dev, postgresql-server-dev-9.1


Instalación de repmgr


(1) Bajar el código fuente de repmgr desde http://projects.2ndquadrant.it/sites/default/files/repmgr-1.1.0.tar.gz

(2) Copiar y descomprimir en /tmp.

(3) Compilar

make USE_PGXS=1

(4) Instalar

make USE_PGXS=1 install

(5) Ver versión de repmgr

repmgr --version
repmgrd --version


(6) Creación de las llaves de intercambio:

-- Para Nodo1

 $ su postgres
 $ ssh-keygen -t rsa 

--Para Nodo2

 $ su postgres
 $ ssh-keygen -t rsa

--Copiar llaves entre ambos nodos

 $ cp /var/lib/postgresql/.ssh/id_rsa.pub /home/gilbertoc/postgres/.ssh/authorized_keys
 $ cp /home/gilbertoc/postgres/.ssh/id_rsa.pub /var/lib/postgresql/.ssh/authorized_keys

--Prueba de funcionamiento de las llaves

 $ ssh localhost 
 $ ssh localhost -l postgres

(7) Configuración del postgresql.conf del Nodo1:

   listen_addresses = '*'
   wal_level = hot_standby
   checkpoint_segments=30
   archive_mode=on
   archive_command='cd .'
   max_wal_senders=10
   wal_keep_segments=5000

(8) Configuración del postgresql.conf del Nodo2:

   hot_standby=on

(9) Configuración del pg_hba.conf del Nodo1 y Nodo2:

   host all         all 127.0.0.1/32 trust
   host replication all 127.0.0.1/32 trust

(10) Crea en fichero /var/lib/pgsql/repmgr/repmgr.conf en el Nodo1:

 cluster=test
 node=1
 conninfo='host=127.0.0.1 dbname=test'

(11) Vaciar el dirctorio de datos del nodo2:

cd /home/gilbertoc/postgres/mycluster2
rm -rf *

(12) Clonar el Nodo2:

$ repmgr -D /home/gilbertoc/postgres/mycluster2 -f /etc/PostgreSQL/9.1/main/repmgr.conf  -d test -p 5432 -U postgres -R postgres standby clone localhost --verbose

(13) Crear repmgr.conf en el Nodo2:

 cluster=test
 node=2
 conninfo='host=localhost port=5433 user=postgres dbname=test'


(14) Crear recovery.conf en el Nodo2:

 standby_mode = 'on'
 primary_conninfo = 'port=5432 host=localhost user=postgres'

(15) Iniciar Nodo2:

$ pg_ctl -D /home/gilbertoc/postgres/mycluster2 -l logfile start

(16) Registrar ambos nodos:

repmgr -f /home/prime/repmgr/repmgr.conf --verbose master register
repmgr -f /home/standby/repmgr/repmgr.conf --verbose standby register

(17) Pruebas de los Nodos:

--En el Nodo2:


psql -h localhost -p 5434 -d test
 insert into mitabla (id, nombre) values (4,  'Martinez');
 *--ERROR:  cannot execute INSERT in a read-only transaction

--En el Nodo1:


 psql -h localhost -p 5432 -d test
 insert into mitabla (id, nombre) values (4,  'Martinez');