Configura grupos de disponibilidad Always On de SQL Server con confirmación síncrona mediante un balanceador de cargas interno


Los grupos de disponibilidad Always On de Microsoft SQL Server te permiten replicar bases de datos en varias instancias de SQL Server Enterprise.

Al igual que las instancias de clústeres de conmutación por error de SQL Server, los grupos de disponibilidad Always On usan el agrupamiento en clústeres de conmutación por error de Windows Server (WSFC) para implementar la alta disponibilidad. Sin embargo, las dos funciones difieren en los siguientes aspectos:

Grupos de disponibilidad siempre activados Instancias de clústeres de conmutación por error
Alcance de la conmutación por error Grupo de bases de datos Instancia
Almacenamiento No compartido Compartido

Para obtener una comparación más detallada, consulta Comparación de instancias de clústeres de conmutación por error y grupos de disponibilidad.

Los grupos de disponibilidad siempre activados admiten varios modos de disponibilidad. En este instructivo, se muestra cómo puedes implementar grupos de disponibilidad Always On en modo de confirmación síncrona para implementar una alta disponibilidad de una o más bases de datos.

En la configuración, crearás tres instancias de VM. Dos instancias de VM, node-1 y node-2, funcionan como nodos del clúster y ejecutan SQL Server. Una tercera instancia de VM, witness, se usa para lograr un quórum en una situación de conmutación por error. Las tres instancias de VM se distribuyen en tres zonas y comparten una subred común.

Si usas grupo de disponibilidad Always On de SQL Server, una base de datos de ejemplo, bookshelf, se replica de forma síncrona en las dos instancias de SQL Server.

En un entorno de clúster de Windows local, los anuncios del protocolo de resolución de direcciones (ARP) activan la conmutación por error de la dirección IP. Sin embargo,Google Cloudignora los anuncios de ARP. Por lo tanto, debes implementar una de las siguientes dos opciones: usar un balanceador de cargas interno y un nombre de red distribuida (DNN).

En el artículo, se supone que ya implementaste Active Directory en Google Cloud y que tienes conocimientos básicos de SQL Server, Active Directory y Compute Engine. Para obtener más información sobre Active Directory en Google Cloud, consulta la sección Antes de comenzar.

Si usas grupo de disponibilidad Always On de SQL Server, una base de datos de ejemplo, bookshelf, se replica de forma síncrona en las dos instancias de SQL Server. Un balanceador de cargas interno garantiza que el tráfico se dirija al nodo activo.

Para obtener más información sobre el agrupamiento en clústeres de conmutación por error de Windows Server con un balanceador de cargas interno, consulta agrupamiento en clústeres de conmutación por error.

Arquitectura

En este diagrama, se incluye lo siguiente:

  • Dos instancias de VM en la misma región y diferentes zonas para el clúster de resguardo llamado node-1 y node-2 Uno aloja la réplica principal de la base de datos de SQL Server, mientras que el otro nodo aloja la réplica secundaria.
  • Una tercera VM llamada witness funciona como testigo de archivos compartidos para proporcionar un voto de desempate y lograr un quórum para la conmutación por error.
  • Un balanceador de cargas interno frente al clúster proporciona un único extremo para los clientes de SQL Server y usa una verificación de estado para garantizar que el tráfico se dirija al nodo activo.

Objetivos

El objetivo de este instructivo es lograr los siguientes objetivos:

Costos

En este instructivo, se usan componentes facturables de Google Cloud, que incluyen lo siguiente:

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

Antes de comenzar

