Configure grupos de disponibilidad Always On de SQL Server con confirmación sincrónica mediante un equilibrador de carga interno


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

De manera similar a las instancias de clúster de conmutación por error de SQL Server , los grupos de disponibilidad Always On utilizan el clúster de conmutación por error de Windows Server (WSFC) para implementar alta disponibilidad. Sin embargo, las dos características difieren en los siguientes aspectos:

Grupos de disponibilidad Always On Instancias de clúster 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, consulte Comparación de instancias de clúster de conmutación por error y grupos de disponibilidad .

Los grupos de disponibilidad Always On admiten múltiples modos de disponibilidad . Este tutorial muestra cómo implementar grupos de disponibilidad Always On en modo de confirmación sincrónica para implementar alta disponibilidad para una o más bases de datos.

En la configuración, creará tres instancias de VM. Dos instancias de VM, node-1 y node-2 sirven como nodos del clúster y ejecutan SQL Server. Se utiliza una tercera instancia de VM, witness , para lograr un quórum en un escenario de conmutación por error. Las tres instancias de VM están distribuidas en tres zonas y comparten una subred común.

Al utilizar un grupo de disponibilidad Always On de SQL Server, se replica sincrónicamente una base de datos de ejemplo, bookshelf , 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 .Google Cloud, sin embargo, ignora los anuncios ARP. En consecuencia, debe implementar una de las siguientes dos opciones: usar un balanceador de carga interno y un nombre de red distribuida (DNN).

El artículo supone que ya ha implementado Active Directory en Google Cloudy que tengas conocimientos básicos de SQL Server, Active Directory y Compute Engine. Para obtener más información sobre Active Directory en Google Cloud, consulte la sección Antes de comenzar .

Al utilizar un grupo de disponibilidad Always On de SQL Server, se replica sincrónicamente una base de datos de ejemplo, bookshelf , en las dos instancias de SQL Server. Un equilibrador de carga interno garantiza que el tráfico se dirija al nodo activo.

Para obtener más información sobre los clústeres de conmutación por error de Windows Server con un equilibrador de carga interno, consulte clústeres de conmutación por error .

Arquitectura

Este diagrama incluye lo siguiente:

  • Dos instancias de VM en la misma región y diferentes zonas para el clúster de conmutación por error denominado node-1 y node-2 . Uno hospeda la réplica principal de la base de datos de SQL Server mientras que el otro nodo hospeda la réplica secundaria.
  • Un tercer VM llamado witness sirve como testigo de intercambio de archivos para proporcionar un voto de desempate y lograr un quórum para la conmutación por error.
  • Un equilibrador de carga interno frente al clúster proporciona un punto final único para los clientes de SQL Server y utiliza una verificación de estado para garantizar que el tráfico se dirija al nodo activo.

Objetivos

Este tutorial pretende conseguir los siguientes objetivos:

Costos

Este tutorial utiliza componentes facturables de Google Cloud, incluido:

Utilice la calculadora de precios para generar una estimación de costos basada en su uso proyectado.

Antes de comenzar

Para completar las tareas de este tutorial, asegúrese 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. Tiene un dominio de Active Directory con al menos un controlador de dominio. Puede crear un dominio de Active Directory utilizando Microsoft AD administrado . Alternativamente, puedes implementar un entorno de Active Directory personalizado en Compute Engine y configurar una zona de reenvío de DNS privada que reenvíe consultas de DNS a tus controladores de dominio.
  7. Tiene un usuario de Active Directory que tiene permiso para unir computadoras al dominio y puede iniciar sesión mediante RDP. Si está utilizando Microsoft AD administrado, puede usar el usuario setupadmin . Para obtener más información sobre el aprovisionamiento de cuentas de usuario de Active Directory, consulte Aprovisionamiento de cuentas de usuario de Active Directory
  8. Un proyecto de Google Cloud y una nube privada virtual (VPC) con conectividad a sus controladores de dominio de Active Directory.
  9. Una subred que se utilizará para las instancias de VM del clúster de conmutación por error de Windows Server.
Cuando termine este tutorial, podrá evitar la facturación continua eliminando los recursos que creó. Para obtener más información, consulte Limpieza .

Prepara tu proyecto y red

Para implementar sus grupos de disponibilidad Always On de SQL Server, debe preparar su proyecto de Google Cloud y su VPC para la implementación. Las siguientes secciones analizan cómo puede hacer esto en detalle.

Configura tu proyecto y región

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

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

    Ve a la consola de Google Cloud

  2. Inicialice las siguientes variables.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Reemplace lo siguiente:

    • VPC_NAME : nombre de su VPC
    • SUBNET_NAME : nombre de tu subred
  3. Establezca su ID de proyecto predeterminado.

    gcloud config set project PROJECT_ID
    

    Reemplace PROJECT_ID con el ID de su proyecto de Google Cloud.

  4. Establece tu región predeterminada.

    gcloud config set compute/region REGION
    

    Reemplace REGION con el ID de la región en la que desea implementar.

Crear reglas de firewall

Para permitir que los clientes se conecten al servidor SQL y la comunicación entre los nodos del clúster, debe crear varias reglas de firewall. Puede utilizar etiquetas de red para simplificar la creación de estas reglas de firewall, de la siguiente manera:

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

Para crear reglas de firewall que utilicen estas etiquetas de red, siga los siguientes pasos:

  1. Regrese a su sesión actual de Cloud Shell.
  2. Cree 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
    

Crear instancias de VM

Cree e implemente dos instancias de VM para el clúster de conmutación por error. En cualquier momento, una de estas máquinas virtuales hospeda la réplica principal de la base de datos de SQL Server mientras que el otro nodo hospeda la réplica secundaria. Las dos instancias de VM deben:

  • estar ubicados en la misma región para que se pueda acceder a ellos mediante un balanceador de carga de red de paso interno.
  • tener instalado el clúster de conmutación por error de Windows Server y SQL Server.
  • tener habilitada la compatibilidad con Compute Engine WSFC .

Utiliza una imagen premium de SQL Server que tiene SQL Server 2022 preinstalado.

Para proporcionar una votación de desempate y lograr un quórum para el escenario de conmutación por error, implemente una tercera máquina virtual que sirva como testigo del recurso compartido de archivos mediante los siguientes pasos:

  1. Regrese a su sesión actual de Cloud Shell.
  2. Cree un script especializado para los nodos WSFC. Este script 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. Cree las instancias de VM. En las dos máquinas virtuales que sirven como nodos del clúster, conecte un disco de datos adicional y habilite el clúster de conmutación por error de Windows Server configurando 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"
    

    Reemplace ZONE1 , ZONE2 , ZONE3 según las zonas que esté utilizando.

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

    1. Supervise el proceso de inicialización de la VM viendo la salida del puerto serie.

      gcloud compute instances tail-serial-port-output NAME
      

      Reemplace NAME con el nombre de la instancia de VM.

      Espere unos minutos hasta que vea que la Instance setup finished y luego presione Ctrl+C. En este punto, la instancia de VM está lista para usarse.

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

    3. Conéctese a la máquina virtual mediante Escritorio remoto e inicie sesión con el nombre de usuario y la contraseña creados en el paso anterior.

    4. Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .

    5. Confirme el mensaje de elevación haciendo clic en .

    6. Una la computadora a su dominio de Active Directory y reinicie.

      Add-Computer -Domain DOMAIN -Restart
      

      Reemplace DOMAIN con el nombre DNS de su dominio de Active Directory.

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

      Espere a que la VM se reinicie. Ahora ha unido la instancia de VM a Active Directory.

Reservar direcciones IP estáticas

Ahora reserva dos direcciones IP estáticas en su VPC. Una dirección IP se utiliza como dirección IP predeterminada del clúster WSFC, la otra sirve como IP estática para el escucha del grupo de disponibilidad de SQL Server.

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

En el contexto del grupo de disponibilidad de SQL Server, un 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 equilibrador de carga interno necesita una dirección IP interna para enrutar de manera eficiente el tráfico interno y admitir alta disponibilidad y equilibrio de carga en el contexto de un clúster WSFC. El equilibrador de carga 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 carga detecta cambios en la réplica principal y redirige las conexiones del cliente a la nueva principal sin requerir 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 carga internos asociados también utilizan las direcciones IP estáticas internas reservadas para la dirección IP predeterminada del clúster de WSFC y el escucha del grupo de disponibilidad.

  1. Para reservar dos direcciones IP estáticas en su VPC, siga los siguientes 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. Reemplace la dirección IP del clúster en la variable CLUSTER_IP ; la necesitará más adelante para especificarla como IP del clúster:

    CLUSTER_IP=CLUSTER_IP
    
  3. Reserve otra IP estática para el escucha del grupo de disponibilidad y capture la dirección en una nueva variable de entorno denominada 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. Reemplace la dirección IP reservada del balanceador de carga como la variable LISTENER_IP ; la necesitará más adelante para configurar su grupo de disponibilidad.

    LISTENER_IP=LISTENER_IP
    

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

Implementación del clúster de conmutación por error

Ahora puede usar las instancias de VM para implementar un clúster de conmutación por error de Windows Server y SQL Server. Las siguientes secciones analizan cómo puede hacer esto en detalle.

Preparando el servidor SQL

Cree una nueva cuenta de usuario en Active Directory para SQL Server siguiendo los siguientes pasos.

  1. Conéctese al node-1 mediante Escritorio remoto . Inicie sesión con su cuenta de usuario de dominio.
  2. Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .
  3. Confirme el mensaje de elevación haciendo clic en .
  4. Cree una cuenta de usuario de dominio para el servidor SQL y el agente SQL y asigne 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, realice los siguientes pasos tanto en node-1 como en node-2 , utilice los siguientes pasos:

  1. Abra el Administrador de configuración de SQL Server .
  2. En el panel de navegación, seleccione Servicios de SQL Server .
  3. En la lista de servicios, haga clic derecho en SQL Server (MSSQLSERVER) y seleccione Propiedades .
  4. En Iniciar sesión como , cambie la cuenta de la siguiente manera:

    • Nombre de cuenta: DOMAIN \sql_server donde DOMAIN es el nombre NetBIOS de su dominio de Active Directory.
    • Contraseña: Ingrese la contraseña que eligió anteriormente.
  5. Haga clic en Aceptar .

  6. Cuando se le solicite reiniciar SQL Server, seleccione .

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

Crear archivos compartidos

Cree dos archivos compartidos en el witness de la instancia de VM para que pueda almacenar copias de seguridad de SQL Server y actuar como testigo del recurso compartido de archivos:

  1. Conéctese para witness mediante Escritorio remoto . Inicie sesión con su cuenta de usuario de dominio.
  2. Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .
  3. Confirme el mensaje de elevación haciendo clic en .
  4. Cree un recurso compartido de archivos testigo y concédase a usted y a los dos nodos del clúster acceso al recurso compartido de archivos.

    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. Cree otro recurso compartido de archivos para almacenar copias de seguridad y otorgar acceso completo a SQL Server:

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

Crear el clúster de conmutación por error

Para crear el clúster de conmutación por error, siga los siguientes pasos:

  1. Regrese a la sesión de Escritorio remoto en node-1 .
  2. Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .
  3. Confirme el mensaje de elevación haciendo clic en .
  4. Crea un nuevo clúster.

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

    Reemplace CLUSTER_IP con la dirección IP del clúster que creó anteriormente.

  5. Regrese a la sesión de PowerShell como witness y otorgue permiso al objeto de computadora virtual del clúster para acceder al recurso compartido de archivos.

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

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

    Test-Cluster
    

    Es posible que vea las siguientes advertencias que puede ignorar con seguridad.

    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 puede iniciar el complemento MMC del Administrador de clústeres de conmutación por error para revisar el estado del clúster ejecutando cluadmin.msc .

  8. Si está utilizando AD administrado, agregue la cuenta de computadora utilizada por el clúster de Windows al grupo Cuentas de unión al 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. Habilite los grupos de disponibilidad Always On en ambos nodos.

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

Crear un grupo de disponibilidad

Ahora creará una bookshelf de base de datos de muestra, la incluirá en un nuevo grupo de disponibilidad denominado bookshelf-ag y configurará la alta disponibilidad.

Creando una base de datos

Crea una nueva base de datos. Para los fines de este tutorial, no es necesario que la base de datos contenga ningún dato.

  1. Regrese a la sesión de Escritorio remoto en node-1 .
  2. Abra SQL Server Management Studio .
  3. En el cuadro de diálogo Conectar al servidor , verifique que el nombre del servidor esté configurado en node-1 y seleccione Conectar .
  4. En el menú, seleccione Archivo > Nuevo > Consulta con conexión actual .
  5. Pegue el siguiente script 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
    

    El script crea una nueva base de datos con una sola tabla y realiza una copia de seguridad inicial para witness .

  6. Seleccione Ejecutar para ejecutar el script SQL.

Configurar alta disponibilidad

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

Usando T-SQL

Para configurar la alta disponibilidad para el grupo de disponibilidad mediante T-SQL, siga los siguientes pasos:

  1. Conéctese al node-1 y luego ejecute el siguiente script 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éctese al node-2 y ejecute el siguiente script.

    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 y luego ejecute el siguiente script 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 el siguiente script, reemplace LISTENER_IP con la dirección IP que reservó anteriormente para el balanceador de carga interno y ejecútelo.

    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éctese al node-2 y luego ejecute el siguiente script 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. Verifique el estado del grupo de disponibilidad.

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    Deberías ver synchronization_health_desc como HEALTHY

Usando SQL Server Management Studio

Para configurar la alta disponibilidad para el grupo de disponibilidad mediante SQL Server Management Studio, siga los siguientes pasos:

  1. En la ventana del Explorador de objetos , haga clic con el botón derecho en Siempre en alta disponibilidad y luego seleccione Asistente para nuevo grupo de disponibilidad .
  2. En la página Especificar opciones , establezca el nombre del grupo de disponibilidad en bookshelf-ag y luego seleccione Siguiente .
  3. En la página Seleccionar bases de datos , seleccione la base de datos bookshelf y luego seleccione Siguiente .
  4. En la página Especificar réplicas , seleccione la pestaña Réplicas .

    1. Seleccione Agregar réplica .
    2. En el cuadro de diálogo Conectar al servidor , ingrese el nombre del servidor node-2 y seleccione Conectar .

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

    3. Establezca el modo de disponibilidad en confirmación sincrónica para ambas instancias.

    4. Establezca la conmutación por error automática en Habilitado para ambas instancias.

    5. Seleccione la pestaña Oyente

      1. Seleccione Crear un agente de escucha de grupo de disponibilidad .
      2. Ingrese las siguientes configuraciones.

        • Nombre DNS del oyente : bookshelf
        • Puerto : 1433
        • Modo de red : IP estática
      3. Seleccione Agregar e ingrese la dirección IP del escucha ( LISTENER_IP ) que reservó anteriormente para el balanceador de carga interno. Luego seleccione Aceptar .

    6. Seleccione Siguiente .

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

  6. En la página Validación , verifique que todas las comprobaciones sean exitosas.

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

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

Cree balanceadores de carga internos y controles de estado

La IP del clúster representa un único punto final para el clúster de conmutación por error de Windows. Lo utiliza con fines administrativos y para gestionar los recursos del clúster. La IP del clúster siempre apunta al nodo host (o principal) del clúster. Implementa un equilibrador de carga interno que utiliza 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 haya varios protocolos disponibles para el reenvío (ICMP, UDP y TCP), recomendamos implementar un equilibrador de carga interno con múltiples protocolos que admitan todos los puertos .

Para implementar un equilibrador de carga interno, siga los siguientes pasos:

  1. Regrese a su 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. Cree una verificación de estado para la IP del clúster que el equilibrador de carga puede 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 comprobaciones 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 del 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. Cree un servicio backend y agregue 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. Cree el equilibrador de carga 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 único punto final para los clientes de SQL Server que desean conectarse a cualquier base de datos en su grupo de disponibilidad bookshelf , implemente un nuevo equilibrador de carga interno dedicado a ese grupo de disponibilidad, siga los siguientes pasos:

  1. Cree una verificación de estado para el escucha del grupo de disponibilidad que el equilibrador de carga puede 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 utiliza el mismo puerto del agente invitado de Compute Engine, pero proporciona en su solicitud la dirección IP del oyente del grupo de disponibilidad bookshelf .

  2. Cree un nuevo servicio backend y agregue 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. Cree el equilibrador de carga interno asociado con el 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 puede conectarse al escucha del grupo de disponibilidad de SQL Server utilizando la bookshelf de nombres DNS y su puerto definido en el escucha del grupo de disponibilidad de la estantería. El equilibrador de carga interno dirige el tráfico al nodo principal del grupo de disponibilidad bookshelf .

Para crear varios grupos de disponibilidad en un único clúster de conmutación por error, debe utilizar servicios backend independientes y un equilibrador de carga independiente con su propia comprobación de estado por grupo de disponibilidad.

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

  • Una dirección IP estática reservada para el escucha del grupo de disponibilidad que utiliza el equilibrador de carga interno. Reserve una dirección para cada grupo de disponibilidad.

  • Una regla de verificación de estado separada para cada grupo de disponibilidad. La solicitud de la verificación de estado proporciona la dirección IP estática del escucha del grupo de disponibilidad (que también es la dirección IP reservada en el paso anterior). La verificación de estado busca la respuesta 1 devuelta por el agente de GCE. Todos los controles de estado utilizan el puerto 59998 .

  • Un servicio backend independiente para cada grupo de disponibilidad al que agregue los dos grupos de instancias informáticas existentes. El servicio backend utiliza la verificación de estado definida en el paso anterior.

  • Un equilibrador de carga interno para cada grupo de disponibilidad para el servicio backend creado en el paso anterior. El equilibrador de carga está asociado con la dirección IP estática del escucha del grupo de disponibilidad.

Probar la conmutación por error

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

  1. Regrese a la sesión de PowerShell en witness .
  2. Ejecute el siguiente script.

    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, utilizamos la bookshelf de nombres DNS y el valor de puerto 1433 para el escucha del grupo de disponibilidad en la definición del servidor tcp:bookshelf,1433 .

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

    Deje el script ejecutándose.

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

    1. En SQL Server Management Studio , navegue hasta Always On High Availability > Grupos de disponibilidad > bookshelf-ag (Primario) y haga clic derecho en el nodo.
    2. Seleccione Conmutación por error .
    3. En la página Seleccionar nueva réplica principal , verifique que node-2 esté seleccionado como nueva réplica principal y que la columna Preparación de conmutación por error indique No data loss . Luego seleccione Siguiente .
    4. En la página Conectar a la réplica , seleccione Conectar .
    5. En el cuadro de diálogo Conectar al servidor , verifique que el nombre del servidor sea node-2 y haga clic en Conectar .
    6. Seleccione Siguiente y luego Finalizar .
    7. En la página Resultados , verifique que la conmutación por error se haya realizado correctamente.
  4. Regrese a la sesión de PowerShell en witness .

  5. Observe el resultado del script en ejecución y observe que el nombre del servidor cambia del node-1 al node-2 como resultado de la conmutación por error.

  6. Detenga el script presionando Ctrl+C .

Limpiar

Una vez que termine el tutorial, puede limpiar los recursos que creó para que dejen de usar cuota y de incurrir en cargos. Las siguientes secciones describen cómo eliminar o desactivar estos recursos.

Eliminando el proyecto

La forma más sencilla de eliminar la facturación es eliminar el proyecto que creaste para el tutorial.

Para eliminar el proyecto:

  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?