ICM / how-to-do / Configurar un clúster SQL Servers con AlwaysOn Availability Group. Parte 2

Configurar un clúster SQL Servers con AlwaysOn Availability Group. Parte 2

27 noviembre 2021 | Marc Carbó

Si en anteriores publicaciones os explicamos un poco que eran los AlwaysOn Availability Group y cómo empezábamos a construir el entorno, en esta entrada os daremos los pasos para configurar el clúster.

Configuración SQL Server

Antes de crear el grupo de disponibilidad, debemos tener unos pasos previos. Primero, habilitaremos AlwaysOn Availability Groups usando el “Configuration Manager” del SQL Server 2019:

AlwaysOn Availability Groups

Hacemos clic derecho en el servicio “SQL SERVER” y seleccionamos “properties”:

sql server propieties

Ya que estamos en las propiedades del SQL server, podemos hacer dos cosas. La primera es marcar el check de “Enable Always On Availbility Groups” en la pestaña “Always On Availability Groups”.

Always On Availbility Groups

La otra es añadir el usuario que hemos comentado al inicio del tutorial, para que inicie el SQL Server y haga las conexiones entre servers:

sql server

 

Create Availability Group AlwaysOn

Para crear un nuevo grupo de disponibilidad accedemos al “SQL Server Managment Studio” y hacemos clic derecho en la carpeta Availability Groups para iniciar el wizard de creación:

Create Availability Group AlwaysOn

Con el wizard abierto, le asignamos un nombre al grupo y comprobamos que el tipo de clúster es “Windows server Failover Cluster”:

Windows server Failover Cluster”

Seleccionamos la base de datos que queremos que esté en el grupo:

1111

En la siguiente pantalla solo nos aparecerá el nodo primario. Así, añadiremos un nuevo nodo y hacemos check en “Automatic Failover”:

HPWTPDP

En nuestro caso, los dos servidores que conforman el clúster son exactamente iguales, por lo que podemos dejar la opción por defecto:

REPLICAS

Cambiamos a la pestaña “Listener” y creamos un listener para el grupo de disponibilidad, dándole un nombre que añadiremos a DNS, asignar un puerto de escucha y una IP:

AlwaysOn Availability Group

Validamos que todo está correcto:

AlwaysOn Availability Group

Comprobamos en el sumario que todos los datos que hemos introducido son correctos:

tecnologia

Ya tenemos el Availability Group creado y en funcionamiento:

testing

Connection String

Para poder conectarnos a nuestra nueva estructura y sacar provecho a la alta disponibilidad que ofrece los AG, ya no es necesario realizar la petición de forma directa al servidor SQL principal. Usaremos el “listener” que configuramos en el paso anterior. Para ponernos en situación, un connection string sin AG tendría una estructura como la siguiente:

       Server=ServerName;Database=dbName;User Id=user;Password=***;

Nuestra estructura el connection string sería el siguiente:

     Server=icm-lab02.testing2.icm;Database=Test;User Id=user;Password=***;

Como vemos, la petición va directa al servidor y eso ya no es la forma correcta de operar con los AG. Debería tener la estructura siguiente:

   Server=tcp:AGlistener_name,AGlistener_port;Database=dbName;User       Id=user;Password=***;

Para que funcionara con lo visto en este tutorial, el connection string quedaría de la siguiente forma:

   Server=tcp:AG_listener,5504;Database=Test;User Id=user;Password=***;

En el caso de que tuviéramos X nodos que solo atendiera peticiones de lectura, podríamos indicarlo en el string de conexión:

   Server=tcp:AG_listener,5504;Database=Test;User     Id=user;Password=***;ApplicationIntent=ReadOnly

Conclusión

La herramienta que propuso Microsoft con los Availability Groups AlwaysON es muy útil. Permite que el servicio esté inactivo el menor tiempo posible antes de que balancee toda la carga al nodo secundario, que se convertirá en primario para aceptar nuevas peticiones de lectura y de escritura.

En el entorno que hemos creado no se aprovecha del todo el Quorum. El Quorum permite que no haya un error de “Split Brain”, ya que los nodos que forman parte del Availability Group se ponen de acuerdo sobre qué datos son los correctos en caso de algún fallo, por lo que a más nodos más difícil que haya este error. Además, cuenta con una buena escalabilidad en caso de que queramos poner más nodos a la estructura.