Para completar las tareas de este instructivo, asegúrate de lo siguiente:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Tienes un dominio de Active Directory con al menos un controlador de dominio. Puedes crear un dominio de Active Directory con Microsoft AD administrado. También puedes implementar un entorno personalizado de Active Directory en Compute Engine y configurar una zona de reenvío de DNS privado que reenvíe las consultas de DNS a los controladores de dominio.
  7. Tienes un usuario de Active Directory que tiene permiso para unir computadoras al dominio y puede acceder a través de RDP. Si usas Microsoft AD administrado, puedes usar el usuario setupadmin. Para obtener más información sobre el aprovisionamiento de cuentas de usuario de Active Directory, consulta Aprovisionamiento de cuentas de usuario de Active Directory.
  8. Un proyecto de Google Cloud y una nube privada virtual (VPC) con conectividad a los controladores de dominio de Active Directory
  9. Una subred para usar en las instancias de VM del clúster de conmutación por error de Windows Server.
Cuando finalices este instructivo, puedes borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.

Prepara el proyecto y la red

Para implementar los grupos de disponibilidad Always On de SQL Server, debes preparar tu proyecto y VPC deGoogle Cloud para la implementación. En las siguientes secciones, se explica cómo puedes hacerlo en detalle.

Configura tu proyecto y región

Para preparar tu proyecto de Google Cloud para la implementación de grupos de disponibilidad Always On de SQL Server, haz lo siguiente:

  1. En la consola de Google Cloud , abre Cloud Shell haciendo clic en el botón Activar Cloud Shell Activar Cloud Shell..

    Ve a la consola de Google Cloud .

  2. Inicializa las siguientes variables.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Reemplaza lo siguiente:

    • VPC_NAME: Es el nombre de tu VPC.
    • SUBNET_NAME: Es el nombre de tu subred.
  3. Establece tu ID del proyecto predeterminado.

    gcloud config set project PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID de tu proyecto de Google Cloud .

  4. Establece tu región predeterminada.

    gcloud config set compute/region REGION
    

    Reemplaza REGION por el ID de la región en la que deseas realizar la implementación.

Crea reglas de firewall

Para permitir que los clientes se conecten a SQL Server y la comunicación entre los nodos del clúster, debes crear varias reglas de firewall. Puedes usar etiquetas de red para simplificar la creación de estas reglas de firewall de la siguiente manera:

  • Los dos nodos del clúster tienen anotaciones con la etiqueta wsfc-node.
  • Todos los servidores (incluido el witness) están anotados con la etiqueta wsfc.

Para crear reglas de firewall que usen estas etiquetas de red, sigue estos pasos:

  1. Regresa a tu sesión actual de Cloud Shell.
  2. Crea reglas de firewall para permitir el tráfico entre los nodos del clúster.

    SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\))
    
    gcloud compute firewall-rules create allow-all-between-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp,udp,icmp \
      --enable-logging \
      --source-tags=wsfc \
      --target-tags=wsfc \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:1433 \
      --enable-logging \
      --source-ranges=$SUBNET_CIDR \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    

Cree instancias de VM

Crea e implementa dos instancias de VM para el clúster de conmutación por error. En cualquier momento, una de estas VM aloja la réplica principal de la base de datos de SQL Server, mientras que el otro nodo aloja la réplica secundaria. Las dos instancias de VM deben cumplir estos requisitos:

  • deben encontrarse en la misma región para que un balanceador de cargas de red de transferencia interno pueda acceder a ellas.
  • deben tener instalados clústeres de conmutación por error de Windows Server y SQL Server
  • deben tener habilitada la compatibilidad con WSFC de Compute Engine.

Usa una imagen premium de SQL Server que tenga SQL Server 2022 preinstalado.

