Consideraciones para la instalación de un failover cluster distribuido en Windows Server 2008


1       Introducción

2       Clústeres mono-sitio y multi-sitio (distribuido)

2.1         Clústeres mono-sitio (no distribuidos)

2.2         Clústeres multi-sitio (distribuidos)

3       El quórum en el failover clúster de Windows Server 2008

3.1         Mayoría Vs disco quórum

3.2         Tipos de quórum en Windows Server 2008

3.2.1      Quórum de mayoría de nodos

3.2.2      Quórum de mayoría de nodos y testigo

3.2.2.1       Disco testigo

3.2.2.2       Carpeta compartida testigo

3.2.3      Clúster sin mayoría de nodos: disco quórum

3.3         Recomendaciones de tipo de quórum para clústeres distribuidos

3.3.1      Uso de la mayoría de nodo y carpeta compartida testigo en clústeres distribuidos

3.3.1.1       Uso de la mayoría de nodo en un clúster distribuido

4       Almacenamiento en los clústeres distribuidos

4.1         Replicación

4.1.1      Niveles de replicación

4.1.2      Tipos de replicación

4.1.2.1       Replicación síncrona

4.1.2.2       Replicación asíncrona

4.1.3      Recomendaciones sobre replicación

5       Redes en clústeres distribuidos

5.1         Configuración de Heartbeat y DNS

5.2         Hyper-V y el direccionamiento de máquinas virtuales

1     Introducción

El presente documento tiene por finalidad exponer la arquitectura, requerimientos y alternativas para la creación de clústeres distribuidos, así como exponer unas recomendaciones finales.


2     Clústeres mono-sitio y multi-sitio (distribuido)

Podemos establecer dos tipos de clúster en función a su arquitectura:

2.1   Clústeres mono-sitio (no distribuidos)

Este tipo de clústeres se caracterizan por estar compuestos de n-nodos que acceden a uno o más almacenamientos compartidos (SANs). Todos los nodos del clúster acceden a los mismos almacenamientos compartidos, permitiendo esto que la información obtenida/generada por las aplicaciones y/o servicios del clúster sea la misma para todos los nodos. Vemos en el gráfico un clúster mono-sitio compuesto por 2 nodos que acceden a una cabina.

mono-sitio-tb.png

2.2   Clústeres multi-sitio (distribuidos)

Este tipo de clústeres se caracteriza por estar compuesto de nodos ubicados en más de una localización o sitio. En cada uno de los sitios hay uno o más almacenamientos compartidos, accediendo todos los nodos del sitio a los mismos almacenamientos compartidos, pero no accediendo a los almacenamientos compartidos de los otros sitios. Para que la información sea la misma en todos los sitios, los almacenamientos replican entre ellos. En el gráfico vemos un clúster multi-sitio compuesto de 4 nodos distribuidos en dos sitios (dos nodos por sitio) conectando los nodos de cada sitio a la cabina de su sitio, replicando las cabinas entre ellas,  y un tercer sitio con una carpeta compartida testigo (veremos qué significa esto más adelante).

multi-sitio-tb.png

3     El quórum en el failover clúster de Windows Server 2008

Windows Server 2008 presenta un nuevo modelo de quórum en su implantación de failover clúster diferente al de las versiones anteriores, basado en mayoría en lugar de en un disco de quórum. Veremos el concepto de mayoría frente al de disco de quórum y cada uno de los tipos quórum que se pueden establecer.

3.1   Mayoría Vs disco quórum

El disco de quórum tradicional almacenaba la información del cluster y era accedido por todos los nodos del cluster, lo que tiene la ventaja de que el cluster puede seguir funcionando con un único nodo, independientemente del número de nodos que lo componen (ventaja relativa, pues para que esto sea de verdad operacional, es necesario que todos los nodos del cluster sean capaces de albergar todos los servicios y aplicaciones de cada uno de los nodos, lo que implica multiplicar la potencia de los servidores por el número de nodos, disparándose el coste, o asumir que no todos los servicios y aplicaciones se balancearán en el caso de quedar un solo nodo en funcionamiento). La principal desventaja de este modelo de cluster es que en caso de perderse el disco de quórum se pierde el cluster, aunque funcionen sin problemas todos los nodos que lo conforman.

