Introducción
Almacenar datos en un solo lugar suele ser riesgoso. Por lo general, se recomienda que tenga un plan para asegurarse de recuperarse de un desastre tan pronto como ocurra.
Una buena forma de garantizar un plan de recuperación ante desastres eficaz es tener los mismos datos en varios servidores y mantenerlos sincronizados. Los servidores de bases de datos suelen trabajar juntos de modo que si el servidor principal / maestro falla, uno de ellos se hará cargo, creando una alta disponibilidad. Varios servidores de bases de datos también pueden proporcionar los mismos datos al mismo tiempo; esto se conoce como equilibrio de carga.
Esta guía le muestra cómo configurar una replicación maestro-esclavo en la que a un servidor de base de datos se le otorgan permisos de lectura y escritura mientras que al segundo se le otorgan permisos de solo lectura.
Antes de que empieces
- 2 Ubuntu 18.04 Virtual Private Server (VPS) o servidor dedicado con un usuario no root con permisos Sudo. Uno actúa como maestro, el otro como servidor auxiliar / en espera.
- PostgreSQL está instalado y configurado en ambos servidores. Aquí se explica cómo instalar el servidor de base de datos PostgreSQL en Ubuntu 18.04
pasos
Primero debe cambiar la dirección de la lista en la página de configuración de PostgreSQL. El servidor debe poder escuchar todos los puertos.
$ sudo vim /etc/postgresql/9.5/main/postgresql.conf
Nota especial: la versión de Postgresql puede ser diferente y, por lo tanto, su ruta puede ser diferente a la anterior.
Busque la palabra listen_addresses en su editor o configure números y desplácese hacia abajo hasta la línea 59.
Quite el comentario de la línea y cambie el nombre de localhost a * para que el servidor escuche todas las direcciones IP. Debe verse como el siguiente extracto.
... #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - listen_addresses="*" # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all ...
Mientras guarda sus cambios, cierre su editor y vuelva a cargar el servicio Postgresql para reflejar los cambios que realizó.
$ sudo systemctl restart postgresql
Crea una base de datos de muestra
Para propósitos de prueba de replicación, cree una tabla de muestra llamada Personajes.
Inicie sesión en su base de datos de Postgres
$ sudo -i -u postgres psql postgres
# CREATETABLEcharacters(fname text, character_id serial, datetimestamp, description text);
Ahora inserte datos de muestra en su tabla recién creada.
# INSERTINTOcharacters (fname, date, description) VALUES ( 'Griffin', current_date, 'This is a sample character' );
INSERT01
Configuración del servidor primario
PostgreSQL requiere un rol / usuario con permisos especiales para propósitos de replicación.
$ sudo -u postgres createuser -U postgres replicationuser -P -c 5 --replication
Nota especial: puede obtener más información sobre las opciones del comando createuser aquí. Además, en un entorno de producción, asegúrese de que la contraseña del usuario de replicación sea FUERTE para evitar incidentes como la fuerza bruta o simplemente adivinar contraseñas.
Luego, debe crear un directorio de archivo que sea un subdirectorio del directorio principal predeterminado de su clúster.
$ sudo mkdir -p /var/lib/postgresql/9.5/main/mnt/server/archivedir
Configurar el pg_hbaarchivo .conf
$ sudo vim /etc/postgresql/9.5/main/pg_hba.conf
Busque la sección de replicación y luego agregue la siguiente entrada al usuario de replicación para que tenga este aspecto. Recuerde reemplazar la dirección IP de su servidor esclavo.
# Allow replication connections host replication replicationuser 192.168.56.20/24 md5
Salga mientras guarda los cambios.
Edite el postgresql.conffile
$ sudo vim /etc/postgresql/9.5/main/postgresql.conf
Edite las siguientes configuraciones. Recuerde eliminar cualquier configuración que edite de los comentarios.
listen_addresses="*" wal_level = hot_standby archive_mode= on Archive_commend = 'test ! -f mnt/server/archivedir/%f && cp %p mnt/server/archivedir/%f' max_wal_senders=3
Cuando guarde los cambios, salga y reinicie el servicio Postgresql
$ sudo systemctl restart postgresql
Configuración del servidor esclavo
Primero detenga el servicio postgresql en su servidor esclavo.
$ sudo systemctl stop postgresql
Cambie el nombre del directorio principal en el directorio de Postgresql por otro, ya que la copia de seguridad no reemplazará los archivos existentes en la misma carpeta.
$ sudo mv /var/lib/postgresql/9.3/main /var/lib/postgresql/9.3/main_old
Ejecute la utilidad pg_basebackup. Reemplace la dirección IP con la dirección IP de su servidor maestro.
$ sudo -u postgres pg_basebackup -h 192.168.56.20 -D /var/lib/postgresql/9.5/main -U replicationuser -v -P --xlog-method=stream
Ingrese la contraseña de usuario de replicación que estableció en su servidor maestro cuando se le solicite.
Edite el postgresqlarchivo .conf
$ sudo vim /etc/postgresql/9.5/main/postgresql.conf
Busque la opción de configuración hot_standby y cámbiela a en.
Salga mientras guarda los cambios.
Ahora debe especificar la configuración de recuperación que se utilizará en caso de recuperación de datos.
$ sudo cp -avr /usr/share/postgresql/9.5/recovery.conf.sample /var/lib/postgresql/9.5/main/recovery.conf
Edite el archivo de recuperación
$ sudo vim /var/lib/postgresql/9.5/main/recovery.conf
Busque standby_mode y cambie la opción a en para que el servidor permanezca en modo de espera.
Busque Primary_conninfo y agregue los detalles del servidor maestro
primary_conninfo= 'host=192.168.56.20 port=5432 user=replicationuser password=.Breotmas@12P12sr%'
Salga mientras guarda los cambios.
Inicie el servicio postgresql en su servidor esclavo
$ sudo systemctl start postgresql
Prueba de replicación
Vaya a su servidor maestro en la tabla que creó. Agrega una nueva entrada.
$ sudo -u postgres psql postgres
# INSERTINTOcharacter(fname, date, description) VALUES ( 'Sanchez', current_date, 'This is a family guy character'); INSERT01
Vuelva a su servidor esclavo en la base de datos de Postgres y mire los datos
$ sudo -u postgres psql postgres
# SELECT * FROMcharacter
fname | character_id | date | description ---------+--------------+---------------------+---------------------------- Griffin | 1 | 2018-10-22 00:00:00 | This is a sample character Sanchez | 2 | 2018-10-2200:00:00 | A Rick and Morty character (2 rows)
Conclusión
Si pudo ver los datos en su servidor esclavo después de pegarlos en su servidor maestro, significa que ha configurado con éxito su replicación maestro-esclavo de PostgreSQL.
Hay dos formas de invocar la conmutación por error si el servidor maestro deja de funcionar repentinamente; Puede usar el comando pg_ctl o especificar una ubicación para el archivo de activación en el archivo /etc/postgresql/9.5/main/postgresql.conf en su servidor esclavo. Simplemente busque la línea trigger_file = “/ tmp / postgresql.trigger.5432” en el archivo y descomente.