Para proporcionar un voto de desempate y lograr un quórum para la situación de conmutación por error, implementa una tercera VM que sirva como testigo de archivos compartidos siguiendo estos pasos:

  1. Regresa a tu sesión actual de Cloud Shell.
  2. Crea una secuencia de comandos especializada para los nodos de WSFC. Esta secuencia de comandos instala las funciones necesarias de Windows y crea reglas de firewall para WSFC y SQL Server.

    cat << "EOF" > specialize-node.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
    Install-WindowsFeature RSAT-AD-PowerShell
    
    # Open firewall for WSFC
    netsh advfirewall firewall add rule name="Allow WSFC health check" dir=in action=allow protocol=TCP localport=59998
    
    # Open firewall for SQL Server
    netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433
    
    # Open firewall for SQL Server replication
    netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022
    
    # Format data disk
    Get-Disk |
     Where partitionstyle -eq 'RAW' |
     Initialize-Disk -PartitionStyle MBR -PassThru |
     New-Partition -AssignDriveLetter -UseMaximumSize |
     Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false
    
    # Create data and log folders for SQL Server
    md d:\Data
    md d:\Logs
    EOF
    
  3. Crea las instancias de VM. En las dos VMs que funcionan como nodos de clúster, conecta un disco de datos adicional y habilita el agrupamiento en clústeres de conmutación por error de Windows Server mediante la configuración de la clave de metadatos enable-wsfc en true:

    REGION=$(gcloud config get-value compute/region)
    ZONE1=ZONE1
    ZONE2=ZONE2
    ZONE3=ZONE3
    PD_SIZE=200
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $ZONE1 \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-1" \
      --create-disk=name=node-1-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --zone $ZONE2 \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-2" \
      --create-disk=name=node-2-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --zone $ZONE3 \
      --machine-type e2-medium \
      --subnet $SUBNET_NAME \
      --image-family=windows-2022 \
      --image-project=windows-cloud \
      --tags wsfc \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"
    

    Reemplaza ZONE1, ZONE2 y ZONE3 según las zonas que uses.

  4. Para unir las tres instancias de VM a Active Directory, haz lo siguiente para cada una de las tres instancias de VM:

    1. Supervisa el proceso de inicialización de la VM cuando ves su salida de puerto en serie.

      gcloud compute instances tail-serial-port-output NAME
      

      Reemplaza NAME con el nombre de la instancia de VM.

      Espera unos minutos hasta que veas el resultado Instance setup finished y presiona Ctrl+C. En este punto, la instancia de VM está lista para usarse.

    2. Crea un nombre de usuario y una contraseña para la instancia de VM.

    3. Conéctate a la VM mediante el escritorio remoto y accede con el nombre de usuario y la contraseña que creaste en el paso anterior.

    4. Haz clic con el botón derecho en el botón Iniciar (o presiona Windows+X) y, luego, en Windows PowerShell (Admin).

    5. Para confirmar el símbolo de elevación, haz clic en .

    6. Une la computadora a tu dominio de Active Directory y reiníciala.

      Add-Computer -Domain DOMAIN -Restart
      

      Reemplaza DOMAIN por el nombre de DNS de tu dominio de Active Directory.

    7. Ingresa las credenciales de una cuenta que tenga permisos para unir una VM al dominio.

      Espera a que se reinicie la VM. Uniste la instancia de VM a Active Directory.

Reserva direcciones IP estáticas

Ahora debes reservar dos direcciones IP estáticas en tu VPC. Una dirección IP se usa como la dirección IP predeterminada del clúster de WSFC; la otra funciona como la IP estática del objeto de escucha del grupo de disponibilidad de SQL Server.

En un clúster de WSFC, la dirección IP del clúster se usa principalmente para fines administrativos y para acceder a los recursos del clúster. Esta dirección IP virtual se asigna al clúster, lo que permite a los administradores administrarlo y realizar tareas como configurar la configuración del clúster, supervisar el estado de los nodos y administrar los procesos de conmutación por error.

En el contexto del grupo de disponibilidad de SQL Server, un objeto de escucha es un nombre de red virtual (VNN) y una dirección IP que permite a los clientes conectarse al grupo de disponibilidad sin necesidad de saber qué servidor específico es el nodo principal.

Un balanceador de cargas interno necesita una dirección IP interna para enrutar el tráfico interno de manera eficiente y admitir alta disponibilidad y balanceo de cargas en el contexto de un clúster de WSFC. El balanceador de cargas interno garantiza que las solicitudes siempre se dirijan a la réplica principal actual del clúster. Durante los eventos de conmutación por error, el equilibrador de cargas detecta cambios en la réplica principal y redirecciona las conexiones de los clientes a la nueva réplica principal sin necesidad de intervención manual, lo que minimiza el tiempo de inactividad y garantiza la disponibilidad continua de los servicios de la base de datos.

