Chapter 26. Alta disponibilidad, balanceo de carga y replicación

Table of Contents

26.1. Comparación de diferentes soluciones
26.2. Servidores Standby de envío de registros (Log-Shipping)
26.2.1. Planificación
26.2.2. Funcionamiento del servidor Standby
26.2.3. Preparación del primario para los servidores Standby
26.2.4. Configuración de un servidor Standby
26.2.5. Replicación en flujo (Streaming Replication)
26.2.6. Slots de replicación (Replication Slots)
26.2.7. Replicación en cascada (Cascading Replication)
26.2.8. Replicación síncrona (Synchronous Replication)
26.2.9. Archivado continuo en el Standby
26.3. Conmutación por error (Failover)
26.4. Hot Standby (Standby Activo)
26.4.1. Resumen para el usuario
26.4.2. Manejo de conflictos de consultas
26.4.3. Resumen para el administrador
26.4.4. Referencia de parámetros de Hot Standby
26.4.5. Advertencias

Los servidores de bases de datos pueden trabajar juntos para permitir que un segundo servidor tome el control rápidamente si el servidor primario falla (alta disponibilidad), o para permitir que varias computadoras sirvan los mismos datos (balanceo de carga). Idealmente, los servidores de bases de datos deberían trabajar juntos de manera transparente. Los servidores web que sirven páginas web estáticas se pueden combinar con bastante facilidad simplemente balanceando la carga de las solicitudes web entre varias máquinas. De hecho, los servidores de bases de datos de solo lectura también se pueden combinar con relativa facilidad. Desafortunadamente, la mayoría de los servidores de bases de datos tienen una mezcla de solicitudes de lectura/escritura, y los servidores de lectura/escritura son mucho más difíciles de combinar. Esto se debe a que, aunque los datos de solo lectura deben colocarse en cada servidor solo una vez, una escritura en cualquier servidor debe propagarse a todos los servidores para que las futuras solicitudes de lectura a esos servidores devuelvan resultados consistentes.

Este problema de sincronización es la dificultad fundamental para que los servidores trabajen juntos. Debido a que no existe una única solución que elimine el impacto del problema de sincronización para todos los casos de uso, existen múltiples soluciones. Cada solución aborda este problema de una manera diferente y minimiza su impacto para una carga de trabajo específica.

Algunas soluciones abordan la sincronización permitiendo que solo un servidor modifique los datos. Los servidores que pueden modificar datos se denominan servidores de lectura/escritura, maestros (master) o primarios (primary). Los servidores que siguen los cambios en el primario se denominan servidores standby o secundarios (secondary). Un servidor standby al que no se pueden realizar conexiones hasta que sea promovido a servidor primario se denomina servidor warm standby (standby tibio), y uno que puede aceptar conexiones y servir consultas de solo lectura se denomina servidor hot standby (standby activo).

Algunas soluciones son síncronas, lo que significa que una transacción que modifica datos no se considera comprometida hasta que todos los servidores hayan confirmado la transacción. Esto garantiza que una conmutación por error (failover) no perderá ningún dato y que todos los servidores con balanceo de carga devolverán resultados consistentes sin importar a qué servidor se consulte. Por el contrario, las soluciones asíncronas permiten cierto retraso entre el momento de una confirmación (commit) y su propagación a los otros servidores, abriendo la posibilidad de que algunas transacciones se pierdan en el cambio a un servidor de respaldo, y que los servidores con balanceo de carga puedan devolver resultados ligeramente obsoletos. La comunicación asíncrona se utiliza cuando la síncrona sería demasiado lenta.

Las soluciones también se pueden categorizar por su granularidad. Algunas soluciones pueden tratar solo con un servidor de base de datos completo, mientras que otras permiten el control a nivel de tabla o de base de datos.

El rendimiento debe considerarse en cualquier elección. Por lo general, existe un compromiso entre la funcionalidad y el rendimiento. Por ejemplo, una solución completamente síncrona sobre una red lenta podría reducir el rendimiento a más de la mitad, mientras que una asíncrona podría tener un impacto mínimo en el rendimiento.

El resto de esta sección describe varias soluciones de conmutación por error, replicación y balanceo de carga.