sql >> Base de Datos >  >> RDS >> PostgreSQL

Una descripción general de la replicación de nivel de volumen para PostgreSQL mediante DRBD

La replicación es el intercambio de datos transaccionales entre varios servidores para garantizar la coherencia entre los nodos de bases de datos redundantes. Un maestro tomará inserciones o actualizaciones y las aplicará a su conjunto de datos, mientras que los esclavos modificarán sus datos de acuerdo con los cambios realizados en el conjunto de datos principal. El maestro se conoce comúnmente como primario y registra los cambios realizados en un registro de escritura anticipada (WAL). Por otro lado, los esclavos se conocen como secundarios y replican sus datos de los registros REDO, en este caso el WAL.

Hay al menos 3 enfoques de replicación en PostgreSQL:

Replicación integrada o replicación de transmisión.

En este enfoque, los datos se replican desde el nodo principal al nodo secundario. Sin embargo, viene con una serie de contratiempos que son:

  • Dificultades para introducir una nueva secundaria. Requerirá que replique todo el estado, lo que puede requerir muchos recursos.
  • Falta de supervisión y conmutación por error integradas. Un secundario tiene que ser promovido a un primario en caso de falla de este último. A menudo, esta promoción puede generar inconsistencias en los datos durante la ausencia del principal.

Reconstrucción desde WAL

Este enfoque de alguna manera emplea el enfoque de replicación de transmisión ya que los secundarios se reconstruyen a partir de una copia de seguridad realizada por el principal. El principal realiza una copia de seguridad completa de la base de datos después de cada día, además de una copia de seguridad incremental cada 60 segundos. La ventaja de este enfoque es que no se somete a carga adicional al primario hasta que los secundarios están lo suficientemente cerca del primario como para comenzar a transmitir el registro de escritura anticipada (WAL) para alcanzarlo. Con este enfoque, puede agregar o eliminar réplicas sin afectar el rendimiento de su base de datos PostgreSQL.

Replicación de nivel de volumen para PostgreSQL (Disk Mirroring)

Este es un enfoque genérico que no solo se aplica a PostgreSQL, sino también a todas las bases de datos relacionales. Usaremos Distributed Replicated Block Device (DRBD), un sistema de almacenamiento replicado distribuido para Linux. Está destinado a operar reflejando los contenidos almacenados en el almacenamiento de un servidor a otro. A continuación se muestra una ilustración simple de la estructura.

DRBD puede considerarse como una abstracción del dispositivo de disco que aloja la base de datos PostgreSQL, pero el sistema operativo nunca sabrá que sus datos también se encuentran en otro servidor. Con este enfoque, no solo puede compartir los datos, sino también el sistema de archivos en más de 1 servidor. Por lo tanto, las escrituras en DRBD se distribuyen entre todos los servidores, por lo que cada servidor escribirá información en un disco duro físico local (dispositivo de bloque). Cuando se aplica una operación de escritura al principal, se registra en el DRBD y luego se distribuye a los servidores DRBD secundarios. Por otro lado, si el secundario recibe las operaciones de escritura a través del DRBD, luego se escriben en el dispositivo físico local. En caso de soporte de conmutación por error, DRBD proporciona alta disponibilidad de datos ya que la información se comparte entre un nodo primario y muchos secundarios que se alinean sincrónicamente a nivel de bloque.

La configuración de DRBD requeriría un recurso adicional conocido como Heartbeat, del que hablaremos en otro artículo, para mejorar la compatibilidad con la conmutación por error automática. Básicamente, el paquete administra la interfaz en varios servidores y configura automáticamente uno de los servidores secundarios como principal en caso de falla.

Instalación y Configuración del DRBD

El método preferido para instalar DRBD es usar los paquetes de instalación binarios prediseñados. Asegúrese de que la versión del kernel de los paquetes coincida con su kernel actual activo.