Frente a este enfoque del disco de quórum se desarrolló un quórum que residiera no en un disco compartido, si no que existiera una copia completa en cada uno de los nodos y fuese replicada entre ellos, para así evitar el punto de ruptura que supone el disco de quórum tradicional.

Este enfoque requiere tener en cuenta el efecto isla. Este efecto consiste en que un clúster, al producirse un problema de red u otra clase, podría quedar dividido en dos o más grupos (islas) de nodos capaces de comunicarse entre sí. En esta situación, como máximo debe haber uno de los grupos de nodos que quede como clúster, que sea el encargado de dar los servicios y aplicaciones, y los otros deberían quedar como en fallo, pues si no los datos que se generasen en los servicios y aplicaciones no serían los mismos para todos los nodos del cluster, si no que habría un conjunto de datos diferente para cada uno de los grupos de nodos, lo cual es un comportamiento erróneo en un clúster ¿Qué grupo de nodos es el que debe considerarse como clúster y qué grupos los que no? Para poder efectuar esa decisión, se desarrolló el criterio de mayoría, por el cual para que un grupo de nodos esté operativo se establece un sistema de votación en el que cada uno de los nodos tiene un voto. Para que no se produzca el indeseado efecto isla, aquel grupo de nodos que reúna la mayoría de votos será el grupo que provea los servicios y aplicaciones del clúster y los grupos que no la reúnan no proveerán dichos servicios.

3.2   Tipos de quórum en Windows Server 2008

Existen cuatro tipos de quórum en los clústeres de tolerancia a fallos de Windows Server 2008:

3.2.1  Quórum de mayoría de nodos

Para que el clúster se considere que esté operativo se establece un sistema de votación en el que cada uno de los nodos tiene un voto; para que el clúster siga en funcionamiento, es necesario que la mitad más uno de los votos sean emitidos (es decir, que la mitad más uno de los nodos estén operativos). La mitad se calcula  redondeando hacia abajo, de forma que hay una sensible diferencia entre que el número de nodos sea impar o par. En la siguiente tabla se ve el número de nodos, cuantos votos implican y cuantos nodos pueden estar caídos y sin que el cluster deje de funcionar:

Número de nodos

Número de votos

Nodos que pueden caer

1

1

0

2

2

0

3

3

1

4

4

1

5

5

2

6

6

2

7

7

3

8

8

3

9

9

4

10

10

4

11

11

5

12

12

5

13

13

6

14

14

6

15

15

7

16

16

7

Si observamos la anterior tabla, este mecanismo beneficia los clústeres de nodos impares, pues permiten tener caídos tantos nodos como el clúster conformado por el número par inmediatamente superior a él (3 nodos permiten la caída de uno, 4 nodos permiten la caída de uno); además, en el caso de un clúster de dos nodos, no se puede caer ninguno de ellos.  Por ello está especialmente indicado para clústeres de nodos impares y para clústeres distribuidos. Este tipo de clústeres no se recomiendan para clústeres de 2 nodos o clústeres con un número par de nodos.

3.2.2  Quórum de mayoría de nodos y testigo

Para solventar el anterior comportamiento en clústeres conformados por un número par de nodos, se puede configurar un testigo, que es un disco o una carpeta compartida, que tiene un voto, de manera que permita obtener un número impar de votos a los clústeres con nodos pares, y así optimizar el número de nodos que pueden estar caídos. Veamos la tabla de número de nodos, votos y nodos que pueden caer:

Número de nodos

Número de votos

Nodos que pueden caer

1

2

0

2

3

1

3

4

1

4

5

2

5

6

2

6

7

3

7

8

3

8

9

4

9

10

4

10

11

5

11

12

5

12

13

6

13

14

6

14

15

7

15

16

7

16

17

8

De esta manera un clúster de nodos pares permite tantos nodos caídos como el cluster de nodos impares inmediatamente superior (6 nodos permiten 3 caídos, 7 nodos permiten 3 caídos); además de esto, es factible que un clúster de dos nodos pueda seguir funcionando con uno caído.

