Configura grupos de disponibilidad de SQL Server Always On

Si ejecutas varias instancias de SQL Server Enterprise en Compute Engine, puedes configurar esas instancias para que usen el agrupamiento en clústeres de conmutación por error de Windows Server y los grupos de disponibilidad de SQL Server Always On a fin de admitir una alta disponibilidad y recuperación ante desastres.

En este instructivo, se muestra cómo crear un clúster de instancias mediante SQL Server Enterprise con la configuración de red necesaria y cómo configurar esas instancias para que usen el agrupamiento en clústeres de conmutación por error de Windows Server y los grupos de disponibilidad de SQL Server Always On. Puedes usar instancias de SQL Server Enterprise creadas a partir de imágenes públicas de SQL Server o de la movilidad de licencias de Microsoft.

Requisitos previos

En este instructivo, se supone que comprendes los siguientes puntos:

Configura la red de VPC

Crea una red de VPC en modo personalizado con tres subredes. Luego, establece las reglas del firewall para permitir el tráfico entre máquinas virtuales internas. Si es necesario, puedes utilizar una red existente para esta tarea, pero se recomienda aislar los sistemas en diferentes redes y subredes. En este instructivo, se espera que crees la siguiente configuración de subred y red de VPC:

  1. Crea una red de VPC en modo personalizado.

    gcloud compute networks create wsfcnet --subnet-mode custom
    
  2. Agrega tres subredes a la red de VPC.

    gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \
    --region us-central1 --range 10.0.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \
    --region us-central1 --range 10.1.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \
    --region us-central1 --range 10.2.0.0/24
    
  3. Crea una regla de firewall para permitir el tráfico entre las instancias en direcciones IP internas de la red de VPC nueva.

    gcloud compute firewall-rules create allow-internal-ports \
    --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \
    --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
    
  4. Crea una regla de firewall para permitir el RDP en el puerto 3389 de la red de VPC.

    gcloud compute firewall-rules create allow-rdp --network wsfcnet \
    --allow tcp:3389 --source-ranges 0.0.0.0/0
    

Crea un controlador de dominio de Windows

Crea un controlador de dominio de Windows. En este instructivo, el dominio es dbeng.com y el nombre del controlador de dominio es dc-windows en la dirección IP 10.2.0.100. El controlador de dominio está utilizando la subred wsfcsubnet3.

  1. Crea una instancia para usar como controlador de dominio. En este instructivo, especifica un tipo de máquina n1-standard-2 pequeña y la imagen más reciente de la familia de imágenes de windows-2016.

    gcloud compute instances create dc-windows --machine-type n1-standard-2 \
    --boot-disk-type pd-ssd --image-project windows-cloud \
    --image-family windows-2016 --boot-disk-size 200GB \
    --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
    
  2. Genera una contraseña para poder conectarte a la VM del controlador de dominio con una cuenta local. Toma nota del nombre de usuario y la contraseña para utilizarlos más adelante.

  3. Con RDP, conéctate a la VM del controlador de dominio con el nombre de usuario y la contraseña de tu cuenta local.

  4. En la instancia, ejecuta PowerShell como administrador para abrir la terminal de PowerShell.

  5. Configura un usuario administrador.

    1. Ejecuta el siguiente comando, luego ingresa una contraseña, que utilizarás con la Cuenta de administrador.

      PS C:\> $Password = Read-Host -AsSecureString
      

      Anota la contraseña que ingresaste. La utilizarás para la Cuenta de administrador.

    2. Configura la contraseña de la Cuenta de administrador.

      PS C:\> Set-LocalUser -Name Administrator -Password $Password
      
    3. Habilita la Cuenta de administrador.

      PS C:\> Enable-LocalUser -Name Administrator
      
  6. Configura las siguientes variables:

    PS C:\> $DomainName = "dbeng.com";
    
    PS C:\> $DomainMode = "Win2012R2";
    
    PS C:\> $ForestMode = "Win2012R2";
    
    PS C:\> $DatabasePath = "C:\Windows\NTDS";
    
    PS C:\> $LogPath = "C:\Windows\NTDS";
    
    PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
    
  7. Instala las siguientes herramientas de Active Directory:

    PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
    PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
    
  8. Si la instancia no se reinicia automáticamente después de crear el dominio, reinicia la instancia de forma manual.

  9. Después de reiniciar la instancia, vuelve a conectarte con la cuenta de Administrator con el nombre de dominio recientemente creado (dbeng.com en este instructivo).

  10. Crea una cuenta de dominio llamada sql_service, que se usará para ejecutar SQL Server:

    1. Ingresa de forma segura una contraseña para usar con la cuenta de servicio de SQL Server.

      PS C:\> $Password = Read-Host -AsSecureString
      

      Anota la contraseña que ingresaste. La utilizarás para la cuenta de servicio de SQL Server.

    2. Crea la cuenta de servicio de SQL Server y configura su contraseña.

      PS C:\> New-LocalUser -Name "sql_service" -Description "SQL Agent and SQL Admin account."  -Password $Password
      

