En esta publicación del blog, exploraremos cómo automatizar el proceso de creación y configuración de grupos de disponibilidad de SQL Server utilizando Windows PowerShell. La automatización de tareas administrativas en SQL Server no es algo nuevo, y PowerShell ha sido una herramienta poderosa para este propósito desde SQL Server 2008.
Crear y configurar grupos de disponibilidad de SQL Server puede ser un proceso que consume mucho tiempo y propenso a errores si se hace manualmente. Al aprovechar PowerShell, podemos agilizar y automatizar este proceso, asegurando consistencia y eficiencia.
Resumen de los pasos
Antes de entrar en los detalles, veamos una descripción general de alto nivel de los pasos involucrados en la automatización de la creación y configuración de grupos de disponibilidad de SQL Server:
- Habilitar la característica de grupos de disponibilidad Always On de SQL Server en todas las réplicas
- Crear el punto de conexión del grupo de disponibilidad en todas las réplicas
- Iniciar el punto de conexión del grupo de disponibilidad en todas las réplicas
- Crear un inicio de sesión y otorgar permisos de CONEXIÓN a la cuenta de servicio de SQL Server en todas las réplicas
- Crear los objetos de réplicas del grupo de disponibilidad
- Crear el grupo de disponibilidad en la réplica principal
- Unir las réplicas secundarias y las bases de datos al grupo de disponibilidad
- Crear el nombre del escuchador del grupo de disponibilidad en la réplica principal
Habilitar la característica de grupos de disponibilidad Always On de SQL Server
El primer paso es habilitar la característica de grupos de disponibilidad Always On de SQL Server en todas las réplicas. Esto se puede hacer utilizando el cmdlet de PowerShell Enable-SqlAlwaysOn. Por ejemplo:
Enable-SqlAlwaysOn -ServerInstance INSTANCIA -ForceCrear el punto de conexión del grupo de disponibilidad
A continuación, debemos crear el punto de conexión del grupo de disponibilidad en todas las réplicas. Esto se puede lograr utilizando el cmdlet de PowerShell New-SqlHADREndpoint. Por ejemplo:
New-SqlHADREndpoint -Path "SQLSERVER:\SQL\NOMBREDELASERVIDOR\Default" -Name "Endpoint_AG" -Port 5022 -EncryptionAlgorithm Aes -Encryption RequiredIniciar el punto de conexión del grupo de disponibilidad
Después de crear el punto de conexión, debemos iniciarlo en todas las réplicas. Esto se puede hacer utilizando el cmdlet de PowerShell Set-SqlHADREndpoint. Por ejemplo:
Set-SqlHADREndpoint -Path "SQLSERVER:\SQL\NOMBREDELASERVIDOR\Default\Endpoints\Endpoint_AG" -State StartedCrear un inicio de sesión y otorgar permisos de CONEXIÓN
Debido a que la cuenta de servicio de SQL Server se hará pasar por la instancia de SQL Server al conectarse a las réplicas, debemos crearla como un inicio de sesión de SQL Server y otorgarle los permisos de CONEXIÓN al punto de conexión. Desafortunadamente, no hay un cmdlet de PowerShell correspondiente para esta tarea, por lo que debemos usar T-SQL y ejecutarlo utilizando el cmdlet de PowerShell Invoke-SqlCmd. Por ejemplo:
# Crear los comandos de T-SQL
$createLogin = "CREATE LOGIN [TESTDOMAIN\sqlservice] FROM WINDOWS;"
$grantConnectPermissions = "GRANT CONNECT ON ENDPOINT::Endpoint_AG TO [TESTDOMAIN\sqlservice];"
# Ejecutar los comandos de T-SQL utilizando Invoke-SqlCmd
Invoke-SqlCmd -ServerInstance NOMBREDELASERVIDOR -Query $createLogin
Invoke-SqlCmd -ServerInstance NOMBREDELASERVIDOR -Query $grantConnectPermissionsCrear los objetos de réplicas del grupo de disponibilidad
A continuación, debemos crear los objetos de réplicas del grupo de disponibilidad. Esto se puede hacer utilizando el cmdlet de PowerShell New-SqlAvailabilityReplica. Por ejemplo:
# Crear la réplica principal como un objeto de plantilla
$primaryReplica = New-SqlAvailabilityReplica -Name NOMBREDELASERVIDOR-NODO1 -EndpointUrl "TCP://NOMBREDELASERVIDOR-NODO1.TESTDOMAIN.COM:5022" -AvailabilityMode "SynchronousCommit" -FailoverMode 'Automatic' -AsTemplate -Version 13
# Crear la réplica secundaria como un objeto de plantilla
$secondaryReplica = New-SqlAvailabilityReplica -Name NOMBREDELASERVIDOR-NODO2 -EndpointUrl "TCP://NOMBREDELASERVIDOR-NODO2.TESTDOMAIN.COM:5022" -AvailabilityMode "SynchronousCommit" -FailoverMode 'Automatic' -AsTemplate -Version 13Crear el grupo de disponibilidad
Después de crear las réplicas como objetos de plantilla, podemos crear el grupo de disponibilidad utilizando el cmdlet de PowerShell New-SqlAvailabilityGroup. Por ejemplo:
New-SqlAvailabilityGroup -InputObject NOMBREDELASERVIDOR -Name "AG_Prod" -AvailabilityReplica ($primaryReplica, $secondaryReplica) -Database @("Northwind","pubs")Unir las réplicas secundarias y las bases de datos
Aunque proporcionamos la lista de réplicas al cmdlet New-SqlAvailabilityGroup, este no agrega automáticamente todas las réplicas secundarias. Debemos utilizar el cmdlet de PowerShell Join-SqlAvailabilityGroup para lograr esta tarea. Además, debemos agregar las bases de datos en las réplicas secundarias al grupo de disponibilidad utilizando el cmdlet de PowerShell Add-SqlAvailabilityDatabase. Por ejemplo:
# Unir las réplicas al grupo de disponibilidad
Join-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\NOMBREDELASERVIDOR\Default" -Name "AG_Prod"
# Unir las bases de datos en las réplicas secundarias al grupo de disponibilidad
Add-SqlAvailabilityDatabase -Path "SQLSERVER:\SQL\NOMBREDELASERVIDOR\Default\AvailabilityGroups\AG_Prod" -Database "Northwind"Crear el nombre del escuchador del grupo de disponibilidad
Finalmente, podemos crear el nombre del escuchador del grupo de disponibilidad utilizando el cmdlet de PowerShell New-SqlAvailabilityGroupListener. Por ejemplo:
New-SqlAvailabilityGroupListener -Name "NombreDelEscuchadorAG" -staticIP "172.16.0.45/255.255.0.0" -Port 1433 -Path "SQLSERVER:\SQL\NOMBREDELASERVIDOR\DEFAULT\AvailabilityGroups\AG_Prod"Siguiendo estos pasos y utilizando PowerShell, puedes automatizar la creación y configuración de grupos de disponibilidad de SQL Server, ahorrando tiempo y asegurando consistencia en tus implementaciones.
Recuerda modificar el script de acuerdo a tu entorno y requisitos específicos. Puedes utilizar este marco como punto de partida y personalizarlo según tus necesidades.
¡Feliz automatización!