Seleccionar página

En nuestro caso ocuparemos como respaldo Write-Ahead Logging (WAL), el que utiliza ssh para transferir la información.

En primer lugar debemos instalar PostgreSQL, para ello ejecutamos el siguiente comando (En el caso de Ubuntu)

apt-get install postgresql postgresql-contrib postgresql-client

Ello instalará la versión más reciente. Ahora si Ud. desea almacenar información geográfica, puede agregar PostGIS, por ejemplo si se instaló la versión 9.3 de PostgreSQL, el comando sería el siguiente:

apt-get install  postgresql-9.3-postgis-2.1 postgresql-9.3-postgis-scripts

Lo anterior lo hacemos en el master y la o las máquinas que tendremos de slave.

Ahora las máquinas tienen un usuario postgres. Pero hagamos lo siguiente sólo en el master (generar las claves privadas y públicas), mediante lo siguiente:

su postgres

mkdir ~/.ssh

chmod 700 ~/.ssh

ssh-keygen -t rsa -b 4096

En este caso no utilize passphrase.

Y copiamos la clave pública a authorized_keys

cp ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Ahora en todas las máquinas slave copiamos las llaves públicas y privadas. Si todo va bien podemos conectarnos entre las máquinas:

ssh master (Desde slave)

ssh slave (Desde master)

Entonces ahora tenemos al menos dos máquinas con PostgreSQL, las que se pueden conectar a través de ssh entre ellas. Aún no hemos definido el master ni tampoco el o los slave, son todas las máquinas iguales, salvo por la IP. Ahora comienzan a diferenciarse.

Master

Editamos el archivo /etc/postgresql/xxx/main/postgresql.conf

Y nos preocupamos que quede esta configuración:

# Por ejemplo puede ser ‘localhost,ip_lan’ ó ‘*’ para que escuche todas las interfaces disponibles
listen_addresses = ‘*’
wal_level = hot_standby
# Cuantas conexiones para la replicación concurrentes pueden haber
max_wal_senders = 2
# El número de archivos que almacenará el master para los slaves, es decir un slave podría ir hasta X segmentos atrás, cada segmento es de 16MB aproximadamente
wal_keep_segments = 50
hot_standby = on
archive_mode = on
archive_command = ‘test ! -f /var/lib/postgresql/xxx/archiving_active || cp -i %p /var/lib/postgresql/xxx/archive/%f’

Ahora editamos el archivo /etc/postgresql/xxx/main/pg_hba.conf en donde agregamos el usuario que utilizaremos en la replicación desde la, o las ip que puede conectarse

host replication replicador ip_slave1/32 md5
host replication replicador ip_slave2/32 md5

Si las ip son de una sub red podríamos colocar

host replication replicador ip_lan_inicial/24 md5

Ahora ya podemos reiniciar PostgreSQL en el master

service postgresql restart

Ahora agregaremos el usuario de replicación, para ellos cambiaremos al usuario postgres

su postgres
psql -c “CREATE USER replicador REPLICATION ENCRYPTED PASSWORD ‘contrasena‘;”

Ahora vamos a guardar los archivos para poder iniciar la replicación en los slave, para ello hacemos lo siguiente en el master (seguimos como usuario postgres):

cd /var/lib/postgresql/xxx/
mkdir archive
touch archiving_active
psql -c “select pg_start_backup(‘base_backup’);”
tar -cvf base_backup.tar –exclude=pg_xlog –exclude=postmaster.pid main/
psql -c “select pg_stop_backup();”
tar -rf base_backup.tar archive

Si quieres, puede terminar de archivar PostgreSQL, para ello sólo debemos ejecutar:

rm archiving_active

Ahora tenemos en el archivo base_backup.tar, lo necesario para que los slave comienzen a replicar, entonces copiamos el archivo a los slave, para ello nos valemos de las conexiones generadas entre las máquinas previamentes. Es decir sólo tenemos que hacer:

scp base_backup.tar slave1:~

Si tenemos más slaves les copiamos el archivo también.

Ahora nos vamos al slave, paramos PostgreSQL

service postgresql stop

Ahora editamos el archivo /etc/postgresql/xxx/main/postgresql.conf y nos preocupamos que las modificaciones queden así:

# Por ejemplo puede ser ‘localhost,ip_lan’ ó ‘*’ para que escuche todas las interfaces disponibles
listen_addresses = ‘*’
hot_standby = on

Y nos cambiamos al usuario postgres

su postgres

Y sacamos los archivos que enviamos:

cd /var/lib/postgresql/xxx
mv ~/base_backup.tar .
rm -rf main/
tar -xvf base_backup.tar
mkdir main/pg_xlog

Ahora generamos el archivo /var/lib/postgresql/xxx/main/recovery.conf

standby_mode = ‘on’
primary_conninfo = ‘host=master port=5432 user=replicador password=contrasena’

Iniciamos PostgreSQL en el slave

service postgresql start

Finalmente ahora deberíamos tener un master y uno o más slave corriendo y replicando.