Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Despliegue de grupos de disponibilidad Always On distribuidos de Microsoft SQL Server para la recuperación ante desastres en OCI
Introducción
Distributed Always On Availability Group (Distributed Availability Group) es una potente función de Microsoft SQL Server que amplía las capacidades del grupo de disponibilidad tradicional para SQL Server.
Los grupos de disponibilidad distribuida permiten crear una solución de recuperación ante desastres (DR) que abarque varios clusters de failover de Windows Server (WSFC) que se ejecuten en distintas regiones de Oracle Cloud Infrastructure (OCI).
Esto le permite lograr niveles más altos de disponibilidad, capacidades de recuperación ante desastres y distribución geográfica para sus bases de datos críticas de SQL Server que se ejecutan en OCI.
Exclusiones para este tutorial
En este tutorial, no trataremos paso a paso la creación de los grupos de disponibilidad Always On de Microsoft SQL Server. Para obtener más información, consulte Despliegue de grupos de disponibilidad Always On de Microsoft SQL Server para alta disponibilidad y recuperación ante desastres en OCI.
Consulte la siguiente documentación oficial de Microsoft:
Objetivos
- Cree una solución de grupo de disponibilidad Always On distribuida de Microsoft SQL Server en OCI.
Requisitos
-
Los componentes básicos de un grupo de disponibilidad distribuida son:
-
VCNs: cree redes virtuales en la nube (VCNs) de OCI en dos regiones de OCI independientes y conéctese mediante el intercambio de tráfico remoto de gateways de enrutamiento dinámico (DRG).
-
AG 1: se está ejecutando en la región 1 de OCI. Aquí es donde la base de datos que se va a replicar se ejecuta normalmente. Se basa en un WSFC que se ejecuta en SQL Server #1 y SQL Server #2 en el siguiente ejemplo (región OCI de París).
-
AOAG 2: se está ejecutando en OCI Region 2. Se trata de un grupo de disponibilidad Always On completamente independiente que se ejecuta en un WSFC compuesto por SQL Server n.o 3 y SQL Server n.o 4 en el siguiente ejemplo (región OCI de Marsella).
-
Distributed AOAG: construcción lógica creada en la base de datos SQL que se va a replicar.
En la siguiente imagen se muestra la representación lógica de un grupo de disponibilidad distribuido.
-
-
Cree dos grupos de disponibilidad Always On independientes (uno en la primera región y el otro en la segunda región). Para obtener más información, consulte Despliegue de grupos de disponibilidad Always On de Microsoft SQL Server para alta disponibilidad y recuperación ante desastres en OCI.
Ahora, tenemos dos grupos de disponibilidad Always On independientes que se ejecutan en dos regiones de OCI diferentes con intercambio de tráfico. En este ejemplo, las regiones de OCI son París y Marsella.
-
Tenemos el primer cluster WSFC (
paris-wsfc
) en la primera región con el primer grupo de disponibilidad SQL Always On (paris-aoag
) y el listener SQL (paris-sql-list
) para el grupo de disponibilidad SQL Always On.Los dos nodos de Windows son
sql-srv1
ysql-srv2
. -
En la segunda región, tenemos el segundo cluster WSFC (
marseille-wsfc
) con el segundo grupo de disponibilidad SQL Always On (marseille-aoag
) y el listener SQL (mars-sql-list
) para el segundo grupo de disponibilidad SQL Always On.Los dos nodos de Windows son
sql-srv3
ysql-srv4
. -
Desde la perspectiva de SQL Server, a partir de
sql-srv1
(paris-aoag
), podemos ver en este ejemplo DemoDB que es la base de datos replicada con el primer grupo de disponibilidad Always On y eldistributed-aoag
recién creado. -
Por lo tanto, al conectarse con
sql-srv3
(marseille-aoag
), en este ejemplo también podemos ver DemoDB, que es la base de datos replicada con el primer grupo de disponibilidad Always On, eldistributed-aoag
recién creado y elmarseille-aoag
, que es el segundo grupo de disponibilidad Always On creado en el segundo sitio (Marsella).
-
Tarea 1: Crear grupo de disponibilidad distribuida
Cree un grupo de disponibilidad distribuida (distributed-aoag
) compuesto por los dos grupos de disponibilidad Always On que ya se están ejecutando.
Como ya se ha mencionado, suponemos que dos grupos de disponibilidad Always On independientes ya están activos y en ejecución en dos regiones de OCI diferentes.
El segundo grupo de disponibilidad Always On (marseille-aoag
), el en espera, no necesita tener ninguna base de datos asociada, por lo que prácticamente el segundo grupo de disponibilidad Always On debe estar vacío antes de la creación del grupo de disponibilidad distribuido, por lo que sin ninguna base de datos de disponibilidad asociada. Puede crear el segundo grupo de disponibilidad Always On como de costumbre con una base de datos inicial asociada y, a continuación, puede eliminar esta base de datos que solo se ha utilizado para crear el segundo grupo de disponibilidad Always On. Esto se debe a que la interfaz gráfica no es posible crear un grupo de disponibilidad Always On con ninguna base de datos asociada.
-
Cree un grupo de disponibilidad distribuido en el primer grupo de disponibilidad Always On.
Conéctese a SQL Server en el primer servidor (el nodo
sql-srv1
del sitio de París en este ejemplo) y ejecute los siguientes comandos SQL.Nota:
-
Los nombres del listener son
paris-sql-list
ymars-sql-list
. -
Puerto TCP que se va a utilizar,
5022
es el puerto del punto final y se debe utilizar. Normalmente es diferente del puerto del listener (1433
). -
Los nombres de grupo de disponibilidad deben ser exactamente los nombres utilizados por el grupo de disponibilidad Always On que ya se está ejecutando.
USE MASTER; CREATE AVAILABILITY GROUP [distributed-aoag] WITH (DISTRIBUTED) AVAILABILITY GROUP ON 'paris-aoag' WITH ( LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ), 'marseille-aoag' WITH ( LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ); GO
-
-
Únase al grupo de disponibilidad distribuido en el segundo grupo de disponibilidad Always On.
Conéctese a SQL Server en el primer servidor del segundo grupo de disponibilidad Always On (servidor
sql-srv3
del sitio de Marsella) y ejecute los siguientes comandos SQL.USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] JOIN AVAILABILITY GROUP ON 'paris-aoag' WITH ( LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ), 'marseille-aoag' WITH ( LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ); GO
-
Es importante comprender que, a diferencia de los grupos de disponibilidad tradicionales, los grupos de disponibilidad distribuida no necesitan grupos de recursos ni roles en el WSFC. Todos los metadatos se gestionan dentro de SQL Server. Esto significa que incluso SQL Server Management Studio no muestra directamente los nombres de las bases de datos en el grupo de disponibilidad distribuida.
Para ver esta información, ejecute el siguiente script Transact-SQL.
--View metadata and status of the Distributed Availability Group SELECT r.replica_server_name, r.endpoint_url, rs.connected_state_desc, rs.role_desc, rs.operational_state_desc, rs.recovery_health_desc,rs.synchronization_health_desc, r.availability_mode_desc, r.failover_mode_desc FROM sys.dm_hadr_availability_replica_states rs INNER JOIN sys.availability_replicas r ON rs.replica_id=r.replica_id ORDER BY r.replica_server_name
Nota: Para admitir una posible latencia de red entre regiones, hemos configurado el grupo de disponibilidad Always On principal y secundario con replicación de confirmación asíncrona. Esto minimiza la sobrecarga de rendimiento en la base de datos primaria. Dentro de cada grupo de disponibilidad Always On, hemos optado por la replicación de confirmación síncrona entre réplicas para garantizar una alta disponibilidad. Sin embargo, para la conmutación por error entre réplicas de confirmación asíncrona (en el caso de un grupo de disponibilidad distribuido), la reducción de la pérdida de datos requiere un cambio temporal al modo de confirmación síncrona antes de iniciar la conmutación por error. Para failover_mode, el único modo disponible para el grupo de disponibilidad distribuida es manual.
Tarea 2: Procedimiento de failover para grupo de disponibilidad distribuida
En esta tarea, hablaremos sobre el failover entre los dos grupos de disponibilidad Always On. El procedimiento de failover de la base de datos se compone de los siguientes sencillos pasos y comprobaciones.
-
Comprobaciones iniciales.
-
Cambie el modo de disponibilidad de asíncrono a síncrono para el grupo de disponibilidad Always On principal y el grupo de disponibilidad Always On secundario.
-
Ejecute scripts para comprobar si la sincronización es correcta.
-
Cambie el rol del grupo de disponibilidad Always On principal de principal a secundario.
-
Failover al grupo de disponibilidad Always On secundario.
-
Cambie el modo de disponibilidad de síncrono a asíncrono para el grupo de disponibilidad Always On principal y el grupo de disponibilidad Always On secundario.
Realice los pasos:
-
Ejecute los siguientes scripts para comprobar si la sincronización es correcta, primero en el SQL principal actual del sitio principal actual y, a continuación, en el SQL principal del sitio secundario.
Los resultados ejecutados deben ser
CONNECTED_STATE
=CONNECTED
ySYNCHRONIZATION_HEALTH
=HEALTHY
.select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag join sys.availability_replicas ar on ag.group_id=ar.group_id left join sys.dm_hadr_availability_replica_states ars on ars.replica_id=ar.replica_id where ag.is_distributed=1 GO
-
Cambie el modo de disponibilidad. Ejecute primero el siguiente script en el SQL Server principal actual del sitio principal actual y, a continuación, en el SQL Server principal del sitio secundario.
--Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] MODIFY AVAILABILITY GROUP ON 'paris-aoag' WITH ( AVAILABILITY_MODE = SYNCHRONOUS_COMMIT ), 'marseille-aoag' WITH ( AVAILABILITY_MODE = SYNCHRONOUS_COMMIT );
-
Para garantizar que no se pierdan datos, verifique los resultados de este paso. El estado debe ser
SYNCHRONIZED
ylast_hardened_lsn
debe coincidir para cada base de datos tanto en la base de datos principal global como en el reenviador.-- Run this query on the Global Primary and the forwarder -- Check the results to see if synchronization_state_desc is SYNCHRONIZED, and the last_hardened_lsn is the same per database on both the global primary and forwarder -- If not rerun the query on both side every 5 seconds until it is the case -- SELECT ag.name , drs.database_id , db_name(drs.database_id) as database_name , drs.group_id , drs.replica_id , drs.synchronization_state_desc , drs.last_hardened_lsn FROM sys.dm_hadr_database_replica_states drs INNER JOIN sys.availability_groups ag on drs.group_id = ag.group_id;
-
Ahora está listo para definir
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
en el SQL Server principal actual en el sitio principal actual.--Run this script into Primary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
Y ahora está listo para cambiar el rol del grupo de disponibilidad Always On principal de principal a secundario.
--Run this script into Primary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] SET (ROLE = SECONDARY);
-
Cambie el rol del grupo de disponibilidad Always On secundario de secundario a principal. La siguiente secuencia de comandos realizará este cambio de rol, activando la base de datos para operaciones de lectura o escritura. Además, los roles de los grupos de disponibilidad Always On del grupo de disponibilidad distribuido también se actualizarán según corresponda.
--Run this script into Secondary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] FORCE_FAILOVER_ALLOW_DATA_LOSS;
Ejecute el siguiente script para comprobar el estado.
--check the status on the new primary (formerly standby site) select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag join sys.availability_replicas ar on ag.group_id=ar.group_id left join sys.dm_hadr_availability_replica_states ars on ars.replica_id=ar.replica_id where ag.is_distributed=1 GO
-
Ahora, en el nuevo SQL Server principal, anule la definición de
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
.--Run this script into Primary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
Vuelva a cambiar el modo de disponibilidad al modo estándar ejecutando el siguiente script en los sitios principal y secundario.
--Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] MODIFY AVAILABILITY GROUP ON 'paris-aoag' WITH ( AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT ), 'marseille-aoag' WITH ( AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT );
Tarea 3: Procedimiento de failback para el grupo de disponibilidad Always On distribuido
Para restaurar París como el sitio principal y Marsella como el sitio secundario, simplemente realice un nuevo switchover para revertir la sincronización, como se describe en la Tarea 2.
Enlaces relacionados
Agradecimientos
- Autores: Alessandro Volpi (especialista en soluciones en la nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Deploy Microsoft SQL Server Distributed Always On Availability Groups for DR on OCI
G23258-01
December 2024