En el contexto de un WSFC con grupos de disponibilidad Always On de SQL Server, los balanceadores de cargas internos asociados también usan las direcciones IP estáticas internas reservadas para la dirección IP predeterminada del clúster de WSFC y el objeto de escucha del grupo de disponibilidad.

  1. Para reservar dos direcciones IP estáticas en tu VPC, sigue estos pasos.

    gcloud compute addresses create wsfc-cluster-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_IP=$(gcloud compute addresses describe wsfc-cluster-ip \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "cluster IP: $CLUSTER_IP"
    
  2. Reemplaza la dirección IP del clúster en la variable CLUSTER_IP, ya que la necesitarás más adelante para especificarla como la IP del clúster:

    CLUSTER_IP=CLUSTER_IP
    
  3. Reserva otra IP estática para el objeto de escucha del grupo de disponibilidad y captura la dirección en una variable de entorno nueva llamada LISTENER_IP.

    gcloud compute addresses create wsfc-listener-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LISTENER_IP=$(gcloud compute addresses describe wsfc-listener-ip \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Listener IP: $LISTENER_IP"
    
  4. Reemplaza la dirección IP reservada del balanceador de cargas como la variable LISTENER_IP. La necesitarás más adelante para configurar tu grupo de disponibilidad.

    LISTENER_IP=LISTENER_IP
    

Tu proyecto y VPC están listos para la implementación del clúster de conmutación por error de Windows Server y SQL Server.

Implementa el clúster de conmutación por error

Ahora puedes usar las instancias de VM para implementar un clúster de conmutación por error de Windows Server y SQL Server. En las siguientes secciones, se explica cómo hacerlo en detalle.

Prepara SQL Server

Sigue estos pasos para crear una cuenta de usuario nueva en Active Directory para SQL Server:

  1. Conéctate a node-1 mediante el escritorio remoto. Accede con tu cuenta de usuario de dominio.
  2. Haz clic derecho en el botón Iniciar (o presiona Windows+X) y, luego, en Windows PowerShell (Admin).
  3. Para confirmar el símbolo de elevación, haz clic en .
  4. Crea una cuenta de usuario de dominio para SQL Server y el agente de SQL, y asigna una contraseña:

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true
    

Para configurar SQL Server, realiza los siguientes pasos en node-1 y node-2:

  1. Abre el Administrador de configuración de SQL Server.
  2. En el panel de navegación, selecciona SQL Server Services.
  3. En la lista de servicios, haz clic con el botón derecho en SQL Server (MSSQLSERVER) y selecciona Propiedades.
  4. En Acceder como, cambia la cuenta de la siguiente manera:

    • Nombre de la cuenta: DOMAIN\sql_server, en el que DOMAIN es el nombre de NetBIOS de tu dominio de Active Directory.
    • Contraseña: Ingresa la contraseña que elegiste antes.
  5. Haz clic en Aceptar.

  6. Cuando se te solicite reiniciar SQL Server, selecciona .

SQL Server ahora se ejecuta con una cuenta de usuario de dominio.

Crea archivos compartidos

Crea dos archivos compartidos en la instancia de VM witness para que pueda almacenar copias de seguridad de SQL Server y actuar como un testigo de archivos compartidos:

  1. Conéctate a witness mediante el escritorio remoto. Accede con tu cuenta de usuario de dominio.
  2. Haz clic con el botón derecho en el botón Iniciar (o presiona Windows+X) y, luego, en Windows PowerShell (Admin).
  3. Para confirmar el símbolo de elevación, haz clic en .
  4. Crea un archivo compartido de testigo y otórgate a ti mismo y a los dos nodos del clúster acceso al archivo compartido.

    New-Item "C:\QWitness" –type directory
    
    icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)'
    icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)'
    
    New-SmbShare `
      -Name QWitness `
      -Path "C:\QWitness" `
      -Description "SQL File Share Witness" `
      -FullAccess $env:username,node-1$,node-2$
    
  5. Crea otro archivo compartido para almacenar copias de seguridad y otorgar a SQL Server acceso completo:

    New-Item "C:\Backup" –type directory
    New-SmbShare `
      -Name Backup `
      -Path "C:\Backup" `
      -Description "SQL Backup" `
      -FullAccess  $env:USERDOMAIN\sql_server
    