Los archivos de configuración para todos los nodos primarios o secundarios deben ser idénticos. Además, si es necesario que actualice la versión de su kernel, asegúrese de que el kernel-module-drdb correspondiente esté disponible para su nueva versión del kernel.

Configuración de DRBD para el nodo principal

Este es el primer paso en el que deberá crear un dispositivo de bloque DRBD y un sistema de archivos con el que pueda almacenar sus datos. El archivo de configuración se puede encontrar en /etc/drbd.conf. El archivo define una serie de parámetros para la configuración de DRBD que incluyen:tamaños de bloque, definición de información de seguridad de los dispositivos DRBD que desea crear y frecuencia de actualizaciones. Las configuraciones pueden limitarse a ser globales o estar vinculadas a un determinado recurso. Los pasos involucrados son:

  1. Tasa de sincronización que define la tasa a la que los dispositivos se vinculan sincrónicamente en segundo plano después de un reemplazo de disco, falla o configuración inicial. Esto se puede configurar editando el parámetro de frecuencia en el bloque sincronizador:

    syncer{
    rate 15M
    }
  2. Configuración de autenticación para garantizar que solo los hosts con el mismo secreto compartido puedan unirse al grupo de nodos DRBD. La contraseña es un mecanismo de intercambio de hash compatible con DRBD.

    cram-hmac-alg “sha1”
    shared-secret “hash-password-string”
  3. Configuración de la información del host. La información del nodo, como el host, se puede encontrar en el archivo drbd.conf de cada uno de los nodos. Algunos de los parámetros a configurar son:

    • Dirección:dirección IP y número de puerto del host que contiene el dispositivo DRBD.
    • Dispositivo:la ruta del dispositivo de bloque lógico creado por el DRBD.
    • Disco:se refiere al dispositivo de bloque que almacena los datos.
    • Metadisco:Almacena los metadatos del dispositivo DRBD. Su tamaño puede ser de hasta 128 MB. Puede configurarlo para que sea el disco interno, de modo que el DRBD use un dispositivo de bloque físico para almacenar esta información en las últimas secciones del disco.

    Una configuración simple para el primario:

    on drbd-one {
    device /dev/drbd0;
    disk /dev/sdd1;
    address 192.168.103.40:8080;
    meta-disk internal;
    }

    La configuración debe repetirse con los secundarios con la dirección IP que coincida con su host correspondiente.

    on drbd-two {
    device /dev/drbd0;
    disk /dev/sdd1;
    address 192.168.103.41:8080;
    meta-disk internal;
    }
  4. Creando los metadatos para los dispositivos usando este comando:

    $ drbdadm create create-md all
    Este proceso es obligatorio antes de iniciar el nodo principal.
  5. Inicie el DRBD con este comando:
    $ /etc/init.d/drbd start
    Esto permite que DRBD inicie, inicialice y cree los dispositivos definidos por DRBD.
  6. Marque el nuevo dispositivo como principal e inicialice el dispositivo con este comando:
    $ drbdadm -- --overwrite-data-of-peer primary all
    Cree un sistema de archivos en el dispositivo de bloques para hacer utilizable un dispositivo de bloques estándar creado por el DRBD.
  7. Haga que el primario esté listo para usar montando el sistema de archivos. Estos comandos deberían prepararlo para usted:
    $ mkdir /mnt/drbd
    $ mount /dev/drbd0 /mnt/drbd
    $ echo “DRBD Device” > /mnt/drbd/example_file

Configuración de DRBD para el nodo secundario

