Configure un grupo de conmutación por error para un grupo elástico de Azure SQL Database y pruebe la conmutación por error mediante Azure Portal. En este tutorial, aprenderá a:
En este paso, se crea un servidor de SQL Server lógico y una base de datos única que use los datos de ejemplo de AdventureWorksLT. Puede crear la base de datos mediante menús y pantallas de Azure Portal, o mediante un script de la CLI de Azure o de PowerShell en Azure Cloud Shell.
Todos los métodos incluyen la configuración de una regla de firewall en el nivel de servidor que permita a la dirección IP pública del equipo que está usando acceder al servidor. Para más información acerca de cómo crear reglas de firewall de nivel de servidor, consulte Creación de un firewall de nivel de servidor. También puede establecer reglas de firewall en el nivel de base de datos. Consulte Creación de una regla de firewall de nivel de base de datos.
En la barra de búsqueda, busque y seleccione Azure SQL.
En la página Azure SQL, seleccione Agregar.
En la página Seleccione una opción de implementación de SQL, seleccione el icono Bases de datos SQL, con Base de datos única en Tipo de recurso. Puede ver más información sobre las diferentes bases de datos si selecciona Mostrar detalles.
Seleccione Crear.
En la pestaña Básico del formulario Crear base de datos SQL, en Detalles del proyecto, seleccione la Suscripción de Azure correcta, si aún no lo está.
En Grupo de recursos, seleccione Crear nuevo, escriba miGrupoDeRecursos y seleccione Aceptar.
En Detalles de la base de datos, en Nombre de la base de datos escriba miBaseDeDatosDeEjemplo.
En Servidor, seleccione Crear nuevo y rellene el formulario Nuevo servidor como se indica a continuación:
Nombre del servidor: escriba miservidorsql y algunos caracteres para que el nombre sea único.
Inicio de sesión del administrador del servidor: escriba usuarioazure.
Contraseña: escriba una contraseña que cumpla los requisitos y escríbala de nuevo en el campo Confirmar contraseña.
Ubicación: despliegue los campos y elija una ubicación, como (EE. UU.) Este de EE. UU. .
Seleccione Aceptar.
Registre el inicio de sesión y la contraseña del administrador del servidor para poder iniciar sesión en el servidor y en sus bases de datos. Si olvida el inicio de sesión o la contraseña, puede obtener el nombre de inicio de sesión o restablecer la contraseña en la página SQL Server tras crear la base de datos. Para abrir la página SQL Server, seleccione el nombre del servidor en la página Información general de la base de datos.
En Proceso y almacenamiento, si desea volver a configurar los valores predeterminados, seleccione Configurar base de datos.
En la página Configurar, puede:
Cambiar el Nivel de proceso de Aprovisionado a Sin servidor.
Revisar y cambiar la configuración de Núcleos virtuales y Tamaño máximo de datos.
Seleccionar Cambiar configuración para cambiar la generación del hardware.
Después de realizar cambios, seleccione Aplicar.
Seleccione Siguiente: Redes en la parte inferior de la página.
En la pestaña Redes, en Método de conectividad, seleccione Punto de conexión público.
En Reglas de firewall, establezca Agregar dirección IP del cliente actual en Sí.
Seleccione Siguiente: Configuración adicional en la parte inferior de la página.
Opcionalmente, establezca la ventana de mantenimiento para que el mantenimiento planeado se realice en el mejor momento para la base de datos.
En la parte inferior de la página, seleccione Revisar y crear.
Después de revisar la configuración, seleccione Crear.
Puede crear un grupo de recursos de Azure, un servidor y una base de datos única desde la interfaz de la línea de comandos de Azure (CLI de Azure). Si no desea usar Azure Cloud Shell, instale la CLI de Azure en el equipo.
Para ejecutar el ejemplo de código siguiente en Azure Cloud Shell, seleccione Probar en la barra de título del ejemplo de código. Cuando se abra Cloud Shell, seleccione Copiar en la barra de título del ejemplo de código y pegue el ejemplo de código en la ventana de Cloud Shell. En el código, reemplace <Subscription ID> por su identificador de suscripción de Azure y, en $startip y $endip, reemplace 0.0.0.0 por la dirección IP pública del equipo que está usando.
Siga las indicaciones en pantalla para iniciar sesión en Azure y ejecutar el código.
También puede usar Azure Cloud Shell desde Azure Portal; para ello, seleccione el icono de Cloud Shell en la barra superior.
La primera vez que use Cloud Shell en el portal, seleccione Bash en el cuadro de diálogo de bienvenida. Las sesiones posteriores usarán la CLI de Azure en un entorno de Bash o bien puede seleccionar Bash en la barra de control de Cloud Shell.
El siguiente código de la CLI de Azure crea un grupo de recursos, un servidor, una base de datos única y una regla de firewall de IP de nivel de servidor para el acceso al servidor. Asegúrese de registrar el grupo de recursos y los nombres de servidor generados, para poder administrar estos recursos más adelante.
#!/bin/bash
# Sign in to Azure and set execution context (if necessary)
az login
az account set --subscription <Subscription ID>
# Set the resource group name and location for your server
resourceGroupName=myResourceGroup-$RANDOM
location=westus2
# Set an admin login and password for your database
adminlogin=azureuser
password=Azure1234567
# Set a server name that is unique to Azure DNS (<server_name>.database.windows.net)
servername=server-$RANDOM
# Set the ip address range that can access your database
startip=0.0.0.0
endip=0.0.0.0
# Create a resource group
az group create \
--name $resourceGroupName \
--location $location
# Create a server in the resource group
az sql server create \
--name $servername \
--resource-group $resourceGroupName \
--location $location \
--admin-user $adminlogin \
--admin-password $password
# Configure a server-level firewall rule for the server
az sql server firewall-rule create \
--resource-group $resourceGroupName \
--server $servername \
-n AllowYourIp \
--start-ip-address $startip \
--end-ip-address $endip
# Create a gen5 2 vCore database in the server
az sql db create \
--resource-group $resourceGroupName \
--server $servername \
--name mySampleDatabase \
--sample-name AdventureWorksLT \
--edition GeneralPurpose \
--family Gen5 \
--capacity 2 \
El código anterior usa estos comandos de la CLI de Azure:
Puede crear un grupo de recursos, un servidor y una base de datos única mediante Windows PowerShell. Si no desea usar Azure Cloud Shell, instale el módulo de Azure PowerShell.
Nota
En este artículo se usa el módulo Az de PowerShell, que es el módulo de PowerShell que se recomienda para interactuar con Azure. Para empezar a trabajar con el módulo Az de PowerShell, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.
Para ejecutar el ejemplo de código siguiente en Azure Cloud Shell, seleccione Probar en la barra de título del código. Cuando se abra Cloud Shell, seleccione Copiar en la barra de título del ejemplo de código y pegue el ejemplo de código en la ventana de Cloud Shell. En el código, reemplace <Subscription ID> por su identificador de suscripción de Azure y, en $startIp y $endIp, reemplace 0.0.0.0 por la dirección IP pública del equipo que está usando.
Siga las indicaciones en pantalla para iniciar sesión en Azure y ejecutar el código.
También puede usar Azure Cloud Shell desde Azure Portal; para ello, seleccione el icono de Cloud Shell en la barra superior.
La primera vez que use Cloud Shell en el portal, seleccione PowerShell en el cuadro de diálogo de bienvenida. Las sesiones posteriores usarán PowerShell o puede seleccionarlo en la barra de control de Cloud Shell.
El siguiente código de PowerShell crea un grupo de recursos de Azure, un servidor, una base de datos única y una regla de firewall para el acceso al servidor. Asegúrese de registrar el grupo de recursos y los nombres de servidor generados, para poder administrar estos recursos más adelante.
# Set variables for your server and database
$subscriptionId = '<SubscriptionID>'
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$location = "West US"
$adminLogin = "azureuser"
$password = "Azure1234567"
$serverName = "mysqlserver-$(Get-Random)"
$databaseName = "mySampleDatabase"
# The ip address range that you want to allow to access your server
$startIp = "0.0.0.0"
$endIp = "0.0.0.0"
# Show randomized variables
Write-host "Resource group name is" $resourceGroupName
Write-host "Server name is" $serverName
# Connect to Azure
Connect-AzAccount
# Set subscription ID
Set-AzContext -SubscriptionId $subscriptionId
# Create a resource group
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup -Name $resourceGroupName -Location $location -Tag @{Owner="SQLDB-Samples"}
$resourceGroup
# Create a server with a system wide unique server name
Write-host "Creating primary server..."
$server = New-AzSqlServer -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $adminLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
$server
# Create a server firewall rule that allows access from the specified IP range
Write-host "Configuring firewall for primary server..."
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
$serverFirewallRule
# Create General Purpose Gen4 database with 1 vCore
Write-host "Creating a gen5 2 vCore database..."
$database = New-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Edition GeneralPurpose `
-VCore 2 `
-ComputeGeneration Gen5 `
-MinimumCapacity 2 `
-SampleName "AdventureWorksLT"
$database
En el código anterior se usan estos cmdlets de PowerShell:
Seleccione Azure SQL en el menú izquierdo de Azure Portal. Si Azure SQL no está en la lista, seleccione Todos los servicios y escriba "Azure SQL" en el cuadro de búsqueda. (Opcional) Seleccione la estrella junto a Azure SQL para marcarlo como favorito y agréguelo como un elemento en el panel de navegación izquierdo.
Seleccione + Agregar para abrir la página Select SQL deployment option (Seleccionar la opción de implementación de SQL). Para más información acerca de las distintas bases de datos, seleccione Mostrar detalles en el icono Bases de datos.
Seleccione Grupo elástico en el menú desplegable Tipo de recurso del icono SQL Database. Seleccione Crear para crear el grupo elástico.
Configure el grupo elástico con los siguientes valores:
Name: Proporcione un nombre único para el grupo elástico, como myElasticPool.
Suscripción: Seleccione la suscripción en la lista desplegable.
ResourceGroup: Seleccione myResourceGroup en la lista desplegable, el grupo de recursos que ha creado en la sección 1.
Servidor: Seleccione el servidor que ha creado en la sección 1 en la lista desplegable.
Proceso y almacenamiento: Seleccione Configurar grupo elástico para configurar el proceso y el almacenamiento, y agregue la base de datos única al grupo elástico. En la pestaña Configuración de grupo, deje el valor predeterminado de Gen5 y, con dos núcleos virtuales y 32 GB.
En la página Configurar, seleccione la pestaña Bases de datos y, después, elija Agregar base de datos. Elija la base de datos que ha creado en la sección 1 y, a continuación, seleccione Aplicar para agregarla al grupo elástico. Seleccione Aplicar de nuevo para aplicar la configuración del grupo elástico y cerrar la página Configurar.
Seleccione Revisar y crear para revisar la configuración del grupo elástico y después seleccione Crear para crear el grupo elástico.
Cree los grupos elásticos y el servidor secundario con PowerShell.
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
$poolName = "myElasticPool"
$databaseName = "mySampleDatabase"
$drLocation = "West US"
$drServerName = "mysqlsecondary-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# The ip address range that you want to allow to access your server
# Leaving at 0.0.0.0 will prevent outside-of-azure connections
# $startIp = "0.0.0.0"
# $endIp = "0.0.0.0"
# Show randomized variables
Write-host "DR Server name is" $drServerName
Write-host "Failover group name is" $failoverGroupName
# Create primary Gen5 elastic 2 vCore pool
Write-host "Creating elastic pool..."
$elasticPool = New-AzSqlElasticPool -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-ElasticPoolName $poolName `
-Edition "GeneralPurpose" `
-vCore 2 `
-ComputeGeneration Gen5
$elasticPool
# Add single db into elastic pool
Write-host "Creating elastic pool..."
$addDatabase = Set-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-ElasticPoolName $poolName
$addDatabase
En esta parte del tutorial se usan los siguientes cmdlets de PowerShell:
Establece las propiedades de una base de datos, o mueve una base de datos existente en un grupo elástico.
3. Creación de un grupo de conmutación por error
En este paso, va a crear un grupo de conmutación por error entre un servidor existente y uno nuevo en otra región. A continuación, agregue el grupo elástico al grupo de conmutación por error.
Cree el grupo de conmutación por error mediante Azure Portal.
Seleccione Azure SQL en el menú izquierdo de Azure Portal. Si Azure SQL no está en la lista, seleccione Todos los servicios y escriba Azure SQL en el cuadro de búsqueda. (Opcional) Seleccione la estrella junto a Azure SQL para marcarlo como favorito y agréguelo como un elemento en el panel de navegación izquierdo.
Seleccione el grupo elástico que creó en la sección anterior: myElasticPool.
En el panel Información general, seleccione el nombre del servidor en Nombre del servidor para abrir la configuración del servidor.
Seleccione Grupos de conmutación por error en el panel Configuración y, después, seleccione Agregar grupo para crear un nuevo grupo de conmutación por error.
En la página Grupo de conmutación por error, escriba o seleccione los valores siguientes y, después, seleccione Crear:
Nombre del grupo de conmutación por error Escriba un nombre del grupo de conmutación por error único, como failovergrouptutorial.
Servidor secundario: Seleccione la opción para configurar los valores obligatorios y, a continuación, elija Crear un nuevo servidor. Como alternativa, puede elegir un servidor ya existente como servidor secundario. Después de especificar los siguientes valores para el nuevo servidor secundario, haga clic en Seleccionar.
Nombre del servidor: Escriba un nombre único para el servidor secundario, como mysqlsecondary.
Inicio de sesión del administrador del servidor: Escriba azureuser
Contraseña: Escriba una contraseña compleja que cumpla los requisitos de contraseña.
Ubicación: Elija una ubicación en la lista desplegable, como East US. Esta ubicación no puede ser la misma que la del servidor principal.
Nota
La configuración del firewall y de inicio de sesión del servidor debe coincidir con la del servidor principal.
Seleccione Bases de datos del grupo y, a continuación, seleccione el grupo elástico que creó en la sección 2. Debería aparecer una advertencia que le pide que cree un grupo elástico en el servidor secundario. Seleccione la advertencia y, a continuación, elija Aceptar para crear el grupo elástico en el servidor secundario.
Elija Seleccionar para aplicar la configuración del grupo elástico al grupo de conmutación por error y, después, seleccione Crear para crear el grupo de conmutación por error. Al agregar el grupo elástico al grupo de conmutación por error, se iniciará automáticamente el proceso de replicación geográfica.
Cree el grupo de conmutación por error mediante PowerShell.
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
# $poolName = "myElasticPool"
# $databaseName = "mySampleDatabase"
# $drLocation = "West US"
# $drServerName = "mysqlsecondary-$(Get-Random)"
$failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Create a secondary server in the failover region
Write-host "Creating a secondary server in the failover region..."
New-AzSqlServer -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-Location $drLocation `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
Write-host "Secondary server =" $drServerName
# Create a server firewall rule that allows access from the specified IP range
Write-host "Configuring firewall for secondary server..."
New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
Write-host "Firewall configured"
# Create secondary Gen5 elastic 2 vCore pool
Write-host "Creating secondary elastic pool..."
$elasticPool = New-AzSqlElasticPool -ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-ElasticPoolName $poolName `
-Edition "GeneralPurpose" `
-vCore 2 `
-ComputeGeneration Gen5
$elasticPool
# Create a failover group between the servers
Write-host "Creating failover group..."
New-AzSqlDatabaseFailoverGroup `
ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-PartnerServerName $drServerName `
FailoverGroupName $failoverGroupName `
FailoverPolicy Automatic `
-GracePeriodWithDataLossHours 2
Write-host "Failover group created successfully."
# Add elastic pool to the failover group
Write-host "Enumerating databases in elastic pool...."
$FailoverGroup = Get-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FailoverGroupName $failoverGroupName
$databases = Get-AzSqlElasticPoolDatabase `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-ElasticPoolName $poolName
Write-host "Adding databases to failover group..."
$failoverGroup = $failoverGroup | Add-AzSqlDatabaseToFailoverGroup `
-Database $databases
$failoverGroup
En esta parte del tutorial se usan los siguientes cmdlets de PowerShell:
Obtiene o enumera grupos de conmutación por error de Azure SQL Database.
4. Prueba de la conmutación por error
En este paso, se producirá un error en el grupo de conmutación por error en el servidor secundario y, a continuación, se realizará la conmutación por recuperación mediante Azure Portal.
Pruebe la conmutación por error de su grupo de conmutación por error mediante Azure Portal.
Seleccione Azure SQL en el menú izquierdo de Azure Portal. Si Azure SQL no está en la lista, seleccione Todos los servicios y escriba Azure SQL en el cuadro de búsqueda. (Opcional) Seleccione la estrella junto a Azure SQL para marcarlo como favorito y agréguelo como un elemento en el panel de navegación izquierdo.
Seleccione el grupo elástico que creó en la sección anterior: myElasticPool.
Seleccione el nombre del servidor en Nombre del servidor para abrir la configuración del servidor.
Seleccione Grupos de conmutación por error en el panel Configuración y, a continuación, elija el grupo de conmutación por error que ha creado en la sección 2.
Revise cuál es el servidor principal y cuál es el secundario.
Seleccione Conmutación por error en el panel de tareas para conmutar por error el grupo de conmutación por error que contiene el grupo elástico.
Seleccione Sí en la advertencia que le notifica que las sesiones de TDS se desconectarán.
Revise cuál es el servidor principal y cuál es el secundario. Si la conmutación por error se realiza correctamente, los dos servidores deben tener los roles intercambiados.
Seleccionar de nuevo Conmutación por error para que el grupo de conmutación por error vuelva a la configuración original.
Pruebe la conmutación por error de su grupo de conmutación por error mediante PowerShell.
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
# $poolName = "myElasticPool"
# $databaseName = "mySampleDatabase"
# $drLocation = "West US"
# $drServerName = "mysqlsecondary-$(Get-Random)"
# $failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Check role of secondary replica
Write-host "Confirming the secondary server is secondary...."
(Get-AzSqlDatabaseFailoverGroup `
-FailoverGroupName $failoverGroupName `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName).ReplicationRole
# Failover to secondary server
Write-host "Failing over failover group to the secondary..."
Switch-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName `
-FailoverGroupName $failoverGroupName
Write-host "Failover group failed over to" $drServerName
Se producirá un error en el grupo de conmutación por error en el servidor secundario y, a continuación, se realizará la conmutación por recuperación mediante PowerShell.
# Set variables for your server and database
# $subscriptionId = '<SubscriptionID>'
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# $location = "East US"
# $adminLogin = "azureuser"
# $password = "PWD27!"+(New-Guid).Guid
# $serverName = "mysqlserver-$(Get-Random)"
# $poolName = "myElasticPool"
# $databaseName = "mySampleDatabase"
# $drLocation = "West US"
# $drServerName = "mysqlsecondary-$(Get-Random)"
# $failoverGroupName = "failovergrouptutorial-$(Get-Random)"
# Check role of secondary replica
Write-host "Confirming the secondary server is now primary"
(Get-AzSqlDatabaseFailoverGroup `
-FailoverGroupName $failoverGroupName `
-ResourceGroupName $resourceGroupName `
-ServerName $drServerName).ReplicationRole
# Revert failover to primary server
Write-host "Failing over failover group to the primary...."
Switch-AzSqlDatabaseFailoverGroup `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FailoverGroupName $failoverGroupName
Write-host "Failover group failed over to" $serverName
En esta parte del tutorial se usan los siguientes cmdlets de PowerShell:
Seleccione Eliminar grupo de recursos para eliminar todos los recursos del grupo, así como el propio grupo de recursos.
En la nueva ventana, escriba el nombre del grupo de recursos, myResourceGroup, y luego seleccione Eliminar para eliminar el grupo de recursos.
Limpie sus recursos mediante PowerShell.
# Set variables for your server and database
# $resourceGroupName = "myResourceGroup-$(Get-Random)"
# Clean up resources by removing the resource group
Write-host "Removing resource group..."
Remove-AzResourceGroup -ResourceGroupName $resourceGroupName
Write-host "Resource group removed =" $resourceGroupName
En esta parte del tutorial se usan los siguientes cmdlets de PowerShell:
Si quiere mantener el grupo de recursos, pero eliminar la base de datos secundaria, quítela del grupo de conmutación por error antes de eliminarla. Eliminar una base de datos secundaria antes de quitarla del grupo de conmutación por error puede provocar un comportamiento impredecible.
En este tutorial, ha agregado un grupo elástico de Azure SQL Database a un grupo de conmutación por error y ha probado la conmutación por error. Ha aprendido a: