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 .
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
ynode-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:
- Implementar un WSFC que comprenda dos instancias de VM de SQL Server y una tercera instancia de VM que actúe como testigo del recurso compartido de archivos.
- Crear un grupo de disponibilidad con confirmación sincrónica
- Configurar un equilibrador de carga
- Verifique que la configuración esté funcionando simulando una conmutación por error
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:
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 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.
- 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 - Un proyecto de Google Cloud y una nube privada virtual (VPC) con conectividad a sus controladores de dominio de Active Directory.
- Una subred que se utilizará para las instancias de VM del clúster de conmutación por error de Windows Server.
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:
En la consola de Google Cloud, abra Cloud Shell haciendo clic en Activar Cloud Shell
botón.
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
-
Establezca su ID de proyecto predeterminado.
gcloud config set project
PROJECT_ID
Reemplace
PROJECT_ID
con el ID de su proyecto de Google Cloud.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 etiquetawsfc
.
Para crear reglas de firewall que utilicen estas etiquetas de red, siga los siguientes pasos:
- Regrese a su sesión actual de Cloud Shell.
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:
- Regrese a su sesión actual de Cloud Shell.
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
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
entrue
: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.
Para unir las tres instancias de VM a Active Directory, haga lo siguiente para cada una de las tres instancias de VM:
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.Cree un nombre de usuario y una contraseña para la instancia de VM.
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.
Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .
Confirme el mensaje de elevación haciendo clic en Sí .
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.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.
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"
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
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"
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.
- Conéctese al
node-1
mediante Escritorio remoto . Inicie sesión con su cuenta de usuario de dominio. - Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .
- Confirme el mensaje de elevación haciendo clic en Sí .
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:
- Abra el Administrador de configuración de SQL Server .
- En el panel de navegación, seleccione Servicios de SQL Server .
- En la lista de servicios, haga clic derecho en SQL Server (MSSQLSERVER) y seleccione Propiedades .
En Iniciar sesión como , cambie la cuenta de la siguiente manera:
- Nombre de cuenta:
DOMAIN \sql_server
dondeDOMAIN
es el nombre NetBIOS de su dominio de Active Directory. - Contraseña: Ingrese la contraseña que eligió anteriormente.
- Nombre de cuenta:
Haga clic en Aceptar .
Cuando se le solicite reiniciar SQL Server, seleccione Sí .
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:
- Conéctese para
witness
mediante Escritorio remoto . Inicie sesión con su cuenta de usuario de dominio. - Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .
- Confirme el mensaje de elevación haciendo clic en Sí .
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$
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:
- Regrese a la sesión de Escritorio remoto en
node-1
. - Haga clic derecho en el botón Inicio (o presione Win+X ) y haga clic en Windows PowerShell (Administrador) .
- Confirme el mensaje de elevación haciendo clic en Sí .
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.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
Regrese a la sesión de PowerShell en
node-1
y configure el clúster para usar el recurso compartido de archivos enwitness
como quórum del clúster.Set-ClusterQuorum -FileShareWitness \\witness\QWitness
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
.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$
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.
- Regrese a la sesión de Escritorio remoto en
node-1
. - Abra SQL Server Management Studio .
- En el cuadro de diálogo Conectar al servidor , verifique que el nombre del servidor esté configurado en
node-1
y seleccione Conectar . - En el menú, seleccione Archivo > Nuevo > Consulta con conexión actual .
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
.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:
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] GOConé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] GOEn
node-1
y luego ejecute el siguiente script 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 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'
', N'255.255.255.0') ), PORT = 1433); GOLISTENER_IP
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;
Verifique el estado del grupo de disponibilidad.
SELECT * FROM sys.dm_hadr_availability_group_states; GO
Deberías ver
synchronization_health_desc
comoHEALTHY
Usando SQL Server Management Studio
Para configurar la alta disponibilidad para el grupo de disponibilidad mediante SQL Server Management Studio, siga los siguientes pasos:
- 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 .
- En la página Especificar opciones , establezca el nombre del grupo de disponibilidad en
bookshelf-ag
y luego seleccione Siguiente . - En la página Seleccionar bases de datos , seleccione la base de datos
bookshelf
y luego seleccione Siguiente . En la página Especificar réplicas , seleccione la pestaña Réplicas .
- Seleccione Agregar réplica .
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
ynode-2
.Establezca el modo de disponibilidad en confirmación sincrónica para ambas instancias.
Establezca la conmutación por error automática en Habilitado para ambas instancias.
Seleccione la pestaña Oyente
- Seleccione Crear un agente de escucha de grupo de disponibilidad .
Ingrese las siguientes configuraciones.
- Nombre DNS del oyente :
bookshelf
- Puerto :
1433
- Modo de red : IP estática
- Nombre DNS del oyente :
Seleccione Agregar e ingrese la dirección IP del escucha (
) que reservó anteriormente para el balanceador de carga interno. Luego seleccione Aceptar .LISTENER_IP
Seleccione Siguiente .
En la página Seleccionar sincronización de datos , seleccione Siembra automática .
En la página Validación , verifique que todas las comprobaciones sean exitosas.
En la página Resumen , seleccione Finalizar .
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:
- Regrese a su sesión actual de Cloud Shell.
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
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"
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
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:
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
.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
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 puerto59998
.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:
- Regrese a la sesión de PowerShell en
witness
. 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 puerto1433
para el escucha del grupo de disponibilidad en la definición del servidortcp: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.
Regrese a la sesión de Escritorio remoto en
node-1
para activar una conmutación por error.- En SQL Server Management Studio , navegue hasta Always On High Availability > Grupos de disponibilidad > bookshelf-ag (Primario) y haga clic derecho en el nodo.
- Seleccione Conmutación por error .
- 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 indiqueNo data loss
. Luego seleccione Siguiente . - En la página Conectar a la réplica , seleccione Conectar .
- En el cuadro de diálogo Conectar al servidor , verifique que el nombre del servidor sea
node-2
y haga clic en Conectar . - Seleccione Siguiente y luego Finalizar .
- En la página Resultados , verifique que la conmutación por error se haya realizado correctamente.
Regrese a la sesión de PowerShell en
witness
.Observe el resultado del script en ejecución y observe que el nombre del servidor cambia del
node-1
alnode-2
como resultado de la conmutación por error.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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.