Puede usar los mismos pasos anteriores excepto para crear el sistema de archivos en un nodo secundario, ya que la información se transfiere automáticamente desde el nodo principal.

  1. Copie el archivo /etc/drbd.conf del nodo principal al nodo secundario. Este archivo contiene la información y la configuración necesarias.

  2. En el dispositivo de disco subyacente, cree los metadatos DRBD usando el comando:

    $ drbdadm create-md all
  3. Inicie el DRBD con el comando:

    $ /etc/init.d/drbd start
    DRBD comenzará a copiar datos del nodo principal al nodo secundario y el tiempo depende del tamaño de los datos que se transferirán. Si ve el archivo /proc/drbd, puede ver el progreso.
    $ cat /proc/drbd
    version: 8.0.0 (api:80/proto:80)
      SVN Revision: 2947 build by [email protected], 2018-08-24 16:43:05
       0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
           ns:252284 nr:0 dw:0 dr:257280 al:0 bm:15 lo:0 pe:7 ua:157 ap:0
           [==>.................] sync'ed: 12.3% (1845088/2097152)K
           finish: 0:06:06 speed: 4,972 (4,580) K/sec
           resync: used:1/31 hits:15901 misses:16 starving:0 dirty:0 changed:16
           act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
  4. Supervise la sincronización utilizando el comando watch a intervalos específicos

    $ watch -n 10 ‘cat /proc/drbd‘

Gestión de la instalación de DRBD

Para realizar un seguimiento del estado del dispositivo DRBD, utilizamos /proc/drbd.

Puede configurar el estado de todos los dispositivos locales para que sean primarios usando el comando

$ drbdadm primary all

Hacer que un dispositivo principal sea secundario

$ drbdadm secondary all

Para desconectar nodos DRBD

$ drbdadm disconnect all

Vuelva a conectar los nodos DRBD

$ drbd connect all
Descargue el documento técnico hoy Gestión y automatización de PostgreSQL con ClusterControl Obtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar PostgreSQLDescargar el documento técnico

Configuración de PostgreSQL para DRBD

Esto implica seleccionar un dispositivo para el cual PostgreSQL almacenará datos. Para una nueva instalación, puede seleccionar instalar PostgreSQL por completo en el dispositivo DRBD o en un directorio de datos que se ubicará en el nuevo sistema de archivos y debe estar en el nodo principal. Esto se debe a que el nodo principal es el único al que se le permite montar un sistema de archivos de dispositivo DRBD como lectura/escritura. Los archivos de datos de Postgres a menudo se archivan en /var/lib/pgsql, mientras que los archivos de configuración se almacenan en /etc/sysconfig/pgsql.

Configuración de PostgreSQL para usar el nuevo dispositivo DRBD

  1. Si tiene PostgreSQL en ejecución, deténgalo con este comando:

    $  /etc/init.d/postgresql -9.0
  2. Actualice el dispositivo DRBD con los archivos de configuración usando los comandos:

    $ mkdir /mnt/drbd/pgsql/sysconfig
    $ cp /etc/sysconfig/pgsql/* /mnt/drbd/pgsql/sysconfig
  3. Actualice DRBD con el directorio de datos de PostgreSQL y los archivos del sistema usando:

    $ cp -pR /var/lib/pgsql /mnt/drbd/pgsql/data
  4. Cree un enlace simbólico al nuevo directorio de configuración en el sistema de archivos del dispositivo DRBD desde /etc/sysconfig/pgsql usando el comando:

    $ ln -s /mnt/drbd/pgsql/sysconfig  /etc/sysconfig/pgsql
  5. Elimine el directorio /var/lib/pgsql, desmonte /mnt/drbd/pgsql y monte el dispositivo drbd en /var/lib/pgsql.

  6. Inicie PostgreSQL con el comando:

    $ /etc/init.d/postgresql -9.0 start

Los datos de PostgreSQL ahora deberían estar presentes en el sistema de archivos que se ejecuta en su dispositivo DRBD en el dispositivo configurado. El contenido de las bases de datos también se copia en el nodo DRBD secundario, pero no se puede acceder a él porque el dispositivo DRBD que funciona en el nodo secundario puede estar ausente.

Características importantes con el enfoque DRBD

  • Los parámetros de ajuste son altamente personalizables.
  • Las implementaciones existentes se pueden configurar fácilmente con DRBD sin pérdida de datos.
  • Las solicitudes de lectura están igualmente equilibradas
  • La autenticación de secreto compartido protege la configuración y sus datos.