Cómo crear un espera caliente con PostgreSQL

Cómo crear un espera caliente con PostgreSQL

Objetivo

Nuestro objetivo es crear una copia de una base de datos PostgreSQL que se sincroniza constantemente con la original y acepta consultas de solo lectura.

Sistema operativo y versiones de software

  • Sistema operativo: Red Hat Enterprise Linux 7.5
  • Software: PostgreSQL Server 9.2

Requisitos

Acceso privilegiado a sistemas maestros y esclavos

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
  • ps - Dados los comandos de Linux para ser ejecutados como un usuario regular no privilegiado

Introducción

PostgreSQL es un RDBMS de código abierto (sistema de gestión de bases de datos relacionales), y con cualquier base de datos, la necesidad puede surgir para escalar y proporcionar HA (alta disponibilidad). Un solo sistema que proporciona un servicio siempre es un posible punto de falla posible, e incluso con los sistemas virtuales, puede haber un momento en que no puede agregar más recursos a una sola máquina para hacer frente a la carga cada vez mayor. También puede haber una necesidad de otra copia del contenido de la base de datos que se puede consultar para análisis de larga duración, que no se ejecuta en la base de datos de producción altamente intensiva en transacciones. Esta copia podría ser una simple restauración de la copia de seguridad más reciente en otra máquina, pero los datos estarían desactualizados tan pronto como se restaura.

Al crear una copia de la base de datos que replica constantemente su contenido con el original (llamado maestro o primario), pero al hacerlo, acepte y devuelva los resultados a consultas de solo lectura, podemos crear un Estargal caliente que tienen de cerca el mismo contenido.

En caso de falla en el maestro, la base de datos en espera (o esclava) puede asumir el papel de lo primario, detener la sincronización y aceptar solicitudes de lectura y escritura, para que las operaciones puedan continuar, y el maestro fallido puede devolverse a la vida (tal vez como en espera cambiando el camino de la sincronización). Cuando se ejecutan tanto primario como en espera, las consultas que no intentan modificar el contenido de la base de datos se pueden descargar al modo de espera, por lo que el sistema general podrá manejar una mayor carga. Sin embargo, tenga en cuenta que habrá algún retraso: el espera estará detrás del maestro, hasta la cantidad del tiempo que lleva sincronizar los cambios. Este retraso puede tener cuidado dependiendo de la configuración.

Hay muchas formas de construir una sincronización maestra (o incluso maestro maestro) con PostgreSQL, pero en este tutorial configuraremos la replicación de transmisión, utilizando el último servidor PostgreSQL disponible en repositorios de Red Hat. El mismo proceso generalmente se aplica a otras versiones de distribuciones y RDMBS, pero puede haber diferencias con respecto a las rutas del sistema de archivos, los gerentes de paquetes y servicios y tales tales.



Instalación del software requerido

Instalemos PostgreSQL con beque A ambos sistemas:

Yum install PostgreSQL-server

Después de una instalación exitosa, necesitamos inicializar ambos grupos de bases de datos:

# Postgresql-setup initdb inicializando la base de datos .. . DE ACUERDO 
Copiar

Para proporcionar un inicio automático para las bases de datos en el arranque, podemos habilitar el servicio en system:

SystemCTL Habilitar PostgreSQL

Usaremos 10.10.10.100 como primario, y 10.10.10.101 Como la dirección IP de la máquina de espera.

Configurar al maestro

Generalmente es una buena idea hacer una copia de seguridad de cualquier archivo de configuración antes de hacer cambios. No ocupan espacio que valga la pena mencionar, y si algo sale mal, la copia de seguridad de un archivo de configuración de trabajo puede ser un salvavidas.

Necesitamos editar el PG_HBA.confusión con un editor de archivos de texto como VI o nano. Necesitamos agregar una regla que permita que el usuario de la base de datos desde el espera acceda a lo principal. Esta es la configuración del lado del servidor, el usuario aún no existe dentro de la base de datos. Puede encontrar ejemplos al final del archivo comentado que estén relacionados con el replicación base de datos:

# Permitir conexiones de replicación desde localhost, por un usuario con el privilegio de replicación #. #local replicación Postgres Peer #Host Replicación Postgres 127.0.0.1/32 Ident #Host Replicación Postgres :: 1/128 Ident 

Agreguemos otra línea al final del archivo y lo marquemos con un comentario para que se pueda ver fácilmente lo que se cambia a partir de los valores predeterminados:

## myconf: repusente de replicación del host de replicación 10.10.10.101/32 MD5 

En los sabores del sombrero rojo, el archivo se encuentra de forma predeterminada debajo del /var/lib/pgsql/data/ directorio.