Hay dos tipos de testigos:

3.2.2.1            Disco testigo

El disco testigo consiste en un almacenamiento externo a los nodos (una LUN en cabina presentada a todos los nodos, ya que Windows Server 2008 no permite el uso de SCSI compartido), al que acceden todos los nodos, en el que se guarda una copia del quórum. Se puede confundir el disco testigo con el tradicional disco de quórum, pero hay una importantísima diferencia: si cae el disco de quórum, cae el cluster; si cae el disco testigo no cae el cluster si hay la mitad más uno de nodos en funcionamiento. Por todo ello, este tipo clúster está indicado para clústeres formados por 2 nodos o por un número par de nodos. No está indicado para los clústeres de un solo nodo o los distribuidos, al requerir el acceso a una misma LUN por parte de todos los nodos, cosa que no es posible, al encontrarse los nodos del clúster distribuidos en diferentes sitios y accediendo a diferentes almacenamientos.

3.2.2.2            Carpeta compartida testigo

El concepto es el mismo que el del disco de testigo (la carpeta compartida testigo tiene un voto), con la salvedad de que la carpeta compartida testigo no almacena una copia del quórum, si no que almacena qué nodos son los que tienen la copia más actualizada del quórum. Esto provoca que sólo emita su voto a favor si ve presente al menos a uno de los nodos con la última versión del quórum. El ejemplo más típico de este problema es el siguiente:

  1. Tenemos un clúster de dos nodos (A y B), cada uno ejecutándose y sincronizados.
  2. Se apaga el nodo B.
  3. Realizamos cambios al clúster en el nodo A. Estos cambios están tan solo en la copia del quórum del nodo A, al estar el B apagado y, por tanto, no haber replicado.
  4. Se apaga el nodo A.
  5. Se enciende el nodo B. Como el nodo B no tiene una copia del quórum actualizada, y la carpeta compartida testigo ve que la copia actualizada está en el nodo A y no en el nodo B, la carpeta compartida testigo evita que el nodo B forme el clúster. No funcionará el clúster hasta que vuelva a funcionar el nodo A.

Este tipo de clúster está indicado para todos los tipos de clústeres (pares o impares), excepto los de un solo nodo. En aquellos casos en los que se puede utilizar el disco testigo, es preferible éste, siendo la ventaja de la carpeta compartida testigo la de abaratar la solución en clústeres no distribuidos, al ahorrarse espacio en cabina, pues la carpeta compartida puede estar en cualquier equipo que se desee e incluso ese equipo contener las carpetas compartidas testigos de varios clústeres.

También está indicado en clústeres distribuidos (de hecho es la mejor opción en el caso de clústeres distribuidos), y siendo ubicada en otra localización distinta a la de los nodos.

No está indicado en clústeres de un solo nodo.

3.2.3  Clúster sin mayoría de nodos: disco quórum

Es el tipo de clúster “tradicional”. Como vimos anteriormente, la configuración del clúster es almacenada en el disco de quórum, lo que permite que se puedan caer n – 1 nodos del clúster y seguir éste funcionando. Lo malo es que no permite la caída del disco de quórum, siendo un punto de rotura único. En la siguiente tabla vemos la tolerancia del este tipo de quórum, según los nodos, los nodos que pueden estar caídos y los fallos de disco de quórum permitidos (ninguno):

Número de nodos

Nodos que pueden caer

Fallos tolerados del disco de quórum

1

0

0

2

1

0

...

...

...

16

15

0

...

...

...

n

n-1

0

3.3   Recomendaciones de tipo de quórum para clústeres distribuidos

La tabla siguiente proporciona las recomendaciones de Microsoft, para el tipo de quórum en clústeres distribuidos: 

Recomendado

No Recomendado

Mayoría de nodos

X

 

Mayoría de nodos y carpeta
compartida testigo

X
(la mejor)

 

Sin mayoría: Disk Only

 

X