Crea el clúster de conmutación por error

Para crear el clúster de conmutación por error, sigue estos pasos:

  1. Regresa a la sesión de escritorio remoto en node-1.
  2. Haz clic con el botón derecho en el botón Iniciar (o presiona Windows+X) y, luego, en Windows PowerShell (Admin).
  3. Para confirmar el símbolo de elevación, haz clic en .
  4. Crea un clúster nuevo.

    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_IP
    

    Reemplaza CLUSTER_IP por la dirección IP del clúster que creaste antes.

  5. Regresa a la sesión de PowerShell en witness y otorga permiso al objeto de computadora virtual del clúster para acceder al archivo compartido.

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -AccessRight Full `
      -Force
    
  6. Regresa a la sesión de PowerShell en node-1 y configura el clúster para usar el archivo compartido en witness como un quórum del clúster.

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. Verifica que el clúster se haya creado correctamente.

    Test-Cluster
    

    Es posible que veas las siguientes advertencias, que puedes ignorar de forma segura.

    WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings..
    WARNING: Network - Validate Network Communication: The test reported some warnings..
    WARNING:
    Test Result:
    HadUnselectedTests, ClusterConditionallyApproved
    Testing has completed for the tests you selected. You should review the warnings in the Report.  A cluster solution is
    supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
    

    También puedes iniciar el complemento de MMC del administrador de clústeres de conmutación por error para revisar el estado del clúster si ejecutas cluadmin.msc.

  8. Si usas AD administrado, agrega la cuenta de computadora que usa el clúster de Windows al grupo de Cuentas de unión de dominio del servicio en la nube para que pueda unir computadoras al dominio.

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. Habilita los grupos de disponibilidad Always On en ambos nodos.

    Enable-SqlAlwaysOn -ServerInstance node-1 -Force
    Enable-SqlAlwaysOn -ServerInstance node-2 -Force
    

Crea un grupo de disponibilidad

Ahora debes crear una base de datos bookshelf de muestra, incluirla en un nuevo grupo de disponibilidad llamado bookshelf-ag y configurar la alta disponibilidad.

Crea una base de datos

Crea una base de datos nueva. Para los fines de este instructivo, la base de datos no necesita contener ningún dato.

  1. Regresa a la sesión de escritorio remoto en node-1.
  2. Abre SQL Server Management Studio.
  3. En el cuadro de diálogo Conectar al servidor, verifica que el nombre del servidor esté configurado como node-1 y selecciona Conectar.
  4. En el menú, selecciona Archivo > Nuevo > Consulta con conexión actual.
  5. Pega la siguiente secuencia de comandos SQL en el editor:

    -- Create a sample database
    CREATE DATABASE bookshelf ON PRIMARY (
      NAME = 'bookshelf',
      FILENAME='d:\Data\bookshelf.mdf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    LOG ON (
      NAME = 'bookshelf_log',
      FILENAME='d:\Logs\bookshelf.ldf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    GO
    
    USE [bookshelf]
    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- Create sample table
    CREATE TABLE [dbo].[Books] (
      [Id] [bigint] IDENTITY(1,1) NOT NULL,
      [Title] [nvarchar](max) NOT NULL,
      [Author] [nvarchar](max) NULL,
      [PublishedDate] [datetime] NULL,
      [ImageUrl] [nvarchar](max) NULL,
      [Description] [nvarchar](max) NULL,
      [CreatedById] [nvarchar](max) NULL,
      CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (
        PAD_INDEX = OFF,
        STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF,
        ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    
    -- Create a backup
    EXEC dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [bookshelf] SET RECOVERY FULL;
      GO
      BACKUP DATABASE bookshelf to disk = '\\witness\Backup\bookshelf.bak' WITH INIT
    GO
    

    La secuencia de comandos crea una base de datos nueva con una sola tabla y realiza una copia de seguridad inicial en witness.

  6. Selecciona Ejecutar para ejecutar la secuencia de comandos SQL.

Configura la alta disponibilidad

Ahora puedes configurar la alta disponibilidad para el grupo de disponibilidad con T-SQL o SQL Server Management Studio.

Usa T-SQL

Para configurar la alta disponibilidad del grupo de disponibilidad con T-SQL, sigue estos pasos:

  1. Conéctate a node-1 y, luego, ejecuta la siguiente secuencia de comandos para crear el grupo de disponibilidad bookshelf-ag.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    USE [bookshelf];
    CREATE USER [NET_DOMAIN\sql_server] FOR LOGIN [NET_DOMAIN\sql_server];
    GO
    
    USE [master];
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  2. Conéctate a node-2 y ejecuta la siguiente secuencia de comandos.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  3. En node-1, ejecuta la siguiente secuencia de comandos para crear el grupo de disponibilidad bookshelf-ag.

    USE master;
    GO
    
    CREATE AVAILABILITY GROUP [bookshelf-ag]
    WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
    CLUSTER_TYPE = WSFC,
    DB_FAILOVER = ON
    )
    FOR DATABASE [bookshelf]
    REPLICA ON
      N'node-1' WITH (
          ENDPOINT_URL = 'TCP://node-1:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      ),
      N'node-2' WITH (
          ENDPOINT_URL = 'TCP://node-2:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      );
    GO
    
  4. En la siguiente secuencia de comandos, reemplaza LISTENER_IP por la dirección IP que reservaste antes para el balanceador de cargas interno y ejecútala.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag]
    ADD LISTENER N'bookshelf' (
    WITH IP (
      (N'LISTENER_IP', N'255.255.255.0')
    ),
    PORT = 1433);
    GO
    
  5. Conéctate a node-2 y, luego, ejecuta la siguiente secuencia de comandos para unir la réplica secundaria al grupo de disponibilidad y habilitar la propagación automática.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN;
    ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
    
    
  6. Verifica el estado del grupo de disponibilidad.

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    Deberías ver synchronization_health_desc como HEALTHY.

Usa SQL Server Management Studio

Para configurar la alta disponibilidad para el grupo de disponibilidad con SQL Server Management Studio, sigue estos pasos:

  1. En la ventana Explorador de objetos, haz clic con el botón derecho en alta disponibilidad siempre activa y, luego, selecciona Nuevo asistente de grupo de disponibilidad.
  2. En la página Especificar opciones, configura el nombre del grupo de disponibilidad en bookshelf-ag y, luego, selecciona Siguiente.
  3. En la página Seleccionar bases de datos, selecciona la base de datos bookshelf y, luego, Siguiente.
  4. En la página Especificar réplicas, selecciona la pestaña Réplicas.

    1. Selecciona Agregar réplica.
    2. En el cuadro de diálogo Conectar al servidor, ingresa el nombre del servidor node-2 y selecciona Conectar.

      La lista de réplicas de disponibilidad ahora contiene instancias de SQL Server, node-1 y node-2.

    3. Configura el modo de disponibilidad como Confirmación síncrona para ambas instancias.

    4. Configura Conmutación por error automática como Habilitada para ambas instancias.

    5. Selecciona la pestaña Listener.

      1. Selecciona Crear un objeto de escucha del grupo de disponibilidad.
      2. Ingresa la siguiente configuración.

        • Nombre de DNS del objeto de escucha: bookshelf
        • Puerto: 1433
        • Modo de red: Static IP.
      3. Selecciona Agregar y, luego, ingresa la dirección IP del objeto de escucha (LISTENER_IP) que reservaste antes para el balanceador de cargas interno. Luego, selecciona Aceptar.

    6. Selecciona Siguiente.

  5. En la página Seleccionar sincronización de datos, selecciona Propagación automática.

  6. En la página Validación, verifica que todas las verificaciones se realicen con éxito.

  7. En la página Resumen, selecciona Finalizar.

  8. En la página Resultados, selecciona Cerrar.

Crea balanceadores de cargas y verificaciones de estado internos

La IP del clúster representa un solo extremo para el clúster de conmutación por error de Windows. Puedes usarlo con fines administrativos y para administrar recursos de clústeres. La IP del clúster siempre apunta al nodo host (o principal) del clúster. Implementas un balanceador de cargas interno que usa una verificación de estado que garantiza que el tráfico se dirija al nodo host del clúster. Como las herramientas de WSFC requieren que varios protocolos estén disponibles para el reenvío (ICMP, UDP y TCP), te recomendamos que implementes un balanceador de cargas interno con varios protocolos que admitan todos los puertos.

Para implementar un balanceador de cargas interno, sigue estos pasos:

  1. Regresa a tu sesión actual de Cloud Shell.
  2. Crea dos grupos de instancias no administrados, uno por zona, y agrega los dos nodos a los grupos.

    REGION=$(gcloud config get-value compute/region)
    
    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $ZONE1
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $ZONE1 \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $ZONE2
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $ZONE2 \
      --instances node-2
    
  3. Crea una verificación de estado para la IP del clúster que el balanceador de cargas pueda usar para determinar cuál es el nodo activo desde la perspectiva del clúster de Windows. El puerto predeterminado al que el agente invitado de Compute Engine responde a las verificaciones de estado es 59998. La verificación de estado proporciona la dirección IP del clúster en la solicitud y espera 1 como respuesta que devuelve el nodo activo.

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --request=$CLUSTER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=2 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    
  4. Crea un servicio de backend y agrega los dos grupos de instancias existentes.

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  5. Crea el balanceador de cargas interno asociado con la IP del clúster.

    gcloud compute forwarding-rules create wsfc \
      --load-balancing-scheme internal \
      --address $CLUSTER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-backend
    

Para proporcionar un extremo único para los clientes de SQL Server que quieran conectarse a cualquier base de datos de tu grupo de disponibilidad bookshelf, implementa un nuevo balanceador de cargas interno dedicado a ese grupo de disponibilidad. Para ello, sigue estos pasos:

  1. Crea una verificación de estado para el objeto de escucha del grupo de disponibilidad que el balanceador de cargas pueda usar para determinar cuál es el nodo principal en el grupo de disponibilidad de SQL Server bookshelf.

    gcloud compute health-checks create tcp wsfc-bookshelf-healthcheck \
      --request=$LISTENER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    

    La verificación de estado usa el mismo puerto del agente invitado de Compute Engine, pero proporciona en su solicitud la dirección IP del objeto de escucha del grupo de disponibilidad bookshelf.

  2. Crea un nuevo servicio de backend y agrega los dos grupos de instancias.

    gcloud compute backend-services create wsfc-bookshelf-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-bookshelf-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  3. Crea el balanceador de cargas interno asociado con el objeto de escucha del grupo de disponibilidad bookshelf-ag de SQL Server.

    gcloud compute forwarding-rules create wsfc-bookshelf \
      --load-balancing-scheme internal \
      --address $LISTENER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-bookshelf-backend
    

Ahora puedes conectarte al objeto de escucha del grupo de disponibilidad de SQL Server mediante el nombre de DNS bookshelf y su puerto definido en el objeto de escucha del grupo de disponibilidad de la biblioteca. El balanceador de cargas interno dirige el tráfico al nodo principal del grupo de disponibilidad bookshelf.

Para crear varios grupos de disponibilidad en un solo clúster de conmutación por error, debes usar servicios de backend y un balanceador de cargas independientes con su propia verificación de estado por grupo de disponibilidad.

Cada grupo de disponibilidad puede tener diferentes nodos designados como principales, y pueden ser diferentes del nodo host del clúster de Windows. Para varios grupos de disponibilidad, necesitas lo siguiente:

  • Una dirección IP estática reservada para el objeto de escucha del grupo de disponibilidad que usa el balanceador de cargas interno Reserva una dirección para cada grupo de disponibilidad.

  • Una regla de verificación de estado independiente para cada grupo de disponibilidad La solicitud de la verificación de estado proporciona la dirección IP estática del objeto de escucha del grupo de disponibilidad (que también es la dirección IP reservada en el paso anterior). La verificación de estado sondea la respuesta 1 que muestra el agente de GCE. Todas las verificaciones de estado usan el puerto 59998.

  • Un servicio de backend independiente para cada grupo de disponibilidad al que agregues los dos grupos de instancias de procesamiento existentes. El servicio de backend usa la verificación de estado definida en el paso anterior.

  • Un balanceador de cargas interno para cada grupo de disponibilidad del servicio de backend que se creó en el paso anterior El balanceador de cargas está asociado con la dirección IP estática del objeto de escucha del grupo de disponibilidad.

Prueba la conmutación por error

Ahora estás listo para probar si la conmutación por error funciona como se esperaba:

  1. Regresa a la sesión de PowerShell en witness.
  2. Ejecuta la siguiente secuencia de comandos.

    while ($True){
      $Conn = New-Object System.Data.SqlClient.SqlConnection
      $Conn.ConnectionString = "Server=tcp:bookshelf,1433;Integrated Security=true;Initial Catalog=master"
      $Conn.Open()
    
      $Cmd = New-Object System.Data.SqlClient.SqlCommand
      $Cmd.Connection = $Conn
      $Cmd.CommandText = "SELECT SERVERPROPERTY('ServerName')"
    
      $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd
      $Data = New-Object System.Data.DataSet
      $Adapter.Fill($Data) | Out-Null
      $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss")
    
      Start-Sleep -Seconds 2
    }
    

    En esta guía, usamos el nombre de DNS bookshelf y el valor del puerto 1433 para el objeto de escucha del grupo de disponibilidad en la definición del servidor tcp:bookshelf,1433.

    Cada 2 segundos, la secuencia de comandos se conecta a SQL Server mediante el objeto de escucha del grupo de disponibilidad y consulta el nombre del servidor.

    Deja la secuencia de comandos en ejecución.

  3. Regresa a la sesión de escritorio remoto en node-1 para activar una conmutación por error.

    1. En SQL Server Management Studio, navega a AlwaysOn High Availability > Availability Groups > bookshelf-ag (Primary) y haz clic con el botón derecho en el nodo.
    2. Selecciona Conmutación por error.
    3. En la página Selecciona una réplica principal nueva, verifica que node-2 se selecciona como una réplica principal nueva y que la columna Preparación para la conmutación por error indique No data loss. Luego, selecciona Siguiente.
    4. En la página Conectar a la réplica, selecciona Conectar.
    5. En el diálogo Conectar al servidor, verifica que el nombre del servidor sea node-2 y haz clic en Conectar.
    6. Selecciona Siguiente y, luego, Listo.
    7. En la página Resultados, verifica que la conmutación por error se haya realizado correctamente.
  4. Regresa a la sesión de PowerShell en witness.

  5. Observa el resultado de la secuencia de comandos en ejecución y observa que el nombre del servidor cambia de node-1 a node-2 como resultado de la conmutación por error.

  6. Para detener la secuencia de comandos, presiona Ctrl+C.

Realiza una limpieza

Una vez que completes el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

¿Qué sigue?