Quórum: cómo un testigo afecta a la disponibilidad de la base de datos
Siempre que se establece un testigo para una sesión de creación de reflejo de la base de datos, es necesario disponer de quórum. Quórum es una relación que existe cuando dos o más instancias de servidor en una sesión de creación de reflejo de la base de datos están conectadas entre sí. Normalmente, el quórum implica a tres instancias de servidor interconectadas. Cuando se establece un testigo, se requiere quórum para que la base de datos esté disponible. El quórum se ha diseñado para sesiones en modo de alta seguridad con conmutación automática por error y garantiza que una base de datos pertenezca a un solo asociado cada vez.
Si una instancia concreta de servidor se desconecta de una sesión de creación de reflejo, esa instancia pierde el quórum. Si no hay instancias de servidor conectadas, la sesión pierde el quórum y la base de datos no está disponible. Hay tres tipos de quórum posibles:
Un quórum completo incluye tanto a asociados como al testigo.
Un quórum entre testigo y asociado consta del testigo y uno de los asociados.
Un quórum entre asociados consta de los dos asociados.
En la siguiente ilustración se muestran estos tipos de quórum.
Mientras el servidor principal actual tenga quórum, este servidor posee la función de servidor principal y continúa dando servicio a la base de datos, salvo que el propietario de la base de datos realice una conmutación por error manual. Si el servidor principal pierde el quórum, deja de ofrecer la base de datos. La conmutación automática por error puede ocurrir solamente si la base de datos principal pierde el quórum, lo que garantiza que ya no da servicio a la base de datos.
Una instancia de servidor desconectada guarda su función más reciente en la sesión. Normalmente, las instancias de servidor desconectadas se vuelven a conectar a la sesión cuando se reinician y vuelven a obtener el quórum.
Importante |
---|
Sólo debe configurar el testigo cuando vaya a utilizar el modo de alta seguridad con conmutación automática por error. En el modo de alto rendimiento, en el que nunca se requiere un testigo, es recomendable establecer la propiedad WITNESS en OFF. Para obtener información acerca de cómo afecta un testigo a la disponibilidad de la base de datos en una sesión en modo de alto rendimiento, vea Operación asincrónica de creación de reflejo de la base de datos (Modo de alto rendimiento). |
Quórum en sesiones en modo de alta seguridad
En el modo de alta seguridad, el quórum permite la conmutación automática por error proporcionando un contexto en el que las instancias de servidor con quórum arbitran qué asociado posee la función de servidor principal. El servidor principal proporciona servicio a la base de datos si tiene el quórum. Si el servidor principal pierde el quórum cuando el servidor reflejado sincronizado y el testigo lo mantienen, se produce la conmutación automática por error.
Los escenarios de quórum para el modo de alta seguridad son los siguientes:
Quórum completo, que está formado por ambos asociados y el testigo.
Normalmente, las tres instancias de servidor participan en un quórum tripartito llamado quórum completo. En un quórum completo, los servidores principal y reflejado continúan realizando sus respectivas funciones (salvo que se produzca la conmutación por error manual).
Un quórum entre testigo y asociado está formado por el testigo y uno de los asociados.
Si la conexión de red entre los asociados se pierde como consecuencia de la pérdida de uno de los asociados, pueden darse dos casos:
El servidor reflejado se pierde y el servidor principal y el testigo conservan el quórum.
En este caso, el principal establece su base de datos en desconectada (DISCONNECTED) y se ejecuta con reflejo en el estado suspendido (SUSPENDED). Esto se denomina ejecución expuesta, ya que la base de datos no se está reflejando en ese momento. Cuando el servidor reflejado se reincorpora a la sesión, vuelve a tener quórum como servidor reflejado y comienza una nueva sincronización de su copia de la base de datos.
El servidor principal se pierde y el testigo y el servidor reflejado conservan el quórum.
En este caso, se produce la conmutación automática por error. Para obtener más información, vea Conmutación automática por error.
La conexión de red entre los asociados de la conmutación por error raramente se pierde mientras ambos asociados permanezcan conectados al testigo. En este evento, existen dos quórum independientes entre testigo y asociado, con el testigo como enlace. El testigo informa al servidor reflejado de que el servidor principal se encuentra aún conectado. En consecuencia, no se produce la conmutación automática por error. En su lugar, el servidor reflejado mantiene la función de reflejo y espera para volver a conectarse al servidor principal. Si la cola de puesta al día contiene entradas de registro en este punto, el servidor reflejado continúa poniendo al día la base de datos reflejada. Al volver a conectarse, el servidor reflejado sincronizará de nuevo la base de datos reflejada.
Un quórum entre asociados está formado por los dos asociados.
Mientras los asociados conserven el quórum, la base de datos continúa en el estado sincronizado (SYNCHRONIZED) y sigue siendo posible la conmutación por error manual. Sin el testigo, no puede tener lugar la conmutación automática por error, pero, cuando el testigo vuelve a obtener el quórum, la sesión continúa su funcionamiento normal y se vuelve a admitir la conmutación automática por error.
La sesión pierde el quórum.
Si todas las instancias de servidor se desconectan, se dice que la sesión ha perdido el quórum. Al volverse a conectarse entre sí las instancias de servidor, vuelven a obtener el quórum unas con otras.
Si el servidor principal se vuelva a conectar a cualquiera de las otras dos instancias de servidor, la base de datos pasa a estar disponible.
Si el servidor principal sigue desconectado, pero el servidor reflejado y el testigo se vuelven a conectar entre sí, no puede tener lugar la conmutación automática por error, ya que podría producirse una perdida de datos. Por ello, la base de datos sigue sin estar disponible hasta que el servidor principal vuelva a unirse a la sesión.
Una vez que se han vuelto a conectar las tres instancias de servidor, se vuelve a obtener el quórum completo y la sesión reanuda su funcionamiento normal.
Importante |
---|
Cuando una sesión tiene un quórum entre asociados, si uno de ellos pierde el quórum, la sesión lo pierde. No obstante, si cree que el testigo va a permanecer desconectado durante bastante tiempo, se recomienda eliminar temporalmente el testigo de la sesión. La eliminación del testigo elimina el requisito del quórum. Así, si el servidor reflejado se desconecta, el servidor principal puede continuar sirviendo a la base de datos. Para obtener información sobre cómo agregar o quitar un testigo, vea Testigo de creación de reflejo de la base de datos. |
Cómo afecta el quórum a la disponibilidad de la base de datos
En la siguiente ilustración se muestra cómo cooperan el testigo y los asociados para asegurarse de que, en un momento dado, un solo asociado es el propietario de la función de servidor principal y sólo el servidor principal actual puede poner en línea su base de datos. Ambos escenarios empiezan con un quórum completo, Partner_A en la función principal y Partner_B en la función de reflejo.
En el escenario 1 se muestra cómo, después de un error del servidor principal original (Partner_A), el servidor reflejado y el testigo se ponen de acuerdo en que el principal, Partner_A, ya no está disponible y forman un quórum. A continuación, el servidor reflejado, Partner_B, asume la función principal. Se da la conmutación automática por error y Partner_B pone en línea su copia de la base de datos. A continuación, Partner_B se bloquea y la base de datos se queda sin conexión. Más adelante, el antiguo servidor principal, Partner_A, se vuelve a conectar al testigo recuperando el quórum, pero al comunicarse con el testigo, Partner_A detecta que no puede poner en línea su copia de la base de datos, ya que ahora Partner_B posee la función principal. Cuando Partner_B se vuelve a unir a la sesión, vuelve a poner en línea la base de datos.
En el escenario 2, el testigo pierde el quórum, mientras que los asociados, Partner_A y Partner_B, conservan el quórum entre sí y la base de datos permanece en línea. A continuación, los asociados pierden también su quórum y la base de datos se queda sin conexión. Más adelante, el servidor principal, Partner_A, se vuelve a conectar al testigo y recupera el quórum. El testigo confirma que Partner_A sigue siendo el propietario de la función principal y Partner_A vuelve a poner la base de datos en línea.
Vea también