domingo, 18 de agosto de 2019

Pfsense: Instalacion de Pfsense 2.4 o 2.5 en VirtualBox

Hola, por fin me di este espacio de tiempo para poder aqui plasmarles como instalar pfsense desde VirtualBox, tener su laboratorio y poder probar este firewall chingon.

Estamos con la ultima version estable  2.4.4_p3 , ahora quiero aclararles que si desean hacerlo con la version de desarrollo 2.5_development no hay problema, tanto en VirtualBox como el Wizard de la instalacion es igual, no cambia nada, pueden probar ambas :-).

Pero vamos iniciando la pachanga, como siempre antes de me gustaria mostrar un diagrama de la red para saber la infraestructura donde se implementara, recuerden que uno siempre inicia con lo mas basico y conforme va incrementando la curva de aprendizaje va entrando a redes mas complejas, ahi que mantenerlo simple de inicio.



1) Internet
2) ISP Nuestro proveedor de Internet
3) Nuestro Firewall-->Pfsense.
4) Switch para nuestra interna.
5) Nuestros equipos dentro de nuestra LAN.
6) Punto de Acceso Inalambrico que ya es comun tener minimo 1.

Entonces vamos a usar VirtualBox para instalar PfSense y poder crear nuestro laboratorio para explorar el potencial de PfSense.

Requisitos en su equipo:

1) Procesador con soporte para maquinas virtuales llamese Intel VT-x o AMD SVM.
2) 1 Interfaz de red con conexion a Internet.
3) Espacio en disco duro para almacenar maquinas virtuales.
4) VirtualBox, estamos trajando la version 6.

Aqui va, buzos caperuzos, ustedes relajense, dejenme a mi la tarea de darles los pasos, ustedes solo pongan atencion a todo el rollo que sigue...



1) Descargar PfSense de la pagina oficial, les recuerdo que en este momento es la 2.4.4_p3, nos vamos a la pagina oficina: https://www.pfsense.org/

Fig 2.Pagina Oficial de Pfsense

Fig 3. Seleccion de la Version.

Esperamos a que se descargue, posteriormente  necesitamos descomprimir ese archivo ya que se baja en formato "GZ", en mi caso en mi maquina yo uso el programa OpenSource "7zip" (https://www.7-zip.org).

Fig 4. Descomprension de Archivo Descargado.

Una vez descomprimido entramos a el folder y ahi estara el diamante que necesitamos para la instalacion.


Fig. 5. Imagen Lista para Instalacion.

2) Creacion de Maquina Virtual dentro de VirtualBox.

Ahora le toca el turno a VirtualBox, abrimos la aplicacion y seleccionamos:

Fig 6. Creacion de Nueva Maquina Virtual.


Fig 7. Primera Seccion de Creacion.

Le ponen el nombre que gustes, lo demas tal cual dice la imagen anterior.

Memoria RAM

Fig. 8. Seleccion de la Cantidad de RAM.

Hoy en dia 1GB pueden trabajar la parte de firewall, alias, dhcp, dns, ntp. Pero si ya quieren meter servicios como squid, vpn's , snort, pfblocker, etc. si van a hacer que su equipo se acabe la memoria RAM, recuerden que al usar la SWAP ya estamos usando disco duro como memoria RAM y es mas lento el acceso, por ello les recomiendo si pueden iniciar con 2GB.

Disco Duro

Lo que sigue es crear el disco virtual donde se instalara, de fabrica VirtualBox nos deja un disco duro de 16GB, para PfSense es suficiente, ahora si van a hacer cosas avanzadas como Squid, Snort, PfBlockerNG, al final es un laboratorio para ustedes, con ese valor basta.

Fig.9. Creacion de Disco Duro.



Fig. 10. Seleccionamos Fixed size.

Fig. 11. Seleccionamos Tamano de Disco Duro.

Fig. 12. Proceso de Creacion de Disco Duro.
Al finalizar la creacion del disco duro nos regresamos a la pantalla principal de VirtualBox.

Fig. 13. Maquina Virtual Creada.
Ahora necesitamos llevar a cabo unos ajustes antes de arrancar la instalacion de PfSense.

3) Ajustes de configuracion.

Fig. 14. Ajustes en las opciones de boot.

Seleccionamos la imagen de PfSense que descargamos y descomprimimos en la Fig. 5.

Fig. 15. Buscar la imagen descargada.

Fig.16. Seleccionamos la Imagen de Instalacion.

Fig. 17. Imagen Lista.

Fig. 18. Deshabilitamos Audio, un Firewall no lo necesita.

Tarjetas de Red.
Aqui pongan atencion, como les mencione al inicio, solo requieren una interfaz conectada a Internet en su equipo(host), un firewall basico requiere:
  • WAN
  • LAN
En mi caso mi equipo esta conectado por WiFi ya que es una Laptop, datos de mi interfaz:

