Cómo configurar la replicación de transmisión PostgreSQL 12 en CentOS 8

Cómo configurar la replicación de transmisión PostgreSQL 12 en CentOS 8

Postgresql La base de datos admite varias soluciones de replicación para crear aplicaciones de alta disponibilidad, escalables y tolerantes a las fallas, una de las cuales es Registro de escritura (Wal) Envío. Esta solución permite implementar un servidor en espera utilizando el envío de registro basado en archivos o la replicación de transmisión, o cuando sea posible, una combinación de ambos enfoques.

Con la replicación de la transmisión, se configura un servidor de base de datos en espera (esclavo de replicación) para conectarse al servidor maestro/primario, que se transmite Wal registra el espera mientras se generan, sin esperar el Wal Archivo a llenar.

Por defecto, la replicación de transmisión es asíncrona donde los datos se escriben en los servidores de espera después de que se haya cometido una transacción en el servidor primario. Esto significa que existe un pequeño retraso entre cometer una transacción en el servidor maestro y los cambios que se vuelven visibles en el servidor en espera. Una desventaja de este enfoque es que en caso de que el servidor maestro se bloquee, cualquier transacción no comprometida puede no ser replicada y esto puede causar pérdida de datos.

Esta guía muestra cómo configurar un PostgreSQL 12 replicación de transmisión de standby maestro en Centos 8. Usaremos "ranuras de replicación"Para el espera como una solución para evitar que el servidor maestro recicla el viejo Wal segmentos antes de que el espera los haya recibido.

Tenga en cuenta que en comparación con otros métodos, las ranuras de replicación retienen solo el número de segmentos que se sabe.

Entorno de prueba:

Esta guía supone que se conectó a sus servidores de bases de datos maestros y en espera como raíz a través de Ssh (usar Sudo Comando cuando sea necesario si está conectado como un usuario normal con derechos administrativos):

PostgreSQL Master Database Server: 10.20.20.9 Servidor de base de datos en espera de PostgreSQL: 10.20.20.8 

Ambos servidores de bases de datos deben tener PostgreSQL 12 Instalado, de lo contrario, consulte: Cómo instalar PostgreSQL y Pgadmin en CentOS 8.

Nota: PostgreSQL 12 Viene con cambios importantes en la implementación y configuración de la replicación, como el reemplazo de recuperación.confusión y la conversión de recuperación.confusión Parámetros a los parámetros de configuración de PostgreSQL normales, lo que hace que sea mucho más fácil configurar la replicación de clúster.

Paso 1: Configuración del servidor PostgreSQL Master/Primary Database

1. En el servidor maestro, cambie a la cuenta del sistema Postgres y configure las direcciones IP (s) en las que el servidor maestro escuchará las conexiones de los clientes.

En este caso, usaremos * significa todo.

# Su - Postgres $ PSQL -C "Alter System Set Listen_Addresses en '*';" 

El Alterar el conjunto de sistemas El comando SQL es una característica poderosa para cambiar los parámetros de configuración de un servidor, directamente con una consulta SQL. Las configuraciones se guardan en el postgresql.confusión.auto Archivo ubicado en la raíz de la carpeta de datos (E.gramo /var/lib/pgsql/12/data/) y leer suma a los almacenados en postgresql.confusión. Pero las configuraciones en el primero tienen prioridad sobre las de los archivos relacionados más tarde y otros.

Configurar direcciones IP en PostgreSQL Master

2. Luego cree un papel de replicación que se utilizará para las conexiones desde el servidor en espera al servidor maestro, utilizando el crear usuario programa. En el siguiente comando, el -PAG indica una contraseña para el nuevo rol y -mi se hace eco de los comandos que creauser genera y envía al servidor de la base de datos.

# Su -Postgres $ createuser -replicación -p -e replicador $ Salida 
Crear usuario de replicación en PGMaster

3. Luego ingrese la siguiente entrada al final del /var/lib/pgsql/12/data/PG_HBA.confusión Archivo de configuración de autenticación del cliente con el campo de la base de datos establecida en replicación como se muestra en la captura de pantalla.

Replicador de replicación del huésped 10.20.20.8/24 MD5 
Configurar la autenticación de replicación

4. Ahora reinicie el Postgres12 Servicio utilizando el siguiente comando SystemCTL para aplicar los cambios.

# SystemCTL reiniciar PostgreSQL-12.servicio 

5. A continuación, si tienes el cortafuegos Servicio en ejecución, debe agregar el servicio PostgreSQL en la configuración de firewalld para permitir las solicitudes del servidor en espera al maestro.

# firewall-cmd --add-service = PostgreSQL --Permanent # firewall-cmd--Reload 

Paso 2: Hacer una copia de seguridad base para arrancar el servidor en espera

6. A continuación, debe hacer una copia de seguridad base del servidor maestro desde el servidor en espera; Esto ayuda a arrancar el servidor en espera. Debe detener el servicio PostgreSQL 12 en el servidor en espera, cambiar a la cuenta de usuario de Postgres, hacer una copia de seguridad del directorio de datos (/var/lib/pgsql/12/data/), luego elimine todo debajo de él como se muestra, antes de tomar la copia de seguridad de la base.

# SystemCTL Stop PostgreSQL-12.Servicio # SU -Postgres $ cp -r/var/lib/pgsql/12/data/var/lib/pgsql/12/data_orig $ rm -rf/var/lib/pgsql/12/data/* 

7. Entonces usa el pg_baseBackup herramienta para tomar la copia de seguridad base con la propiedad adecuada (el usuario del sistema de la base de datos I.mi Post -put, dentro de Post -put cuenta de usuario) y con los permisos correctos.

