La replicación es la copia y distribución de los datos, objetos (tablas,esquemas) de la base de datos de una base de datos a otra, para sincronizar ambas y mantener la integridad de los datos, esto nos permite tener los datos distribuido en diferentes servidores y mantener los sistemas con alto rendimiento, teniendo la disponibilidad de los datos, escalabilidad, entre otras ventajas.
Les voy a mostrar los pasos para realizar la configuración en servidores de bases de datos postgresql versión 9.1, también sirve para versión 9.2, 9.3 y 9.4 para la replicación de datos entre maestro-esclavo, esto nos sirve para tener alta disponibilidad por si el servidor maestro se llegará a perder el servicio o para tener un respaldo de los datos en el servidor esclavo.
Les voy a mostrar los pasos para realizar la configuración en servidores de bases de datos postgresql versión 9.1, también sirve para versión 9.2, 9.3 y 9.4 para la replicación de datos entre maestro-esclavo, esto nos sirve para tener alta disponibilidad por si el servidor maestro se llegará a perder el servicio o para tener un respaldo de los datos en el servidor esclavo.
Manos a la obra, se debe ubicar los archivos de configuración
siguiente en los servidores o instancias de postgresql dependiendo de
su instalación:
Configurar el servidor Maestro
Ubicar el archivo de configuración de postgresql, este archivo es muy importante porque aquí se encuentra todo lo referente a customizar o personalizar, entonar el gestor de bases de datos.En postgresql.conf, es necesario ubicar y establecer lo siguientes parámetros:
listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
Hay
una advertencia de funcionamiento de un sistema de reserva en
caliente: si se bloquea el modo de espera, el maestro seguirá
esperando una respuesta en cada transacción. Esta es una mala cosa.
Usted debe controlar adecuadamente este para que sepa cuando
sucede!
Ahora, en pg_hba.conf, es necesario añadir lo siguiente:
host replication all
222.222.222.222/32 trust
donde
222.222.222.222/32 es la dirección ip del servidor esclavo
Esto da a sus permisos de servidor de espera para conectar con el maestro.
Configurar el servidor Esclavo
Ahora, en la máquina esclava, editar postgresql.conf para que incluya:
hot_standby = on
A continuación, agregue un archivo recovery.conf.
Esto usualmente
según la instalación van en el directorio
de datos PostgreSQL, que por defecto en Ubuntu
/var/lib/postgresql/9.1/main. Este archivo debe
contener:
Standby_mode = "on"
primary_conninfo = 'host = 111.111.111.111 application_name = DB1'
Ahora
vamos a la Transferencia de datos sólo
para asegurarse de que los procesos apropiados están en
funcionamiento, compruebe que hay un proceso emisor que se ejecutará
en el proceso de un receptor que se ejecutará en el modo de espera y
principal. Puede comprobar para aquellos
con el comando en la consola de linux
ps
-ef | grep sender
y
ps
-ef | grep receiver
, respectivamente.
En este punto, tenemos que asegurarse de que el modo de esclavo contiene una copia exacta de los datos del maestro.
Se debe parar el servicio de PostgreSQL en el maestro y en el esclavo (por ejemplo, con un comando como invoke-rc.d stop PostgreSQL o /etc/init.d/postgresql stop).
A continuación, copie los archivos de datos desde el maestro al esclavo. Debe excluirse cualquier archivo de configuración si usted ha puesto alguno allí (no lo hemos hecho en este tutorial), así como el directorio pg_xlog .:
rsync -av --exclude pg_xlog /var/lib/postgresql/9.1/main 222.222.222.222:/var/lib/postgresql/9.1/main
colocamos el password de el usuario root y comienza la sincronizacion de los datos del maestro y esclavo, esto solo se hace la primera vez y se debe tener instalado el comando rsync en ambos servidores.
A continuación, inicie el modo esclavo y el maestro (invoke-rc.d start de PostgreSQL en ambos sistemas).
Verificar
Ahora es el momento de probar esta configuración. Iniciar sesión en el maestro (ssh root@111.111.111.111) y crear una base de datos de ejemplo:
$ su postgres
$ Createdb sampledb
Ahora, acceder a la línea de comandos PostgreSQL:
$ Psql -d sampledb
Crear una tabla simple y rellenarla con algunos datos:
CREAR table muestras (
Id entero CLAVE PRIMARIA,
varchar nombre (25),
text cosas
);
Insertar into muestras (1, 'footer', 'un montón de foo');
Insertar into muestras (2, 'valores', 'un montón de valor');
Insertar into muestras (3, 'bazzzz', 'un montón de baz');
Insertar into muestras (4, 'bine', 'un montón de bin');
Ahora, en otra línea de comandos, acceda a su modo de espera (ssh root@222.222.222.222), en la línea de psql:
$ su postgres
$ Psql -d sampledb
Mira una lista de las tablas:
sampledb = # \ d
Lista de las relaciones
esquema | Nombre | Tipo | Propietario
-------- + --------- + ------- + ----------
pública | muestras | mesa | postgres
(1 fila)
A continuación, consultar la tabla de muestras:
sampledb = # select * a partir de muestras;
Identificación | nombre | cosas
---- + ------ + -------------
1 | footer | un montón de foo
2 | valores | un montón de barra
3 | bazzz | un montón de Baz
4 | bine | un montón de bin
(4 filas)
Ahora, trata de insertar algunos datos más:
sampledb = # insertar en los valores de muestreo (5, 'asdf', 'más asdf');
ERROR: No se puede ejecutar INSERT en una transacción de sólo lectura
¡Lo sentimos! El servidor esclavo le da acceso de sólo lectura a los datos.
Comprobación del estado de WAL
En el maestro, puede ejecutar el siguiente comando para ver la situación actual de escritura WAL:
SELECT pg_current_xlog_location ();
Luego, en el modo de espera, puede ejecutar:
SELECT pg_last_xlog_receive_location ();
Si se obtienen los mismos valores, la replicación esta al día de lo contrario hubo un fallo. No hemos de configurar la replicación sincrónica, sin embargo, por lo que en un entorno de producción (con una gran cantidad de datos Cómo escribir en la base de datos) es posible que la espera sería inferior al maestro. Si necesita ambos sistemas para estar siempre caracteres idénticos, se puede dar la vuelta en la replicación síncrona.
La
replicación síncrona permitiendo replicación
síncrono sólo toma un par de pasos
adicionales. Tenga en cuenta, sin embargo, que esto sólo debe
hacerse cuando hay poca latencia entre el maestro y el esclavo!
Eso es debido a que cada consulta en el servidor esperará a una
respuesta desde el esclavo,
que tiene que ir a través de la red. Configurar
la replicación síncrona si tanto el maestro y el esclavo
están conectados en una red local (preferiblemente privada).
Ok, para realizar esto, añada lo siguiente a postgresql.conf en el Maestro:
synchronous_standby_names = 'db1'
Cuando el valor que aquí hay una lista separada por comas de sus servidores de esclavos. Puede tener más de una, pero se utilizará sólo el primero. Si por alguna razón el primero de ellos muere, el segundo se convertirá en el esclavo.Reinciar el servico de PostgreSQL, entonces echa un vistazo el estado de la sincronización de datos (aún en el maestro):
$ Su PosgreSQL
$ psql
Entonces corre:
usename SELECT, application_name, client_addr, client_hostname, sync_state DE pg_stat_replication;
Debería ver algo como esto:
usename | application_name | client_addr | client_hostname | sync_state
---------- + ------------------ + ----------------- + - --------------- + ------------
postgres | DB1 | 222.222.222.222 | | sincronizar
Ahora, sólo por diversión, volver atrás y añadir un montón de datos en su maestro, entonces se le pregunta sobre su máquina esclava. Debería ver los mismos resultados en ambas máquinas!
No hay comentarios.:
Publicar un comentario