También necesitamos hacer cambios en el archivo de configuración principal del servidor de la base de datos, postgresql.confusión, que se encuentra en el mismo directorio encontramos el PG_HBA.confusión.

Encuentre la configuración que se encuentra en la tabla a continuación y modifíquela de la siguiente manera:



Sección Configuración predeterminada Configuración modificada
Conexiones y autenticación #listen_addresses = 'localhost' escuchar_addresses = '*'
Escribir registro de anticipación #wal_level = mínimo wal_level = 'hot_standby'
Escribir registro de anticipación #archive_mode = apagado Archive_Mode = ON
Escribir registro de anticipación #archive_command = " Archive_Command = 'True'
REPLICACIÓN #max_wal_senders = 0 max_wal_senders = 3
REPLICACIÓN #hot_standby = apagado hot_standby = on

Tenga en cuenta que la configuración anterior se comenta de forma predeterminada; necesitas desenchufar y Cambiar sus valores.

Puede grep los valores modificados para la verificación. Deberías obtener algo como lo siguiente:

Verificar los cambios con GREP

Ahora que la configuración está bien, iniciemos el servidor principal:

# SystemCTL Inicio PostgreSQL

Y use PSQL Para crear el usuario de la base de datos que manejará la replicación:

# SU -Postgres -Bash -4.2 $ PSQL PSQL (9.2.23) Escriba "ayuda" para obtener ayuda. Postgres =# Crear repusador de usuario REPLICACIÓN Inicio de sesión Contraseña Cifrada Password 'SecretPassword' Límite de conexión -1; Crear rol 

Tome nota de la contraseña que le da al repusnador, Lo necesitaremos en el lado de espera.

Configurar el esclavo

Dejamos el espera con el initdb paso. Trabajaremos como el post -put Usuario, que es superusador en el contexto de la base de datos. Necesitaremos una copia inicial de la base de datos primaria, y lo conseguiremos con pg_baseBackup dominio. Primero, limpiamos el directorio de datos en Standby (haga una copia de antemano si lo desea, pero es solo una base de datos vacía):