Fig. 19. Interfaz WiFi de Mi Host.
Esta interfaz es la que voy a usar para mi WAN de Pfsense, en modo Bridge como muestra la siguiente imagen, a excepcion de la option "Name" en su caso puede ser otra la interfaz fisica que tienen, las demas opciones deben quedar igual.

Fig. 20. Configuracion de WAN para PfSense.

En su caso posiblemente su equipo este conectado via cable de red, ustedes elijen la interfaz de su estacion(host) que esta conectada a Internet.

Para la LAN vamos hacer uso de una opcion que trae VirtualBox: Internal Networking.

Su interfaz LAN quedaria como muestra la siguiente imagen.

Fig. 21. Configuracion de LAN.

Como podran ver en la figura anterior, habilitamos la 2da interfaz, la cual viene siendo la LAN de Pfsense. Ademas de ellos seleccionamos la opcion de "Internal Network", le colocamos un nombre(Pfsense_LAN) y lo demas lo dejan como muestra la imagen.

Como funciona una 'Internal Network", como veran el nombre que le dimos fue "Pfsense_LAN", todas las maquinas virtuales que creemos dentro de este host con VirtualBox y que tengan como Internal Network el mismo nombre, VirtualBox crea un switch interno y permite comunicarse entre ellas.

Asi que no requerimos otra interfaz fisica para asignarla a Pfsense como LAN. Estamos usando las herrramientas que el mismo VirtualBox nos ofrece.

Continuamos los ajustes.

Fig. 22. No Necesitamos USB hasta el momento.
Por ultimo como dice la imagen anterior, ahora si presionamos el boton OK.

Nuestra maquina virtual para PfSense quedaria asi:

Fig.23. Maquina Virtual para PfSenses Lista.
Arrancamos la Instalacion de PfSense.

Ahora si, seleccionamos la VM que acabamos de configurar para pfsense y le damos click al boton 'Start'.

Fig. 24. Arrancamos la Maquina Virtual de PfSenses.
Voy a escalar la imagen de la maquina virtual para que se vea en toda la pantalla.

Fig. 25. Arranque de Pfsense.
Si ustedes se sieten comodos con su actual tamano de pantalla no problema, yo la escalo para verla en toda la pantalla de mi equipo, el wizard es muy sencillo de seguir.

Fig. 26. Inicia el Wizard.





Fig. 27. Reboot.

Es rapidisima la instalacion, una vez que reiniciamos arrancara el disco duro primero y tenemos nuestra pfsense listo para trabajar.

Fig. 28. Pfsense Listo para Trabajar.


Por ultimo, vamos asignarle la red que mostramos en el diagrama de la red(Fig 1.) que mostramos al principio del post:

Red LAN: 192.168.100.0/24
Pfsense LAN IP: 192.168.100.1
DHCP: 192.168.100.100-192.168.100.150

Con esta info arrancamos la configuracion de PfSense desde la terminal.

Fig. 29. Pasos para asignacion de IP a la LAN.




Fig. 30. LAN con nueva IP.


El DHCP se puede ajustar ya operando el sistema si lo creen conveniente. Aqui ya podemos prender alguna de nuestras maquinas virtuales, solo recordar que su red debe pertener a la misma que configuramos para Pfsense en la seccion Interfaces de Red, ver siguiente imagen.

Fig. 31 . Internal Network (Pfsense_LAN).
Si alguna de estos 2 equipos tienen sus interfaces en modo DHPC debe tomar IP de Pfsense, vamos a prender a Ubuntu y comprobar que hay comunicacion.

Fig. 32. Ubuntu tomando IP atraves de Pfsense.

Listo, como pueden ver ubuntu virtual tomo IP de Pfsense :-).

Hasta que ya mostramos los pasos que se requieren para instalar PfSense bajo VirtualBox, en el siguiente post vamos a entrar en la configuracion inicial de PfSense para ahora si ponernos a trabajar y aprender mas y sacarle mas jugo o bien mi primer video es de la configuracion de PfSense por si quieren hecharle un ojo... https://www.youtube.com/watch?v=DDdQXhVZToQ

Cualquier duda o error de este post con toda confianza pueden hacer sus preguntas abajo de este post, hasta la proxima banda!!!

NOTA: Si no vienen de mi canal se los recomiendo, tengo muchos videos de Pfsense y Linux que pueden interesarles, https://www.youtube.com/channel/UCrRxfZbTzNwlWpKTjqtDANA

miércoles, 7 de agosto de 2019

Linux: Replica de Base de Datos(Maestro-Esclavo) con PostgreSQL y Bucardo en Ubuntu 18.x

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.

8.a Respaldo de ambas bases de datos.

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.

=== Configuracion de Servidor Esclavo ===

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

4.c Arrancamos apache

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/

cd /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.

su - postgres
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.

/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)


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

bucardo start
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.

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.

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:

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.

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:
Servidor Maestro.

Servidor Esclavo.

-Detenemos bucardo.

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:

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.

-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.

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

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