Hola que tal, requieren llevar a cabo una replica de base de datos de PostgreSQL tipo Maestro-Esclavo? Aqui te vamos a demostrar como se puede hacer haciendo uso de un programa llamado Bucardo.
En mi canal de youtube esta el video, aqui van los mismos pasos y sobre todo los comandos para que te sean de apoyo junto con el video, si no vez el video no hay problema, todas las instrucciones aqui valen, el servidor MAESTRO ya esta operando, lo que vamos hacer es replicar 2 bases de datos 'dvdrental' y 'ejemplo' en el servidor ESCLAVO.
Esto es lo vamos a llevar a cabo para tener una mejor panorama de donde estamos parados.
Diagrama de la Implentacion.
Requisitos:
Tanto el OS en este ejemplo es Ubuntu 18.x y la BD es PostgreSQL 10.x en ambos servidores es la misma version, es un requisito de Bucardo, si ustedes desean usar una version anterior por ejemplo ubuntu 14, 16, etc, no hay problema, siempre y cuando sea la misma version en ambos servidores.
El servidor Maestro ya tiene instalado y en ejecucion:
-PostgreSQL
-Apache
-PHP
-Phppgadmin
El Servidor Esclavo no tiene nada instalado, vamos instalar todo lo necesario, aqui se los voy a mostrar.
===Configuracion de Servidor Maestro===
Pasos a seguir:
1) Servidor actualizado.
2) Instalar Utilerias para PostgreSQL.
apt-get install postgresql-plperl -y
3) Agregar el lenguage PLPERL en la base de datos.
su - postgres
psql postgres
CREATE LANGUAGE plperl;
\q
exit
4) Instalacion de Librerias para Bucardo.
apt-get install make libdbix-safe-perl libdbd-pg-perl libencode-locale-perl libboolean-perl unzip -y
5) Configuracion inicial de bucardo en postgresql, debemos accesar postgresql, crear el usuariode nombre 'bucardo' y la base de datos 'bucardo' y su propietario debe ser el usuario 'bucardo', valgame la redundancia.
su - postgres
psql postgres
CREATE USER bucardo SUPERUSER;
ALTER USER bucardo WITH PASSWORD 'clavedificil';
CREATE DATABASE bucardo OWNER=bucardo;
\q
exit
6) Agregar permiso a usuario bucardo dentro de postgresql, abrimos el siguiente archivo con su editor favorito.
/etc/postgresql/10/main/pg_hba.conf
Deben dejarlo asi:
local all postgres peer
local all bucardo trust
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all bucardo 127.0.0.1/32 trust
host all all 127.0.0.1/32 md5
Salvar archivo y reiniciar postgresql
systemctl restart postgresql
Probar acceso de usuario bucardo desde phppgadmin(pgadmin)
7) Instalar bucardo.
7.a Descargar el codigo en la ruta /opt/
cd /opt/
wget https://bucardo.org/downloads/Bucardo-5.5.0.tar.gz
NOTA: Revisar la pagina oficial de bucardo por si hay nueva version por si este link no funciona.
7.b Descomprimir e instalar bucardo.
tar -xzf Bucardo-5.5.0.tar.gz
cd Bucardo
perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite CGI 0 not found.
Generating a Unix-style Makefile
Writing Makefile for Bucardo
Writing MYMETA.yml and MYMETA.json
NOTA: Si les marca error, revisen si todas las librerias del paso #4.
root@server1:/opt/Bucardo-5.5.0# make
cp bucardo.schema blib/share/bucardo.schema
cp Bucardo.pm blib/lib/Bucardo.pm
cp bucardo blib/script/bucardo
"/usr/bin/perl" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/bucardo
Manifying 1 pod document
Manifying 1 pod document
make install
Manifying 1 pod document
Manifying 1 pod document
Installing /usr/local/share/perl/5.26.1/Bucardo.pm
Installing /usr/local/man/man1/bucardo.1pm
Installing /usr/local/man/man3/Bucardo.3pm
Installing /usr/local/bin/bucardo
Installing /usr/local/share/bucardo/bucardo.schema
Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.26.1/perllocal.pod
7.c Crear directorios de operacion.
mkdir /var/run/bucardo
mkdir /var/log/bucardo
NOTA: Estos nos los crea bucardo, ahi que hacerlo a mano, nada es perfecto :-).
7.d Instalacion de Bucardo, les quiero mencionar que la aplicacion usara el usuario 'bucardo' que creamos en el paso #8 dentro de PostgreSQL.
bucardo install
This will install the bucardo database into an existing Postgres cluster.
Postgres must have been compiled with Perl support,
and you must connect as a superuser
Current connection settings:
1. Host: <none>
2. Port: 5432
3. User: bucardo
4. Database: bucardo
5. PID directory: /var/run/bucardo
Enter a number to change it, P to proceed, or Q to quit: 1
Change the host to: 127.0.0.1
Changed host to: 127.0.0.1
Current connection settings:
1. Host: 127.0.0.1
2. Port: 5432
3. User: bucardo
4. Database: bucardo
5. PID directory: /var/run/bucardo
Enter a number to change it, P to proceed, or Q to quit: P
Attempting to create and populate the bucardo database and schema
Database creation is complete
Updated configuration setting "piddir"
Installation is now complete.
If you see errors or need help, please email bucardo-general@bucardo.org
You may want to check over the configuration variables next, by running:
bucardo show all
Change any setting by using: bucardo set foo=bar
NOTA: Hasta aqui hemos ya instalado los binarios de bucardo en el servidor maestro quien se encargara de sincronizar las bases de datos entre ambos.
8) Sacar respaldo de las bases de datos para enviarlas a el servidor esclavo, recuerden que antes de arrancar la replica ambos servidores deben tener las bases de datos a replicar con la misma cantidad de registros.
su - postgres
pg_dump -E UTF-8 -p 5432 -U postgres -F p -b -f dvdrental.sql dvdrental
pg_dump -E UTF-8 -p 5432 -U postgres -F p -b -f ejemplo.sql ejemplo
8.b Enviar a servidor esclavo los respaldos.
scp dvdrental.sql xuser@192.168.80.11:/home/xuser/
scp ejemplo.sql xuser@192.168.80.11:/home/xuser/
Hasta aqui ya tenemos listo el servidor MAESTRO para replicar, ahora sigue configurar el servidor ESCLAVO para que acepte los comandos de bucardo y podamos pasar a las pruebas de replicacion.
1) Servidor Actualizado.
2) Instalar PostgreSQL.
apt-get install postgresql -y
3) Configurar PostgreSQL para que escuche peticiones en cualquier interface de red, para ellos editamos el archivo con su programa favorito, yo uso vi, soy de la vieja escuela :-).
/etc/postgresql/10/main/postgresql.conf
Quitamos el '#' al inicio del parametro y lo dejamos como sigues.
listen_addresses = '*'
Salvamos y reiniciamos postgresql.
systemctl restart postgresql
4) Instalacion y Configuracion de apache, php y phppgadmin.
4.a Instalamos los paquetes necesario.
apt-get install apache2 php php-pgsql -y
4.b Cambiamos en php.ini, editamos los siguientes archivos:
/etc/php/7.2/cli/php.ini
/etc/php/7.2/apache2/php.ini
Buscamos la siguiente linea y la dejamos asi en ambos archivos:
short_open_tag = On
systemctl start apache2
4.d Probamos su funcion en el navegador
4.e Probamos php.
cd /var/www/html
Creamos un archivo de nombre 'test.php'.
Y le agregamos esta funcion:
<?php phpinfo(); ?>
Salvamos archivo.
4.f Abrimos archivo en el navegador, nos debe arrojar la version de php como muestra la siguiente imagen.
NOTA: Si no ven la info de php en su navegador, regresense desde el paso #4 y revisen los comandos, alguno les ha de ver fallado o me equivoque yo :-o.
5) Instalacion de phppgadmin.
5.a Descargamos la ultima version del portal http://phppgadmin.sourceforge.net y la salvamos en la ruta de apache: /var/www/html/
wget https://github.com/phppgadmin/phppgadmin/archive/REL_5-6-0.tar.gz
tar -xzf REL_5-6-0.tar.gz
mv phppgadmin-REL_5-6-0/ pgadmin
6.b Configuramos phppgadmin
cd pgadmin/conf/
cp config.inc.php-dist config.inc.php
6.c Editamos archivo config.inc.php, buscamos la siguiente linea la dejamos asi:
$conf['servers'][0]['desc'] = 'PSQL Esclavo';
La que sigue queda asi.
$conf['servers'][0]['host'] = '127.0.0.1';
Por ultimo la que siguiente queda asi.
$conf['extra_login_security'] = false;
Salvamos y salimos.
6.d Probamos phppgadmin en el navegador. http://192.168.80.11/pgadmin
7) Configuracion de bucardo en postgresql, debemos accesar postgresql, crear el usuario de nombre 'bucardo' y la base de datos 'bucardo' y su propietario debe ser el usuario 'bucardo', valgame la redundancia.
psql postgres
CREATE USER bucardo SUPERUSER;
ALTER USER bucardo WITH PASSWORD 'clavedificil';
CREATE DATABASE bucardo OWNER=bucardo;
\q
exit
8) Agregar permiso a usuario bucardo dentro de postgresql, abrimos el siguiente archivo con su editor favorito.
Deben dejarlo asi:
local all postgres peer
local all bucardo trust
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all bucardo 127.0.0.1/32 trust
host all all 127.0.0.1/32 md5
Salvar archivo y reiniciar postgresql
systemctl restart postgresql
Probar acceso de usuario bucardo desde phppgadmin(pgadmin)
9) Crear base de datos dvdrentalreportes y ejemploreportes en postgresql. Aqui vamos a restarurar las bases de datos que enviamos desde en el servidor Maestro.
su - postgres
psql postgres
CREATE DATABASE dvdrentalreportes;
CREATE DATABASE ejemploreportes;
\q
exit
10) Restaurar las bases de datos.
mv /home/xuser/dvdrental.sql /var/lib/postgresql
mv /home/xuser/ejemplo.sql /var/lib/postgresql
su - postgres
psql dvdrentalreportes < dvdrental.sql -U postgres
psql ejemploreportes < ejemplo.sql -U postgres
11) Revisar el contenido de ambas bases de datos en pgadmin, deben tener el mismo numero de registros.
Servidor Maestro BD: dvdrental
Servidor Esclavo BD:dvdrentalreportes
Servidor Maestro BD: ejemplo
Servidor Maestro BD: ejemploreportes
NOTA: Recuerden que las bases de datos a replicar deben iniciar con el mismo numero de registros en ambos servidores.
12) Agregar permiso para que el usuario bucardo pueda conectarse remotamente desde el maestro
a el esclavo, es vital este paso para que bucardo pueda llevar a cabo su trabajo de replica.
12.a Editar archivo /etc/postgresql/10/main/pg_hba.conf y dejarlo asi en el servidor esclavo.
Solo le estamos pertiendo a el servidor maestro accesar con el usuario bucardo, a nadie mas.
salvar archivo y salir.
12.b Reiniciar postgresql
systemctl restart postgresql
12.c Probar acceso remoto desde servidor maestro a servidor esclavo via psql.
Ya estamos listos para iniciar la replica.
== Configuracion de Replica Maestro-Esclavo #1 dvdrental ==> dvdrentalreportes.
Todo esto se ejecuta desde el servidor Maestro que es donde instalamos Bucardo.
'
Iniciamos...
bucardo add database MAESTRO1 dbname=dvdrental
Added database "MAESTRO1"
bucardo add database ESCLAVO1 dbname=dvdrentalreportes host=192.168.80.11
Added database "ESCLAVO1"
bucardo add all tables db=MAESTRO1 --herd=HERD1
Creating relgroup: HERD1
Added table public.actor to relgroup HERD1
Added table public.address to relgroup HERD1
Added table public.category to relgroup HERD1
Added table public.city to relgroup HERD1
Added table public.country to relgroup HERD1
Added table public.customer to relgroup HERD1
Added table public.film to relgroup HERD1
Added table public.film_actor to relgroup HERD1
Added table public.film_category to relgroup HERD1
Added table public.inventory to relgroup HERD1
Added table public.language to relgroup HERD1
Added table public.payment to relgroup HERD1
Added table public.rental to relgroup HERD1
Added table public.staff to relgroup HERD1
Added table public.store to relgroup HERD1
New tables added: 15
bucardo add sync MAESTROESCLAVO1 dbs=MAESTRO1,ESCLAVO1 relgroup=HERD1 pushdelta
Added sync "MAESTROESCLAVO1"
Created a new dbgroup named "MAESTROESCLAVO1"
bucardo update sync MAESTROESCLAVO1 set strict_checking=0
Checking for existing processes
Starting Bucardo
bucardo status
PID of Bucardo MCP: 12022
Name State Last good Time Last I/D Last bad Time
=================+========+============+=======+===========+===========+
MAESTROESCLAVO1 | Good | 18:28:36 | 21s | 0/0 | none |
Por ultimo revisamos el log de bucardo para ver si todo se ejecuto sin problemas.
root@srvmaestro:~# tail -n 20 /var/log/bucardo/log.bucardo
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting source table "public.film" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting target table "public.film" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting source table "public.address" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting target table "public.address" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting source table "public.film_actor" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting target table "public.film_actor" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting source table "public.customer" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Inspecting target table "public.customer" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Active syncs: 1
(12022) [Sat Aug 10 18:28:36 2019] MCP Entering main loop
(12026) [Sat Aug 10 18:28:36 2019] VAC New VAC daemon. PID=12026
(12026) [Sat Aug 10 18:28:36 2019] VAC Connected to database "MAESTRO1" with backend PID of 12028
(12022) [Sat Aug 10 18:28:36 2019] MCP Created VAC 12026
(12029) [Sat Aug 10 18:28:36 2019] CTL New controller for sync "MAESTROESCLAVO1". Relgroup is "HERD1", dbs is "MAESTROESCLAVO1". PID=12029
(12029) [Sat Aug 10 18:28:36 2019] CTL stayalive: 1 checksecs: 0 kicked: 1
(12029) [Sat Aug 10 18:28:36 2019] CTL kidsalive: 1 onetimecopy: 0 lifetimesecs: 0 (NULL) maxkicks: 0
(12022) [Sat Aug 10 18:28:36 2019] MCP Created controller 12029 for sync "MAESTROESCLAVO1". Kick is 1
(12029) [Sat Aug 10 18:28:36 2019] CTL Database "ESCLAVO1" backend PID: 12543
(12029) [Sat Aug 10 18:28:36 2019] CTL Database "MAESTRO1" backend PID: 12031
(12032) [Sat Aug 10 18:28:36 2019] KID (MAESTROESCLAVO1) New kid, sync "MAESTROESCLAVO1" alive=1 Parent=12029 PID=12032 kicked=1
Parece que todo en orden, no veo errores, iniciamos las pruebas de la replica.
Prueba #1: Update BD: dvdrental.
== Configuracion de Replica Maestro-Esclavo #2 BD:ejemplo ==> BD:ejemploreportes.
root@srvmaestro:/var/run# bucardo add database MAESTRO2 dbname=ejemplo
Added database "MAESTRO2"
root@srvmaestro:/var/run# bucardo add database ESCLAVO2 dbname=ejemploreportes host=192.168.80.11
Added database "ESCLAVO2"
root@srvmaestro:/var/run# bucardo add all tables db=MAESTRO2 herd=HR2 --verbose
Creating relgroup: HR2
Added table public.pgbench_history to relgroup HR2
Added table public.pgbench_tellers to relgroup HR2
Added table public.pgbench_branches to relgroup HR2
Added table public.pgbench_accounts to relgroup HR2
New tables:
public.pgbench_accounts
public.pgbench_branches
public.pgbench_history
public.pgbench_tellers
New tables added: 4
root@srvmaestro:/var/run# bucardo add sync MAESTROESCLAVO2 dbs=MAESTRO2,ESCLAVO2 relgroup=HR2 pushdelta
Added sync "MAESTROESCLAVO2"
Created a new dbgroup named "MAESTROESCLAVO2"
root@srvmaestro:/var/run# bucardo restart
Creating /var/run/bucardo/fullstopbucardo ... Done
Checking for existing processes
Removing file "/var/run/bucardo/fullstopbucardo"
Starting Bucardo
Prueba #2: Borrado BD: Ejemplo, Tabla: pgbench_accounts.
Verificacion de Registros antes de borrar en cada tabla:
Ambos tienen la misma cantidad de registros.
Vamos a borrar 5 registros de la tabla: pgbench_accounts.
Ultima prueba, que pasa si bucardo no esta en ejecucion.
Vamos a detener bucardo y vamos a modificar un registro en el maestro, bd: stuff.
Antes de revisamos las tablas:
-Detenemos bucardo.
bucardo stop
Creating /var/run/bucardo/fullstopbucardo ... Done
Ahora procedemos con el cambio desde el GUI.
Prueba #1: Update BD: dvdrental.
Servidor Maestro.
Agregando Registro.
Nuevo Registro.
Servidor esclavo sincronizado.
Como pueden darse cuenta, el cambio que se llevo a cabo en el servidor maestro en la tabla 'public.actor', se replico en el servidor esclavo, y fue en segundos.
== Configuracion de Replica Maestro-Esclavo #2 BD:ejemplo ==> BD:ejemploreportes.
Ahora viene crear la 2da replica pero ahora con la base de datos ejemplo(maestro) y ejemploreportes(esclavo), recuerden que todo estos pasos se debe realizar en el servidor Maestro, quien este ejecutando bucardo.
Added database "MAESTRO2"
root@srvmaestro:/var/run# bucardo add database ESCLAVO2 dbname=ejemploreportes host=192.168.80.11
Added database "ESCLAVO2"
root@srvmaestro:/var/run# bucardo add all tables db=MAESTRO2 herd=HR2 --verbose
Creating relgroup: HR2
Added table public.pgbench_history to relgroup HR2
Added table public.pgbench_tellers to relgroup HR2
Added table public.pgbench_branches to relgroup HR2
Added table public.pgbench_accounts to relgroup HR2
New tables:
public.pgbench_accounts
public.pgbench_branches
public.pgbench_history
public.pgbench_tellers
New tables added: 4
root@srvmaestro:/var/run# bucardo add sync MAESTROESCLAVO2 dbs=MAESTRO2,ESCLAVO2 relgroup=HR2 pushdelta
Added sync "MAESTROESCLAVO2"
Created a new dbgroup named "MAESTROESCLAVO2"
root@srvmaestro:/var/run# bucardo restart
Creating /var/run/bucardo/fullstopbucardo ... Done
Checking for existing processes
Removing file "/var/run/bucardo/fullstopbucardo"
Starting Bucardo
Verificacion de Registros antes de borrar en cada tabla:
Servidor Maestro
Servidor Esclavo
Ambos tienen la misma cantidad de registros.
Vamos a borrar 5 registros de la tabla: pgbench_accounts.
Atraves de phppgadmin borramos 5 registros y revisamos el total de registros en ambos servidores, debe coincidir.
Servidor Maestro
Servidor Esclavo
Como se podran dar cuenta, al borrar los registros en la tabla indicada desde el servidor Maestro bucardo se encargo de enviar la misma instruccion a el servidor esclavo y se sincronizaron las tablas.
Prueba #3: Insert.
Vamos a agregar en la base de datos dvdrental, tabla: category este registro:
category_1d=17
name: Baja Open Solutions
Servidor Maestro
Registro Agregado en el Maestro.
Servidor Esclavo Sincronizado
Ahora bucardo se encargo de sincronizar las bases de datos en segundos, ustedes pueden hacer mas pruebas para que vean el potencial de bucardo y no consume mucho recursos.
Vamos a detener bucardo y vamos a modificar un registro en el maestro, bd: stuff.
Antes de revisamos las tablas:
Servidor Maestro.
Servidor Esclavo.
bucardo stop
Creating /var/run/bucardo/fullstopbucardo ... Done
Ahora procedemos con el cambio desde el GUI.
Update Registro
Registro Actualizado
Como bucardo esta detenido, el esclavo no ha sido afectado, pueden revisar su tabla y seguira con los mismo datos:
Iniciando bucardo de nuevo:
root@srvmaestro:/var/run# bucardo start
Checking for existing processes
Removing file "/var/run/bucardo/fullstopbucardo"
Starting Bucardo
root@srvmaestro:/var/run#
root@srvmaestro:/var/run# tail -n 25 /var/log/bucardo/log.bucardo
(2818) [Mon Aug 12 04:50:41 2019] MCP Inspecting target table "public.pgbench_tellers" on database "ESCLAVO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP Inspecting source table "public.pgbench_branches" on database "MAESTRO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP Inspecting target table "public.pgbench_branches" on database "ESCLAVO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP Inspecting source table "public.pgbench_accounts" on database "MAESTRO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP Inspecting target table "public.pgbench_accounts" on database "ESCLAVO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP Active syncs: 2
(2818) [Mon Aug 12 04:50:41 2019] MCP Entering main loop
(2824) [Mon Aug 12 04:50:41 2019] VAC New VAC daemon. PID=2824
(2824) [Mon Aug 12 04:50:41 2019] VAC Connected to database "MAESTRO1" with backend PID of 2826
(2824) [Mon Aug 12 04:50:41 2019] VAC Connected to database "MAESTRO2" with backend PID of 2827
(2818) [Mon Aug 12 04:50:41 2019] MCP Created VAC 2824
(2828) [Mon Aug 12 04:50:41 2019] CTL New controller for sync "MAESTROESCLAVO1". Relgroup is "HERD1", dbs is "MAESTROESCLAVO1". PID=2828
(2828) [Mon Aug 12 04:50:41 2019] CTL stayalive: 1 checksecs: 0 kicked: 1
(2828) [Mon Aug 12 04:50:41 2019] CTL kidsalive: 1 onetimecopy: 0 lifetimesecs: 0 (NULL) maxkicks: 0
(2818) [Mon Aug 12 04:50:41 2019] MCP Created controller 2828 for sync "MAESTROESCLAVO1". Kick is 1
(2830) [Mon Aug 12 04:50:41 2019] CTL New controller for sync "MAESTROESCLAVO2". Relgroup is "HR2", dbs is "MAESTROESCLAVO2". PID=2830
(2830) [Mon Aug 12 04:50:41 2019] CTL stayalive: 1 checksecs: 0 kicked: 1
(2830) [Mon Aug 12 04:50:41 2019] CTL kidsalive: 1 onetimecopy: 0 lifetimesecs: 0 (NULL) maxkicks: 0
(2828) [Mon Aug 12 04:50:41 2019] CTL Database "ESCLAVO1" backend PID: 2290
(2828) [Mon Aug 12 04:50:41 2019] CTL Database "MAESTRO1" backend PID: 2832
(2830) [Mon Aug 12 04:50:41 2019] CTL Database "ESCLAVO2" backend PID: 2291
(2818) [Mon Aug 12 04:50:41 2019] MCP Created controller 2830 for sync "MAESTROESCLAVO2". Kick is 1
(2830) [Mon Aug 12 04:50:41 2019] CTL Database "MAESTRO2" backend PID: 2833
(2834) [Mon Aug 12 04:50:41 2019] KID (MAESTROESCLAVO1) New kid, sync "MAESTROESCLAVO1" alive=1 Parent=2828 PID=2834 kicked=1
(2835) [Mon Aug 12 04:50:41 2019] KID (MAESTROESCLAVO2) New kid, sync "MAESTROESCLAVO2" alive=1 Parent=2830 PID=2835 kicked=1
Bucardo de nuevo en operacion
Servidor Esclavo Sincronizado.
Como se podran dar cuenta, bucardo se casa con las bases de datos que esta sincronizado y todos los cambios que se llevan a cabo en esas bases de datos los registra en su propia base datos, por ello creamos una base de datos llamada 'bucardo' en el servidor Maestro es la que utiliza para todo esto.
Una vez que se pone en ejecucion revisa sus registros y en cuanto ve en linea los servidores esclavos empieza a enviarles todos los cambios detectados hasta que vuelven a sincronizarse.
Asi de inteligente es bucardo.
Bien hasta aqui termino este pequeno tutorial de bucardo, pasemos al resumen.
Resumen:
Podemos llevara cabo configuraciones:
Maestro-Esclavo
Maestro-Maestro
Maestro-Esclavos
Requisitos de bucardo.
-OS y PostgreSQL deben ser la misma version en ambos servidores.
Limitantes de bucardo.
-Solo replica INSERT, UPDATE y DELETE.
-No replica CREATE.
-No replica la modificacion de las tablas.
Ya que bucardo toda su configuracion la almacena en esa bases de datos.
Para que me serviria llevar a cabo esto?
Una vez descomprimida la restauramos con este comando:
pg_restore dvdrental.tar -d dvdrental -U postgres
La base de datos ejemplo la creamos con pgbench asi:
pgbench -i -s 20 ejemplo
Bucardo es un sistema asincrono basado en Perl, consume muy pocos recursos y como observaron puede sicronizar multiples bases de datos de manera simultanea, yo tengo unos corriendo con mas de 200 tablas.
Podemos llevara cabo configuraciones:
Maestro-Esclavo
Maestro-Maestro
Maestro-Esclavos
Requisitos de bucardo.
-Las bases de datos deben iniciar con la misma cantidad de registros, por ello una vez que sacamos el respaldo de las bases de datos a sincronizar, la base de datos no debe ser modificada hasta que bucardo se ponga en ejecucion.
Si llegaran a suceder que ambas bases de datos no tienen lo mismos registros, solo vuelven a sacar el respaldo y lo restauran en el servidor esclavo para que inicien de nuevo la sincronizacion.
Limitantes de bucardo.
-Solo replica INSERT, UPDATE y DELETE.
-No replica CREATE.
-No replica la modificacion de las tablas.
Si llegara a suceder esto, tiene comandos para actualizar las bases de datos que esta sincronizando y continuar.
Por ultimo, si ustedes necesitaran iniciar de 0, pueden eliminar la bases de datos llamada "bucardo" del servidor Maestro, la vuelven a crear como en el paso #5 de la configuracion del servidor Maestro y repiten los pasos de nuevo.
Ya que bucardo toda su configuracion la almacena en esa bases de datos.
Para que me serviria llevar a cabo esto?
1) Muchas veces tenemos servidores tipo ERP o MRP como ODOO que hace uso de PostgreSQL y es recomendable tener un segundo servidor para los reportes, dejando al 1ro para llevar a cabo el A(Alta)B(Bajas)C(Cambios) de la bases de datos y la replica para llevar a cabo lo reportes, ya que muchas veces hay reportes que consumen mucho recurso y es preferible que ese procesamiento lo lleve el segundo servidor para no cargarle la mano a el maestro.
2) Replica para alta tolerancia, otras ocasiones es necesario tener el segundo servidor replicado por si el primero llegara a fallar, el esclavo puede pasar a ser el primario(ya me toco vivirlo) y el tiempo caido seria bajo.
Espero este tutorial les sea de utilidad para seguir aprendiendo mas de Linux, PostgreSQL y bucardo, nos vemos hasta el siguiente tutorial, saludos.
NOTA: La base de datos dvdrental la bajamos de este link:
http://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip
http://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip
Una vez descomprimida la restauramos con este comando:
pg_restore dvdrental.tar -d dvdrental -U postgres
pgbench -i -s 20 ejemplo
Genial muy buen post justo lo que estaba buscando, gracias por este excelente tutorial.
ResponderEliminarHola, gracias por el post. Duda: intente hacer una replica de una BD ya replicada siguiendo estos mismos pasos. No funciono, no es posible?
ResponderEliminarhola me puede ayuda al momento de pasar la bd al servidor esclavo no me solicita passwd de xuser, no se cual es ya que ingreso la root y el usuario no funciona
ResponderEliminar