Muchas de las ventajas de los clústeres distribuidos derivan en gran parte del hecho de que trabajan de una forma algo diferente a los clústeres no distribuidos (mono-sitio). La separación en la distancia de los nodos de un clúster afectará las opciones del modelo de quórum elegido y a la configuración de almacenamiento, red y datos en el clúster. Para algunos usos de negocio, incluso un acontecimiento tan poco probable como fuegos, inundaciones, terremotos, etc., pueden plantear una cantidad intolerable de riesgo a las operaciones de negocio. Para las cargas de trabajo verdaderamente esenciales, la distancia puede proporcionar el único remedio contra una catástrofe. El servidor 2008 de Windows permite crear clústeres distribuidos en distancias ilimitadas, haciendo la solución más resistente a los desastres locales, regionales o aún nacionales.

Con el servidor 2008 de Windows, se puede desplegar un clúster distribuido para automatizar el balanceo de servicios y aplicaciones en las siguientes situaciones:

Un clúster distribuido de Windows Server 2008 tiene los siguientes atributos:

3.3.1  Uso de la mayoría de nodo y carpeta compartida testigo en clústeres distribuidos

En este modo de quórum, todos los nodos y una carpeta compartida testigo tienen un voto para determinar la mayoría. Esto ayuda a eliminar el punto de ruptura del viejo modelo que suponía el disco de quórum. Esto hace que la mayoría de nodo y carpeta compartida testigo está especialmente indicado para los clústeres distribuidos: un solo servidor de archivos puede servir como testigo a múltiples clústeres (usando cada uno su propia carpeta compartida testigo).

multi-sitio-tb.png

Supongamos que tenemos dos sitios físicos, sitio A y sitio B, cada uno con dos nodos. Tenemos además una carpeta compartida testigo en un tercer sitio físico. En total se disponen de cinco votos, cuatro correspondientes a los nodos y el quinto a la carpeta compartida testigo. Veamos posibilidades:

Si la carpeta compartida testigo está ubicada en uno de los sitios de los nodos, el comportamiento no será el correcto, pues si hay una caída de la comunicación entre los dos sitios, si suponemos que la carpeta compartida testigo está ubicada en el sitio A, este sitio será considerado como el sitio que provee los servicios y aplicaciones del clúster; si el sitio que está incomunicado es, precisamente el A, el clúster no estará suministrando los servicios y aplicaciones, pues está incomunicado y es el único capaz de contactar con la carpeta compartida testigo, así que se considera como válido para suministrar los servicios y aplicaciones; mientras tanto, el nodo del sitio B no será capaz de suministrar estos servicios y aplicaciones, al no poder contactar ni con el otro nodo no con la carpeta compartida testigo, y sin embargo es el nodo que debe de proveer los servicios y carpetas; será, por tanto, necesario intervenir en el sitio B para eliminar el control de no mayoría (el procedimiento lo encontramos en la sección “Troubleshooting: how to force a cluster to start without quorum” de la guía paso a paso “Failover Cluster Step-by-Step Guide: Configuring the Quorum in a Failover Cluster”)

Como podemos ver, el uso del modo de quórum de carpeta compartida testigo permite la continuidad del clúster, en el caso de la caída completa de uno de los sitios.

3.3.1.1            Uso de la mayoría de nodo en un clúster distribuido

Si el uso de una carpeta compartida testigo no es posible, se puede aún así utilizar el modelo de quórum por mayoría de nodo.

Supongamos que tenemos un clúster distribuido de cinco nodos, tres de los cuales están ubicados en el sitio A y dos en el sitio B. Si hay una caída de la comunicación entre los dos sitios, en el sitio A todos los nodos del sitio se pueden ver entre sí, suman tres votos y por tanto consideran que ellos son el clúster válido. Los nodos en el sitio B pueden comunicarse entre sí, pero, al sumar dos votos, no consiguen la mayoría, y dejan de prestar servicio. Si el sitio que ha perdido los enlaces fuese el A, sería necesario intervenir en el sitio B para eliminar el control de no mayoría (el procedimiento lo encontramos en la sección “Troubleshooting: how to force a cluster to start without quorum” de la guía paso a paso “Failover Cluster Step-by-Step Guide: Configuring the Quorum in a Failover Cluster”). Esta configuración es menos tolerante que la de mayoría de nodo y carpeta compartida testigo en un tercer sitio, ya que la caída del sitio primario causa la caída completa del clúster. Para solventar este problema, en un clúster con mayoría de nodo, sería necesario un tercer sitio en el que situar al menos un nodo, de manera que para obtener la mayoría, fueran necesarios los votos de los nodos de al menos dos sitios; en el ejemplo anterior podríamos situar 2 nodos en el sitio A, otros dos en el B y un tercer nodo en el sitio C; no obstante, esto requiere el tener una tercera cabina replicando, lo que incrementa la complejidad y los costes, siendo por tanto mucho mejor el uso de una carpeta compartida testigo.