En el siguiente comando, la opción:

  • -H - Especifica el host que es el servidor maestro.
  • -D - Especifica el directorio de datos.
  • -U - Especifica el usuario de la conexión.
  • -PAG - habilita la presentación de informes de progreso.
  • -V - habilita el modo verboso.
  • -Riñonal - habilita la creación de la configuración de recuperación: crea un apoyar.señal Archivo y adjunto la configuración de conexión a postgresql.auto.confusión En el directorio de datos.
  • -X - Se usa para incluir los archivos de registro de escritura (archivos WAL) requeridos en la copia de seguridad. Un valor de la transmisión significa transmitir el WAL mientras se crea la copia de seguridad.
  • -C - habilita la creación de una ranura de replicación nombrada por la opción -s antes de comenzar la copia de seguridad.
  • -S - Especifica el nombre de la ranura de replicación.
$ pg_baseBackup -h 10.20.20.9 -d/var/lib/pgsql/12/data -u replicator -p -v -r -x stream -c -s pgstandby1 $ salida 
Copia de seguridad base del servidor maestro

8. Cuando se realiza el proceso de copia de seguridad, el nuevo directorio de datos en el servidor en espera debería verse así en la captura de pantalla. A apoyar.señal se crea y la configuración de conexión se adjunta a postgresql.auto.confusión. Puede enumerar su contenido usando el comando LS.

# ls -l/var/lib/pgsql/12/data/ 
Verificar el directorio de datos de copia de seguridad

Un esclavo de replicación se ejecutará en "Estargal caliente"Modo si el Hot_standby El parámetro se establece en ON (el valor predeterminado) en postgresql.confusión Y hay un apoyar.señal Archivo presente en el directorio de datos.

9. Ahora de vuelta en el servidor maestro, debería poder ver la ranura de replicación llamada pgstandby1 Cuando abres el pg_replication_slots Ver como sigue.

# SU - Postgres $ PSQL -C "SELECT * de PG_REPLICATION_SLOTS;" $ Salida 
Crear ranura de replicación

10. Para ver la configuración de conexión adjunta en el postgresql.auto.confusión Archivo, use el comando CAT.

# cat/var/lib/pgsql/12/data/postgresql.auto.confusión 
Ver Configuración de conexión

11. Ahora comience las operaciones normales de la base de datos en el servidor en espera iniciando el servicio PostgreSQL de la siguiente manera.

# SystemCTL Inicio PostgreSQL-12 

Paso 3: Prueba de replicación de transmisión PostgreSQL

12. Una vez que se establece una conexión con éxito entre el maestro y el espera, verá un Wal Proceso del receptor En el servidor en espera con un estado de transmisión, puede verificarlo utilizando el PG_STAT_WAL_RECEIVER vista.

$ psql -c "\ x" -c "seleccione * de PG_STAT_WAL_RECEIVER;" 
Verifique el proceso del receptor WAL

y un correspondiente Wal Proceso de remitente en el servidor maestro/primario con un estado de transmisión y un sync_state de Async, puede verificar esta vista PG_STAT_REPLICATION PG_STAT_REPLICATION.

$ psql -c "\ x" -c "seleccione * de PG_STAT_REPLICATION;" 
Consulte el proceso del remitente de Wal en maestro

De la captura de pantalla anterior, la replicación de transmisión es asíncrona. En la siguiente sección, demostraremos cómo habilitar opcionalmente la replicación sincrónica.

13. Ahora pruebe si la replicación funciona bien creando una base de datos de prueba en el servidor maestro y verifique si existe en el servidor en espera.
[maestro] postgres =# crea la base de datos tecMint;
[en espera] Postgres =# \ l

Replicación de transmisión de pruebas

Opcional: habilitando la replicación sincrónica

14. La replicación sincrónica ofrece la capacidad de confirmar una transacción (o escribir datos) a la base de datos primaria y la réplica/réplica simultáneamente. Solo confirma que una transacción es exitosa cuando todos los cambios realizados por la transacción se han transferido a uno o más servidores de espera sincrónicos.

Para habilitar la replicación sincrónica, el synchronous_commit También debe establecerse en ON (que es el valor predeterminado, por lo tanto, no es necesario ningún cambio) y también debe establecer el Synchronous_standby_names parámetro a un valor no vacío. Para esta guía, lo estableceremos en todos.

$ psql -c "alter system set synchronous_standby_names a '*';" 
Establecer nombres de espera de sincronización en el maestro

15. Luego recargar el servicio PostgreSQL 12 para aplicar los nuevos cambios.

# SystemCTL Recargar PostgreSQL-12.servicio 

dieciséis. Ahora cuando consultas el Wal Proceso de remitente en el servidor primario una vez más, debe mostrar un estado de transmisión y un sync_state de sincronización.

$ psql -c "\ x" -c "seleccione * de PG_STAT_REPLICATION;" 
Consulte el proceso del remitente de Wal en maestro

Hemos llegado al final de esta guía. Hemos demostrado cómo configurar PostgreSQL 12 replicación de transmisión de base de datos maestro-standby en Centos 8. También cubrimos cómo habilitar la replicación sincrónica en un clúster de base de datos PostgreSQL.

Hay muchos usos de la replicación y siempre puede elegir una solución que cumpla con su entorno de TI y/o requisitos específicos de la aplicación. Para obtener más detalles, vaya a servidores de espera de registro de registro en la documentación PostgreSQL 12.