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úster de conmutación por error de SQL Server, los grupos de disponibilidad Always On usan clústeres de conmutación por error de Windows Server (WSFC) para implementar la alta disponibilidad. Sin embargo, las dos funciones se diferencian en los siguientes aspectos:
Grupos de disponibilidad Always On | Instancias de clúster de conmutación por error | |
---|---|---|
Ámbito de la conmutación por error | Grupo de bases de datos | Instancia |
Almacenamiento | No compartido | Compartido |
Para ver una comparación más detallada, consulta Comparación de instancias de clúster de conmutación por error y grupos de disponibilidad.
Los grupos de disponibilidad Always On admiten varios modos de disponibilidad. En este tutorial se muestra cómo puedes implementar grupos de disponibilidad Always On en el modo de confirmación síncrono para implementar la alta disponibilidad de una o varias bases de datos.
Durante la configuración, crearás tres instancias de VM. Dos instancias de VM, node-1
y node-2
, actúan como nodos de clúster y ejecutan SQL Server.
Se usa una tercera instancia de VM, witness
, para conseguir un cuórum en un escenario de conmutación por error.
Las tres instancias de VM se distribuyen en tres zonas y comparten una subred común.
Con un 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. Google Cloud, sin embargo, no tiene en cuenta los anuncios de ARP. Por lo tanto, debes implementar una de las dos opciones siguientes: usar un balanceador de carga interno y un nombre de red distribuido (DNN).
En este artículo se da por hecho que ya has implementado 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 empezar.
Con un 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 carga interno se asegura de que el tráfico se dirija al nodo activo.
Para obtener más información sobre Windows Server Failover Clustering con un balanceador de carga interno, consulta Failover Clustering.
Este diagrama incluye lo siguiente:
- Dos instancias de VM en la misma región y en zonas diferentes para el clúster de conmutación por error llamado
node-1
ynode-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 máquina virtual llamada
witness
actúa como testigo de recurso compartido de archivos para proporcionar un voto de desempate y alcanzar un quórum para la conmutación por error. - Un balanceador de carga interno situado delante del clúster proporciona un único endpoint para los clientes de SQL Server y usa una comprobación del estado para asegurarse de que el tráfico se dirige al nodo activo.
Preparar el proyecto y la red
Para desplegar tus grupos de disponibilidad Always On de SQL Server, debes preparar tuGoogle Cloud proyecto y tu VPC para el despliegue. En las siguientes secciones se explica cómo puedes hacerlo con detalle.
Configurar el proyecto y la región
Para preparar tu proyecto para la implementación de grupos de disponibilidad Always On de SQL Server, haz lo siguiente: Google Cloud
En la Google Cloud consola, abre Cloud Shell haciendo clic en el botón Activar Cloud Shell
.
Inicializa las siguientes variables.
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
Haz los cambios siguientes:
VPC_NAME
: nombre de tu VPCSUBNET_NAME
: nombre de tu subred
Configura tu ID de proyecto predeterminado.
gcloud config set project
PROJECT_ID
Sustituye
PROJECT_ID
por el ID de tu Google Cloud proyecto.Define tu región predeterminada.
gcloud config set compute/region
REGION
Sustituye
REGION
por el ID de la región en la que quieras hacer el despliegue.
Crear reglas de cortafuegos
Para permitir que los clientes se conecten a SQL Server y que los nodos del clúster se comuniquen entre sí, debe crear varias reglas de cortafuegos. Puede usar etiquetas de red para simplificar la creación de estas reglas de cortafuegos de la siguiente manera:
- Los dos nodos del clúster se han anotado con la etiqueta
wsfc-node
. - Todos los servidores (incluido el
witness
) están anotados con la etiquetawsfc
.
Para crear reglas de cortafuegos que usen estas etiquetas de red, siga estos pasos:
- Vuelve a tu sesión de Cloud Shell.
Crea reglas de cortafuegos 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
Crea y despliega dos instancias de VM para el clúster de conmutación por error. En cualquier momento, una de estas VMs 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 los siguientes requisitos:
- Estar ubicados en la misma región para que se pueda acceder a ellos mediante un balanceador de carga de red con paso a través interno.
- Tener instalados Windows Server Failover Cluster y SQL Server.
- Tener habilitada la compatibilidad con WSFC de Compute Engine.
Usas una imagen premium de SQL Server que tiene preinstalado SQL Server 2022.
Para emitir un voto de desempate y alcanzar el quórum en el escenario de conmutación por error, implementa una tercera VM que actúe como testigo de recurso compartido de archivos siguiendo estos pasos:
- Vuelve a tu sesión de Cloud Shell.
Crea una secuencia de comandos especializada para los nodos de WSFC. Esta secuencia de comandos instala las funciones de Windows necesarias 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
Crea las instancias de VM. En las dos máquinas virtuales que actúan como nodos del clúster, conecta un disco de datos adicional y habilita el clúster de conmutación por error de Windows Server. Para ello, asigna el valor
true
a la clave de metadatosenable-wsfc
: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"Sustituye ZONE1, ZONE2 y ZONE3 en función de las zonas que utilices.
Para unir las tres instancias de VM a Active Directory, haz lo siguiente en cada una de ellas:
Monitoriza el proceso de inicialización de la VM viendo la salida de su puerto serie.
gcloud compute instances tail-serial-port-output
NAME
Sustituye
NAME
por el nombre de la instancia de VM.Espera unos minutos hasta que veas el resultado
Instance setup finished
. A continuación, pulsa Ctrl+C. En este punto, la instancia de VM ya se puede usar.Crea un nombre de usuario y una contraseña para la instancia de VM.
Conéctate a la VM mediante Escritorio remoto e inicia sesión con el nombre de usuario y la contraseña que has creado en el paso anterior.
Haz clic con el botón derecho en el botón Inicio (o pulsa Win+X) y, a continuación, en Windows PowerShell (Administrador).
Confirma la solicitud de elevación haciendo clic en Sí.
Une el ordenador a tu dominio de Active Directory y reinícialo.
Add-Computer -Domain
DOMAIN -Restart
Sustituye
DOMAIN
por el nombre DNS de tu dominio de Active Directory.Introduce las credenciales de una cuenta que tenga permisos para unir una VM al dominio.
Espera a que se reinicie la VM. Ahora has unido la instancia de VM a Active Directory.
Reservar direcciones IP estáticas
Ahora tienes dos direcciones IP estáticas reservadas en tu VPC. Una dirección IP se usa como dirección IP predeterminada del clúster WSFC y la otra sirve como IP estática del agente de escucha del grupo de disponibilidad de SQL Server.
En un clúster WSFC, la dirección IP del clúster se usa principalmente para tareas administrativas y para acceder a los recursos del clúster. Esta dirección IP virtual se asigna al clúster en sí, lo que permite a los administradores gestionar el clúster y realizar tareas como configurar los ajustes del clúster, monitorizar el estado de los nodos y gestionar los procesos de conmutación por error.
En el contexto de un grupo de disponibilidad de SQL Server, un agente 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 carga interno necesita una dirección IP interna para enrutar de forma eficiente el tráfico interno y admitir la alta disponibilidad y el balanceo de carga en el contexto de un clúster WSFC. El balanceador de carga interno se asegura de que las solicitudes siempre se dirijan a la réplica principal actual del clúster. Durante los eventos de conmutación por error, el balanceador de carga detecta los cambios en la réplica principal y redirige 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 asegura la disponibilidad continua de los servicios de la base de datos.
En el contexto de un clúster de conmutación por error de Windows Server (WSFC) con grupos de disponibilidad Always On de SQL Server, los balanceadores de carga internos asociados también usan las direcciones IP estáticas internas reservadas para la dirección IP del clúster de WSFC predeterminado y el receptor del grupo de disponibilidad.
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"
Sustituye la dirección IP del clúster en la variable
CLUSTER_IP
. La necesitarás más adelante para especificarla como IP del clúster:CLUSTER_IP=
CLUSTER_IP
Reserva otra IP estática para el receptor del grupo de disponibilidad y captura la dirección en una nueva variable de entorno 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"
Sustituye la dirección IP reservada del balanceador de carga por la variable
LISTENER_IP
. La necesitarás más adelante para configurar tu grupo de disponibilidad.LISTENER_IP=
LISTENER_IP
Tu proyecto y tu VPC ya están listos para implementar el clúster de conmutación por error de Windows Server y SQL Server.
Desplegar el clúster de conmutación por error
Ahora puedes usar las instancias de VM para desplegar 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.
Preparar SQL Server
Crea una cuenta de usuario en Active Directory para SQL Server siguiendo estos pasos.
- Conéctate a
node-1
mediante Escritorio Remoto. Inicia sesión con tu cuenta de usuario del dominio. - Haz clic con el botón derecho en el botón Inicio (o pulsa Win+X) y, a continuación, en Windows PowerShell (Administrador).
- Confirma la solicitud de elevación haciendo clic en Sí.
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, sigue estos pasos en node-1
y node-2
:
- Abre SQL Server Configuration Manager.
- En el panel de navegación, selecciona Servicios de SQL Server.
- En la lista de servicios, haz clic con el botón derecho en SQL Server (MSSQLSERVER) y selecciona Propiedades.
En Iniciar sesión como, cambia la cuenta de la siguiente manera:
- Nombre de la cuenta:
DOMAIN\sql_server
dondeDOMAIN
es el nombre de NetBIOS de tu dominio de Active Directory. - Contraseña: introduce la contraseña que elegiste anteriormente.
- Nombre de la cuenta:
Haz clic en Aceptar.
Cuando se te pida que reinicies SQL Server, selecciona Sí.
SQL Server ahora se ejecuta con una cuenta de usuario de dominio.
Crear recursos compartidos de archivos
Crea dos recursos compartidos de archivos en la instancia de VM witness
para que pueda almacenar copias de seguridad de SQL Server y actuar como testigo de recurso compartido de archivos:
- Conéctate a
witness
mediante Escritorio Remoto. Inicia sesión con tu cuenta de usuario del dominio. - Haz clic con el botón derecho en el botón Inicio (o pulsa Win+X) y, a continuación, en Windows PowerShell (Administrador).
- Confirma la solicitud de elevación haciendo clic en Sí.
Crea un recurso compartido de archivos de testigo y concédete a ti mismo 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$
Crea otro recurso compartido de archivos para almacenar copias de seguridad y concede 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, sigue estos pasos:
- Vuelve a la sesión de Escritorio Remoto en
node-1
. - Haz clic con el botón derecho en el botón Inicio (o pulsa Win+X) y, a continuación, en Windows PowerShell (Administrador).
- Confirma la solicitud de elevación haciendo clic en Sí.
Crea un clúster.
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -StaticAddress
CLUSTER_IP
Sustituye
CLUSTER_IP
por la dirección IP del clúster que has creado anteriormente.Vuelve a la sesión de PowerShell en
witness
y concede al objeto de equipo virtual del clúster permiso 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
Vuelve a la sesión de PowerShell en
node-1
y configura el clúster para que use el recurso compartido de archivos enwitness
como quórum del clúster.Set-ClusterQuorum -FileShareWitness \\witness\QWitness
Verifica que el clúster se haya creado correctamente.
Test-Cluster
Es posible que veas las siguientes advertencias, que puedes ignorar sin problema.
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 MMC Administrador de clústeres de conmutación por error para revisar el estado del clúster ejecutando
cluadmin.msc
.Si usas Managed AD, añade la cuenta de ordenador que usa el clúster de Windows al grupo Cloud Service Domain Join Accounts para que pueda unir ordenadores al dominio.
Add-ADGroupMember ` -Identity "Cloud Service Domain Join Accounts" ` -Members sql-cluster$
Habilita 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, crea una base de datos de ejemplo bookshelf
, la incluyes en un grupo de disponibilidad nuevo llamado bookshelf-ag
y configuras la alta disponibilidad.
Crear bases de datos
Crea una base de datos. Para este tutorial, la base de datos no tiene que contener ningún dato.
- Vuelve a la sesión de Escritorio Remoto en
node-1
. - Abre SQL Server Management Studio.
- En el cuadro de diálogo Conectar con el servidor, comprueba que el nombre del servidor sea
node-1
y selecciona Conectar. - En el menú, selecciona Archivo > Nuevo > Consulta con la conexión actual.
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 con una sola tabla y realiza una copia de seguridad inicial en
witness
.Selecciona Ejecutar para ejecutar la secuencia de comandos SQL.
Configurar la alta disponibilidad
Ahora puede configurar la alta disponibilidad del grupo de disponibilidad mediante T-SQL o SQL Server Management Studio.
Usar T-SQL
Para configurar la alta disponibilidad del grupo de disponibilidad mediante T-SQL, sigue estos pasos:
Conéctate a
node-1
y, a continuación, 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] GOConé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] GOEn
node-1
, ejecuta la siguiente secuencia de comandos para crear el grupo de disponibilidadbookshelf-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
En la siguiente secuencia de comandos, sustituye
LISTENER_IP
por la dirección IP que has reservado anteriormente para el balanceador de carga interno y ejecútala.USE master; GO ALTER AVAILABILITY GROUP [bookshelf-ag] ADD LISTENER N'bookshelf' ( WITH IP ( (N'
', N'255.255.255.0') ), PORT = 1433); GOLISTENER_IP
Conéctate a
node-2
y, a continuación, ejecuta la siguiente secuencia de comandos para unir la réplica secundaria al grupo de disponibilidad y habilitar la inicialización automática.USE master; GO ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN; ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
Comprueba el estado del grupo de disponibilidad.
SELECT * FROM sys.dm_hadr_availability_group_states; GO
Deberías ver
synchronization_health_desc
comoHEALTHY
Usar SQL Server Management Studio
Para configurar la alta disponibilidad del grupo de disponibilidad con SQL Server Management Studio, sigue estos pasos:
- En la ventana Explorador de objetos, haga clic con el botón derecho en Alta disponibilidad Always On y, a continuación, seleccione Nuevo Asistente para grupo de disponibilidad.
- En la página Specify Options (Especificar opciones), asigna el nombre
bookshelf-ag
al grupo de disponibilidad y, a continuación, selecciona Next (Siguiente). - En la página Select Databases (Seleccionar bases de datos), selecciona la base de datos
bookshelf
y, a continuación, Next (Siguiente). En la página Especificar réplicas, selecciona la pestaña Réplicas.
- Selecciona Añadir réplica.
En el cuadro de diálogo Conectar con el servidor, introduce el nombre del servidor
node-2
y selecciona Conectar.La lista de réplicas de disponibilidad ahora contiene instancias de SQL Server,
node-1
ynode-2
.En ambas instancias, defina el modo de disponibilidad como Confirmación síncrona.
En ambas instancias, defina Conmutación por error automática como Habilitada.
Selecciona la pestaña Listener.
- Seleccione Crear un receptor de grupo de disponibilidad.
Introduce los siguientes ajustes.
- Nombre de DNS del receptor:
bookshelf
- Puerto:
1433
- Modo de red: IP estática
- Nombre de DNS del receptor:
Selecciona Añadir e introduce la dirección IP del receptor (
) que has reservado anteriormente para el balanceador de carga interno. A continuación, selecciona Aceptar.LISTENER_IP
Selecciona Siguiente.
En la página Seleccionar sincronización de datos, elija Generación automática.
En la página Validación, compruebe que todas las comprobaciones se han realizado correctamente.
En la página Resumen, selecciona Finalizar.
En la página Resultados, selecciona Cerrar.
Crear balanceadores de carga internos y comprobaciones del estado
La IP del clúster representa un único endpoint para el clúster de conmutación por error de Windows. Se usa 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. Despliega un balanceador de carga interno que usa una comprobación del estado para asegurarse de que el tráfico se dirige 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 balanceador de carga interno con varios protocolos que admitan todos los puertos.
Para implementar un balanceador de carga interno, sigue estos pasos:
- Vuelve a tu sesión de Cloud Shell.
Crea dos grupos de instancias sin gestionar, uno por zona, y añade 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
Crea una comprobación del estado para la IP del clúster que el balanceador de carga pueda usar para determinar cuál es el nodo activo desde la perspectiva del clúster de Windows. El puerto predeterminado al que responde el agente invitado de Compute Engine a las comprobaciones de estado es
59998
. La comprobación del estado proporciona la dirección IP del clúster en la solicitud y espera que el nodo activo devuelva 1 como respuesta.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"
Crea un servicio de backend y añade los dos grupos de instancias que ya tienes.
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
Crea el balanceador de carga interno asociado a 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 endpoint a los clientes de SQL Server que quieran conectarse a cualquier base de datos de tu grupo de disponibilidad de bookshelf
, implementa un nuevo balanceador de carga interno dedicado a ese grupo de disponibilidad. Para ello, sigue estos pasos:
Crea una comprobación de estado para el receptor del grupo de disponibilidad que el balanceador de carga pueda usar para determinar cuál es el nodo principal del
bookshelf
grupo de disponibilidad de SQL Server.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 comprobación de estado usa el mismo puerto del agente invitado de Compute Engine, pero proporciona en su solicitud la dirección IP del receptor del grupo de disponibilidad
bookshelf
.Crea un servicio de backend y añade 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
Crea el balanceador de carga interno asociado al
bookshelf-ag
listener del grupo de disponibilidad 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 agente de escucha del grupo de disponibilidad de SQL Server mediante el nombre DNS bookshelf
y su puerto definido en el agente de escucha del grupo de disponibilidad de la estantería.
El balanceador 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, debes usar servicios de backend independientes y un balanceador de carga independiente con su propia comprobación de estado por cada grupo de disponibilidad.
Cada grupo de disponibilidad puede tener nodos diferentes designados como principales, y pueden ser distintos del nodo host del clúster de Windows. Si tienes varios grupos de disponibilidad, necesitas lo siguiente:
Una dirección IP estática reservada para el receptor del grupo de disponibilidad que usa el balanceador de carga interno. Reserva una dirección para cada grupo de disponibilidad.
Una regla de comprobación de estado independiente para cada grupo de disponibilidad. La solicitud de comprobación del estado proporciona la dirección IP estática del receptor del grupo de disponibilidad (que también es la dirección IP reservada en el paso anterior). La comprobación del estado busca la respuesta
1
devuelta por el agente de GCE. Todas las comprobaciones del estado usan el puerto59998
.Un servicio de backend independiente para cada grupo de disponibilidad al que añadas los dos grupos de instancias de proceso. El servicio backend usa la comprobación del estado definida en el paso anterior.
Un balanceador de carga interno para cada grupo de disponibilidad del servicio de backend creado en el paso anterior. El balanceador de carga está asociado a la dirección IP estática del agente de escucha del grupo de disponibilidad.
Probar la conmutación por error
Ahora puedes probar si la conmutación por error funciona correctamente:
- Vuelve a la sesión de PowerShell en
witness
. 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, hemos usado el nombre DNS
bookshelf
y el valor del puerto1433
para el receptor del grupo de disponibilidad en la definición del servidortcp:bookshelf,1433
.Cada 2 segundos, la secuencia de comandos se conecta a SQL Server mediante el agente de escucha del grupo de disponibilidad y consulta el nombre del servidor.
Deja que el script se ejecute.
Vuelve a la sesión de Escritorio remoto en
node-1
para activar una conmutación por error.- En SQL Server Management Studio, ve a Always On Alta disponibilidad > Grupos de disponibilidad > bookshelf-ag (Principal) y haz clic con el botón derecho en el nodo.
- Selecciona Conmutación por error.
- En la página Seleccionar nueva réplica principal, comprueba que
node-2
esté seleccionada como nueva réplica principal y que la columna Preparación para la conmutación por error indiqueNo data loss
. A continuación, selecciona Siguiente. - En la página Conectar con réplica, selecciona Conectar.
- En el cuadro de diálogo Conectar con el servidor, comprueba que el nombre del servidor sea
node-2
y haz clic en Conectar. - Selecciona Siguiente y, a continuación, Finalizar.
- En la página Resultados, comprueba que la conmutación por error se haya realizado correctamente.
Vuelve a la sesión de PowerShell en
witness
.Observa el resultado de la secuencia de comandos en ejecución y verás que el nombre del servidor cambia de
node-1
anode-2
como resultado de la conmutación por error.Para detener la secuencia de comandos, pulsa
Ctrl+C
.