4     Almacenamiento en los clústeres distribuidos

Para que un clúster distribuido pueda ser implantado, es necesario cumplir los siguientes requerimientos con el almacenamiento:

4.1   Replicación

Veremos a continuación la replicación de datos en función de:

4.1.1  Niveles de replicación

La replicación de los datos entre sitios puede estar hecha a tres niveles:

El método a elegir para la replicación depende de los requerimientos de negocio y de aplicación.

4.1.2  Tipos de replicación

Existen dos tipos de replicación:

4.1.2.1            Replicación síncrona

En este tipo de replicación, los cambios que se realizan en un sitio no se dan por concluidos hasta que no se han replicado en los otros sitios. Garantiza que no haya pérdida de datos en caso de caída de un sitio.

Si en el sitio A se escribe un bloque de datos, esta operación de entrada / salida no se da por concluida hasta que no se haya escrito ese mismo bloque en el sitio B.

Es el mejor tipo de replicación en clústeres distribuidos cuando se tienen líneas de comunicación con un gran ancho de banda y una baja latencia. En la práctica, esto limita este tipo de replicación a clústeres distribuidos en los cuales la distancia entre sitios es corta.

La replicación síncrona protege de la pérdida de datos en caso de failover en clústeres distribuidos, pero tiene en su contra la potencial latencia, provocada por las operaciones de escritura y ACK. Debido a esta latencia potencial, la réplica síncrona puede penalizar en exceso el rendimiento de las aplicaciones de cara al usuario. De ahí lo que decíamos sobre la distancia entre sitios y el ancho de banda de los enlaces: si el ancho de banda no es suficiente, o la distancia es excesiva (lo que provoca latencia en las comunicaciones) o la aplicación no permite la latencia inherente a este tipo de replicación, la replicación síncrona no es una opción aceptable.

4.1.2.2            Replicación asíncrona

En este tipo de replicación, los cambios que se realizan en un sitio se dan por finalizados de forma local, y posteriormente se replican a los otros sitios en segundo plano.

Si en el sitio A se escribe un cambio, este se da por finalizado en cuanto se ha realizado la operación de lectura / escritura en el almacenamiento del sitio y el software de replicación se encarga de modificar el almacenamiento de del sitio B, para que refleje ese cambio, en segundo plano.

La replicación asíncrona es la mejor opción para obtener el máximo rendimiento de las aplicaciones y servicios del clúster, pues no hay que añadir la latencia correspondiente a la espera del ACK de las cabinas remotas y la latencia correspondiente a la distancia entre sitios y/o ancho de banda limitado. En clústeres distribuidos con grandes distancias entre los sitios, o con aplicaciones que requieren una respuesta muy rápida, es la única opción viable.

El punto débil de la replicación asíncrona es que hay que asumir que en el caso de producirse un failover, habrá pérdida de datos, pues todo proceso de réplica que se esté efectuando es ese momento no será completado, con lo que se verán perdidos los datos implicados.