El controlador de dominio está configurado y puedes desconectarte de la instancia de dc-windows. A continuación, crea las instancias para el grupo de disponibilidad.

Crea instancias para tu grupo de disponibilidad

Crea instancias de SQL Server para un grupo de disponibilidad. Estas instancias utilizan las siguientes configuraciones de dirección IP con alias de IP:

  • Nombre de la instancia: cluster-sql1
    • Dirección IP interna: 10.0.0.4
    • Nombre del clúster de conmutación por error de Windows: cluster-ag
    • Dirección IP del clúster de conmutación por error: 10.0.0.5 (alias de IP)
    • Nombre del grupo de disponibilidad: cluster-listener
    • Dirección del objeto de escucha del grupo de disponibilidad: 10.0.0.6 (alias de IP)
  • Nombre de la instancia: cluster-sql2
    • Dirección IP interna: 10.1.0.4
    • Nombre del clúster de conmutación por error de Windows: cluster-ag
    • Dirección IP del clúster de conmutación por error: 10.1.0.5 (alias de IP)
    • Nombre del grupo de disponibilidad: cluster-listener
    • Dirección del objeto de escucha del grupo de disponibilidad: 10.1.0.6 (alias de IP)

Crea las instancias de SQL Server con uno de los siguientes métodos:

Imágenes públicas de SQL Server

Crea dos instancias a partir de imágenes públicas de SQL Server. En este ejemplo, asigna a las instancias los nombres cluster-sql1 y cluster-sql2. Especifica un tamaño de disco de arranque de 200GB y un tipo de máquina n1-highmem-4. Las instancias de SQL Server generalmente requieren más recursos de procesamiento que la instancia del controlador de dominio. Si más adelante necesitas recursos de procesamiento adicionales, puedes cambiar el tipo de máquina para estas instancias. Si necesitas espacio de almacenamiento adicional, agrega un disco o cambia el tamaño del disco de arranque persistente. En grupos de disponibilidad más grandes, puedes crear varias instancias.

Además, incluye el marcador --metadata sysprep-specialize-script-ps1 para ejecutar un comando de PowerShell durante la creación de la instancia que instala la función Failover-Clustering.

Para este ejemplo, crea dos instancias con los siguientes comandos:

gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"

En grupos de disponibilidad más grandes, puedes crear instancias adicionales con las direcciones IP adecuadas.

Licencias existentes

Si deseas usar tus licencias para SQL Server Enterprise con la movilidad de licencias de Microsoft mediante Software Assurance, crea una imagen de Windows con --guestOSFeatures habilitado. Luego, instala SQL Server Enterprise de forma manual más adelante.

  1. Crea una instancia de Windows Server.
  2. En esa instancia, actualiza todos los componentes a las últimas versiones.
  3. Establece el estado de eliminación automática en false para el disco de arranque de esa instancia.
  4. Borra la instancia.
  5. Crea un disco temporal con una imagen estándar de Windows Server.

    gcloud compute disks create windows-2012-disk-new --size 200 \
    --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \
    --image-project windows-cloud
    
  6. Desde el disco nuevo, crea una imagen personalizada de Windows Server con MULTI_IP_SUBNET habilitado en el parámetro guestOSFeatures.

    gcloud beta compute images create windows-server-2012-r2-dc-new \
    --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \
    --guest-os-features MULTI_IP_SUBNET
    
  7. Después de crear la imagen, borra el disco temporal.

    gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
    
  8. Usa la imagen personalizada a fin de crear las instancias de SQL Server nuevas para el grupo de disponibilidad. Las instancias de SQL Server generalmente requieren más recursos de procesamiento que la instancia del controlador de dominio; por lo tanto, especifica al menos un tipo de máquina n1-highmem-4. Si más adelante necesitas recursos de procesamiento adicionales, puedes cambiar el tipo de máquina para estas instancias. Si necesitas espacio de almacenamiento adicional, agrega un disco o cambia el tamaño del disco de arranque persistente. En grupos de disponibilidad más grandes, puedes crear varias instancias. En este ejemplo, crea dos instancias.

    gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
    gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
  9. En cada una de las instancias, instala SQL Server Enterprise de forma manual.