$ rm -rf/var/lib/pgsql/data/*

Ahora estamos listos para hacer una copia consistente de la primaria a Standby:

$ pg_baseBackup -h 10.10.10.100 -U repusador -d/var/lib/pgsql/data/contraseña: aviso: pg_stop_backup completo, todos los segmentos WAL requeridos han sido archivados 
Copiar

Necesitamos especificar la dirección IP del maestro después de -h, y el usuario que creamos para la replicación, en este caso repusnador. Como el primario está vacío además de este usuario que creamos, el pg_baseBackup debe completarse en segundos (dependiendo del ancho de banda de la red). Si algo sale mal, verifique la regla de HBA en primaria, la corrección de la dirección IP dada a la pg_baseBackup comando, y ese puerto 5432 en la primaria se puede acordar desde el espera (por ejemplo, con telnet).

Cuando finalice la copia de seguridad, notará que el directorio de datos está poblado en el esclavo, incluidos los archivos de configuración (recuerde, eliminamos todo de este directorio):

# ls/var/lib/pgsql/data/backup_label.antiguo PG_CLOG PG_LOG PG_SERIAL PG_SUBTRANS PG_VERSION Postmaster.opta base PG_HBA.conf PG_MULTIXACT PG_SNAPSHOTS PG_TBLSPC PG_XLOG Postmaster.PID Global PG_ident.conf pg_notify PG_STAT_TMP PG_TWOPHASE POSTGRESQL.recuperación.confusión 
Copiar

Ahora necesitamos hacer algunos ajustes a la configuración de Standby. La dirección IP habilitada para que el repusador se conecte de necesidad de ser la dirección del servidor maestro en PG_HBA.confusión:

# tail -n2/var/lib/pgsql/data/pg_hba.conf ## myconf: replication el repusente de replicación del host 10.10.10.100/32 MD5 
Copiar

Los cambios en el postgresql.confusión son los mismos que en el maestro, ya que copiamos ese archivo con la copia de seguridad también. De esta manera, ambos sistemas pueden tomar el papel de maestro o en espera con respecto a estos archivos de configuración.

En el mismo directorio, necesitamos crear un archivo de texto llamado recuperación.confusión, y agregue la siguiente configuración:

# cat/var/lib/pgsql/data/recovery.conf standby_mode = 'on' primario_conninfo = 'host = 10.10.10.100 puerto = 5432 user = repusador contraseña = secretassword 'Trigger_file ='/var/lib/pgsql/trigger_file ' 
Copiar

Tenga en cuenta que para el primario_conninfo configuración utilizamos la dirección IP del primario y la contraseña que dimos a repusnador En la base de datos maestra. El archivo de activación prácticamente podría estar legible en cualquier lugar por el post -put Usuario del sistema operativo, con cualquier nombre de archivo válido: en caso de bloqueo primario se puede crear el archivo (con tocar por ejemplo) que activará la conmutación por error en el espera, lo que significa que la base de datos comienza a aceptar operaciones de escritura también.

Si este archivo recuperación.confusión está presente, el servidor ingresará al modo de recuperación en el inicio. Tenemos todo en su lugar, para que podamos comenzar el espera y ver si todo funciona como debería ser:

# SystemCTL Inicio PostgreSQL

Debería tomar un poco más de tiempo de lo habitual recuperar el aviso. La razón es que la base de datos realiza la recuperación a un estado consistente en segundo plano. Puede ver el progreso en el archivo de registro principal de la base de datos (su nombre de archivo diferirá según el día de la semana):

$ tailf/var/lib/pgsql/data/pg_log/postgresql-thu.Registro de registro: Ingresar Registro de modo en espera: transmisión de replicación conectada correctamente al registro primario: la rehacer comienza a 0/3000020 Registro: Estado de recuperación consistente alcanzado a 0/30000E0 Registro: el sistema de la base de datos está listo para aceptar conexiones solo de lectura 
Copiar

Verificación de la configuración

Ahora que ambas bases de datos están en funcionamiento, probemos la configuración creando algunos objetos en primaria. Si todo va bien, esos objetos eventualmente deberían aparecer en espera.

Podemos crear algunos objetos simples en la primaria (que mi aspecto familiar) PSQL. Podemos crear el script SQL simple a continuación llamado muestra.sql:

-- Cree una secuencia que servirá como PK de la tabla de empleados Crear secuencia Empleados_seq Comience con 1 incremento por 1 No MaxValue MinValue 1 Cache 1; - Cree la tabla de empleados Crear empleados de la tabla (clave numérica EMP_ID Numérica Predeterminado NextVal ('Employes_seq' :: RegClass), First_Name Text Not Null, Last_Name Text No Null, Birth_Year Numérico No Null, Birth_month Numérico no nulo, nacimiento_dayof MONTHON NUMERIC NO NULL) ; - Inserte algunos datos en la tabla Insertar en los empleados (First_Name, Last_Name, Birth_year, Birth_Month, Birth_dayOfMonth) Valores ('Emily', 'James', 1983,03,20); Insertar en los empleados (First_Name, Last_Name, Birth_Year, Birth_Month, Birth_dayofmonth) Valores ('John', 'Smith', 1990,08,12); 
Copiar

Es una buena práctica mantener las modificaciones de la estructura de la base de datos en scripts (opcionalmente presionado en un repositorio de código) también, para referencia posterior. Vale la pena cuando necesite saber lo que modificó y cuándo. Ahora podemos cargar el script en la base de datos:

$ psql < sample.sql CREATE SEQUENCE NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "employees_pkey" for table "employees" CREATE TABLE INSERT 0 1 INSERT 0 1 
Copiar

Y podemos consultar la tabla que creamos, con los dos registros insertados:

postgres =# select * de los empleados; Emp_id | First_Name | Last_Name | Birth_year | Birth_month | Birth_dayofmonth --------+------------+-----------+------------+- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 filas) 
Copiar

Consultemos el espera de los datos, esperamos ser idénticos a los primarios. En espera podemos ejecutar la consulta anterior:

postgres =# select * de los empleados; Emp_id | First_Name | Last_Name | Birth_year | Birth_month | Birth_dayofmonth --------+------------+-----------+------------+- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 filas) 
Copiar

Y con eso hemos terminado, tenemos una configuración en espera en funcionamiento con un servidor primario y un en espera, sincronizando de maestro a esclavo, mientras que las consultas de solo lectura están permitidas en Slave.

Conclusión

Hay muchas maneras de crear replicación con PostgreSQL, y hay muchas sintonizaciones con respecto a la replicación de transmisión que configuramos también para hacer que la configuración sea más robusta, falla o incluso tener más miembros. Este tutorial no es aplicable a un sistema de producción: está destinado a mostrar algunas pautas generales sobre lo que está involucrando en dicha configuración.

Tenga en cuenta que la herramienta pg_baseBackup solo está disponible en PostgreSQL versión 9.1+. También puede considerar agregar un archivo de WAL válido a la configuración, pero en aras de la simplicidad, nos saltamos en este tutorial para mantener las cosas mínimas al alcanzar un par de sistemas sincronizantes que funcionan. Y finalmente una cosa más a tener en cuenta: el espera es no respaldo. Tener una copia de seguridad válida en todo momento.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Ubuntu 20.04 Instalación de PostgreSQL
  • Ubuntu 22.04 Instalación de PostgreSQL
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Descarga de Linux
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Cosas para instalar en Ubuntu 22.04