Este problema de pérdida de datos de la replicación asíncrona hace que se tenga que tomar en cuenta también cómo implementa el fabricante esta replicación. Unos fabricantes la hacen respetando el orden de las operaciones y otros no. Esta es una diferencia crucial, pues si la réplica respeta el orden, el estado de los discos de la cabina del sitio B estará obsoleto, pero será un estado existente en el pasado en los discos de la cabina A y la solución es coherente ante roturas (crash consistent). De manera inversa, si la replicación no respeta el orden de las operaciones, el estado de los discos del sitio B será, probablemente, un estado en el que nunca estuvieron los discos de la cabina A. Muchas aplicaciones son capaces de recuperarse de roturas coherentes, mientras que muy pocas son capaces de hacerlo en el caso de operaciones de entrada y salida desordenadas. Por ello, un clúster distribuido nunca debería utilizar réplicas asíncronas que no respeten el orden de operaciones de entrada y salida.

4.1.3  Recomendaciones sobre replicación

Teniendo en cuenta todo lo que hemos visto en referencia a la replicación entre cabinas, podemos establecer las siguientes recomendaciones:

5     Redes en clústeres distribuidos

Un mejora de la tecnología de clúster en Windows Server 2008 es la posibilidad de que los nodos que componen un clúster pueden estar en diferentes subredes. Al contrario de lo que sucedía en las versiones anteriores (Windows 2000 Server y Windows Server 2003) los nodos de los clústeres de Windows Server 2008 pueden comunicarse entre sí a través de enrutadores de red, lo que permite no estar obligado a que los nodos distribuidos geográficamente estén en la misma VLAN, reduciendo la complejidad y los costes debidos a la configuración necesaria para los clústeres distribuidos.

note Nota

En el caso de SQL Server 2005 y SQL Server 2008 es requerido el uso de VLAN.

No obstante, mantener las VLANs puede ser conveniente, para mejorar el tiempo de respuesta de los clientes. Los clientes no pueden ver una carga de trabajo en la que se hizo failover más rápido de lo que tarden los servidores DNS en replicarse y lo que tarden los clientes en buscar la información DNS actualizada al nuevo servidor con la carga de trabajo.

Esto es así debido a que, a pesar de que los servicios y aplicaciones mantienen los mismos nombres de red en caso de failover, las IPs de estos servicios y aplicaciones cambian. Los servidores DNS deben actualizar los registros correspondientes a los servicios y aplicaciones que han hecho failover a las nuevas IPs. Además de esto, los clientes tienen en caché las IPs antiguas, y deben expirar para que los clientes vuelvan a consultar al servidor DNS, obtengan como respuestas las nuevas IPs y así puedan ser localizados dichos servicios y aplicaciones.

En los siguientes puntos se harán recomendaciones para clústeres distribuidos cuya configuración de red esté hecha en múltiples subredes.

5.1   Configuración de Heartbeat y DNS

Cuando el clúster no está en su propia VLAN, para optimizar la velocidad de failover, de la réplica de DNS y de las búsquedas DNS, se deben ajustar las configuraciones de Heartbeat y DNS, debido al tiempo de réplica de los servidores DNS y expiración de consultas cacheadas en clientes, que vimos anteriormente.

Para minimizar el tiempo de caída en un clúster distribuido deberemos:

5.2   Hyper-V y el direccionamiento de máquinas virtuales

Si tenemos un clúster distribuido en el que se ejecutan máquinas virtuales de Hyper-v y el clúster está configurado en múltiples subredes, deberemos tener en cuenta el direccionamiento de las máquinas virtuales que ejecuta el clúster. Esto es así ya que, lo mismo que pasa con otros servicios en clúster distribuido, en el caso de un failover será necesario que los clientes busquen a las máquinas virtuales con otra IP distinta a la que tenían antes del failover, ya que éstas han cambiado a otra subred. Esto implica que es necesario que cada máquina que se vea implicada en un failover cambie de propiedades de red (IP, máscara, puerta de enlace, DNS, etc.). Si las propiedades de las máquinas son establecidas dinámicamente por medio de DHCP, este cambio puede ser automatizado, en caso contrario deberá realizarse de manera manual.

Por lo tanto sería muy interesante configurar las máquinas virtuales con una IP dinámica, reservar en cada uno de los DHCPs de los sitios la IP correspondiente a ese sitio para cada máquina y configurar el DNS, ya sea siguiendo la estrategia de modificar el TTL de los servidores DNS y los clientes o la estrategia de crear múltiples entradas en DNS para las diferentes IPs de las máquinas.