Después de crear las instancias, configúralas para que puedan funcionar como un grupo de disponibilidad.

  1. Conéctate a ambas instancias con conexiones de RDP.
  2. Cambia ambas instancias para que usen direcciones IP estáticas y configura la máscara de red en 255.255.0.0. Abre una terminal de PowerShell como administrador y configura las direcciones IP estáticas como estáticas. Estos comandos podrían finalizar tu conexión a escritorio remoto:

    • Instancia 1:

      PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
    • Instancia 2:

      PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
  3. Agrega ambas instancias al dominio de Windows. Abre PowerShell como administrador y ejecuta el siguiente comando Add-Computer en ambas instancias:

    PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
    

    El comando te solicitará tus credenciales. Cuando el comando termina de ejecutarse, la instancia se reinicia.

  4. Vuelve a conectarte a tus instancias con el RDP para configurar las cuentas de servicio de SQL Server:

    1. Abre el Administrador de configuración de SQL Server.
    2. Selecciona la pestaña de servicios de SQL Server, haz clic derecho en “SQL Server” y, luego, haz clic en Propiedades.
    3. Configura la cuenta y la contraseña para sql_service.

Las instancias ahora se crean para el grupo de disponibilidad. A continuación, configura el Administrador de clúster de conmutación por error.

Configura el Administrador de clúster de conmutación por error

Habilita el clúster de conmutación por error en las instancias de tu grupo de disponibilidad y configura una instancia para que actúe como Administrador de clúster de conmutación por error. Habilita la Alta disponibilidad de Always On en todas las instancias del grupo.

  1. Vuelve a conectarte a tus instancias con el RDP, pero usa las credenciales de administrador de dominio. En este ejemplo, el dominio es dbeng y la cuenta de administrador es Administrator. Si estás utilizando el RDP de Chrome para Google Cloud Platform, borra los certificados RDP existentes para estas direcciones en la lista Certificados del menú Opciones.

  2. Selecciona una de tus instancias y configúrala para que se ejecute como Administrador de clúster de conmutación por error.

    1. Abre PowerShell como administrador y configura variables que reflejen tu entorno de clúster. En este ejemplo, configura las siguientes variables:

      PS C:\> $node1 = "cluster-sql1"
      
      PS C:\> $node2 = "cluster-sql2"
      
      PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
      
      PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
      
      PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
      
    2. Crea el clúster de conmutación por error:

      PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
      
    3. Habilita la alta disponibilidad de Always On para ambos nodos en el clúster:

      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
      
      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
      
  3. En la instancia secundaria donde no hay un administrador de clúster, crea una carpeta de copia de seguridad en C:\SQLBackup y compártela como \\cluster-sql2\SQLBackup en la cuenta sql_service para lectura y escritura.

  4. En ambas instancias, crea dos carpetas en C:\SQLData y C:\SQLLog. Usa estas carpetas para los datos y los archivos de registro de la base de datos.

El Administrador de clúster de conmutación por error está listo. A continuación, crea el grupo de disponibilidad.

Crea el grupo de disponibilidad

Crea una base de datos de prueba y configúrala para que trabaje con un grupo de disponibilidad nuevo. Otra opción es especificar una base de datos existente para el grupo de disponibilidad.

  1. Si aún no tienes una base de datos configurada, crea una base de datos de prueba. En la instancia de administrador de clúster, ejecuta SQL Server Management Studio y crea una base de datos de prueba con el siguiente comando SQL:

    CREATE DATABASE TestDB
    ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [TestDB]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [TestDB] SET RECOVERY FULL;
      GO
      BACKUP DATABASE TestDB to disk = '\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT
    GO
    
  2. En la instancia de administrador de clúster, ejecuta SQL Server Management Studio.

  3. Haz clic derecho en Alta disponibilidad de Always On y selecciona Nuevo asistente de grupo de disponibilidad.

  4. En la página Especificar nombre, configura un nombre de grupo de disponibilidad. En este ejemplo, especifica cluster-ag.

  5. En la página Seleccionar bases de datos, especifica qué base de datos deseas replicar. En este ejemplo, especifica la base de datos TestDB.

  6. En la página Especificar réplicas, configura ambas instancias como réplicas con conmutación por error automática y confirmación síncrona.

  7. En la página Seleccionar sincronización de datos, especifica el recurso compartido de red a fin de mantener la copia de seguridad de la base de datos para la sincronización inicial. En este ejemplo, especifica \\cluster-sql2\SQLBackup.

  8. La página de Validación genera una advertencia porque no hay objeto de escucha, pero puedes ignorarla.

  9. Una vez que finalice el asistente, haz clic con el botón derecho en el nuevo grupo de disponibilidad y selecciona Agregar objeto de escucha.

  10. Especifica los parámetros para este objeto de escucha:

    • Nombre de DNS del objeto de escucha: cluster-listener.
    • Puerto de red: 1433.
    • Modo de red: Static IP.
  11. Agrega dos campos de subred y dirección IP. En este ejemplo, usa los siguientes pares de subred y dirección IP:

    • 10.0.0.0/16 y 10.0.0.6
    • 10.1.0.0/16 y 10.1.0.6

Ahora puedes conectarte a SQL Server con cluster-listener como nombre de la base de datos de SQL Server en lugar del nombre de las instancias. Esta conexión apunta a la instancia que está activa actualmente.

Qué sigue

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine