Aby przejść w tryb failover, najpierw należy przełączyć tryby replikacji wystąpienia programu SQL Server przy użyciu języka Transact-SQL (T-SQL).
Następnie można przełączyć do trybu failover i zmienić role przy użyciu programu PowerShell.
Przełączanie trybu replikacji (tryb failover do wystąpienia zarządzanego SQL)
Replikacja między programem SQL Server i usługą SQL Managed Instance jest domyślnie asynchroniczna. Jeśli przechodzisz w tryb failover z programu SQL Server do usługi Azure SQL Managed Instance, przed przełączeniem bazy danych w tryb failover przełącz link do trybu synchronicznego w programie SQL Server przy użyciu języka Transact-SQL (T-SQL).
Uwaga
- Pomiń ten krok, jeśli przechodzisz w tryb failover z usługi SQL Managed Instance do programu SQL Server 2022.
- Replikacja synchroniczna na dużych odległościach w sieci może spowolnić transakcje na głównej replice.
Uruchom następujący skrypt języka T-SQL w programie SQL Server, aby zmienić tryb replikacji rozproszonej grupy dostępności z asynchronicznego na synchronizację. Zastąpić:
-
<DAGName>
z nazwą rozproszonej grupy dostępności (używanej do utworzenia linku).
-
<AGName>
z nazwą grupy dostępności utworzonej w programie SQL Server (używanym do utworzenia linku).
-
<ManagedInstanceName>
z nazwą wystąpienia zarządzanego.
-- Run on SQL Server
-- Sets the distributed availability group to a synchronous commit.
-- ManagedInstanceName example: 'sqlmi1'
USE master
GO
ALTER AVAILABILITY GROUP [<DAGName>]
MODIFY
AVAILABILITY GROUP ON
'<AGName>' WITH
(AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
'<ManagedInstanceName>' WITH
(AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
Aby potwierdzić, że tryb replikacji łącza został pomyślnie zmieniony, użyj następującego dynamicznego widoku zarządzania. Wyniki wskazują na SYNCHRONOUS_COMMIT
stan.
-- Run on SQL Server
-- Verifies the state of the distributed availability group
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
Po przełączeniu programu SQL Server do trybu zatwierdzania synchronicznego replikacja między dwoma wystąpieniami jest synchroniczna. Jeśli chcesz cofnąć ten stan, wykonaj te same kroki i ustaw wartość AVAILABILITY_MODE
ASYNCHRONOUS_COMMIT
.
Sprawdzanie wartości LSN zarówno w programie SQL Server, jak i w usłudze SQL Managed Instance
Aby ukończyć failover lub migrację, upewnij się, że replikacja do serwera zapasowego jest zakończona. W tym celu upewnij się, że numery sekwencji dzienników (LSN) w rekordach dziennika dla programu SQL Server i usługi SQL Managed Instance są takie same.
Początkowo oczekuje się, że LSN na podstawowym jest wyższy niż LSN w pomocniczej. Opóźnienie sieci może powodować, że replikacja jest nieco opóźniona względem podstawowej. Ponieważ obciążenie zostało zatrzymane na serwerze podstawowym, numery LSN będą zgodne i przestaną się zmieniać po pewnym czasie.
Użyj następującego zapytania T-SQL w programie SQL Server, aby odczytać nazwę LSN ostatniego zarejestrowanego dziennika transakcji. Wymiana:
-
<DatabaseName>
z nazwą bazy danych i poszukaj ostatniego utwardzonego numeru LSN.
-- Run on SQL Server
-- Obtain the last hardened LSN for the database on SQL Server.
SELECT
ag.name AS [Replication group],
db.name AS [Database name],
drs.database_id AS [Database ID],
drs.group_id,
drs.replica_id,
drs.synchronization_state_desc AS [Sync state],
drs.end_of_log_lsn AS [End of log LSN],
drs.last_hardened_lsn AS [Last hardened LSN]
FROM
sys.dm_hadr_database_replica_states drs
inner join sys.databases db on db.database_id = drs.database_id
inner join sys.availability_groups ag on drs.group_id = ag.group_id
WHERE
ag.is_distributed = 1 and db.name = '<DatabaseName>'
Użyj następującego zapytania T-SQL w usłudze SQL Managed Instance, aby odczytać ostatnio utrwalony LSN dla swojej bazy danych. Zastąp <DatabaseName>
nazwą bazy danych.
To zapytanie działa w usłudze SQL Managed Instance ogólnego przeznaczenia. W przypadku instancji zarządzanej SQL krytycznej dla biznesu odkomentuj and drs.is_primary_replica = 1
na końcu skryptu. W poziomie usługi Biznes krytyczny ten filtr zapewnia, że szczegóły są odczytywane tylko z repliki podstawowej.
-- Run on SQL managed instance
-- Obtain the LSN for the database on SQL Managed Instance.
SELECT
db.name AS [Database name],
drs.database_id AS [Database ID],
drs.group_id,
drs.replica_id,
drs.synchronization_state_desc AS [Sync state],
drs.end_of_log_lsn AS [End of log LSN],
drs.last_hardened_lsn AS [Last hardened LSN]
FROM
sys.dm_hadr_database_replica_states drs
inner join sys.databases db on db.database_id = drs.database_id
WHERE
db.name = '<DatabaseName>'
-- for Business Critical, add the following as well
-- AND drs.is_primary_replica = 1
Alternatywnie możesz również użyć polecenia PowerShell Get-AzSqlInstanceLink lub polecenia az sql mi link show w Azure CLI, aby pobrać właściwość LastHardenedLsn
dla swojego linku w usłudze SQL Managed Instance, co dostarczy te same informacje co poprzednie zapytanie T-SQL.
Ważne
Sprawdź ponownie, czy obciążenie zostało zatrzymane na serwerze podstawowym. Sprawdź, czy LSN na obu serwerach, SQL Server i SQL Managed Instance, są zgodne i czy pozostają zgodne i niezmienione przez jakiś czas. Stabilne LSN w obu wystąpieniach wskazują, że dziennik końcowy został zreplikowany do instancji pomocniczej, a obciążenie zostało skutecznie zatrzymane.
Przełączanie bazy danych w tryb awaryjny
Jeśli chcesz użyć programu PowerShell do przełączenia bazy danych w ramach failover między programem SQL Server 2022 a SQL Managed Instance, zachowując połączenie, lub aby przeprowadzić failover z utratą danych dla dowolnej wersji programu SQL Server, użyj kreatora Failover between SQL Server and Managed Instance w programie SSMS, aby wygenerować skrypt dla danego środowiska. Planowane przełączenie awaryjne można wykonać z repliki podstawowej lub pomocniczej. Aby przeprowadzić wymuszone przełączenie, połącz się z repliką pomocniczą.
Aby przerwać połączenie i zatrzymać replikację po przejściu w tryb failover lub migracji bazy danych niezależnie od wersji programu SQL Server, użyj polecenia Remove-AzSqlInstanceLink PowerShell lub az sql mi link delete interfejsu wiersza polecenia platformy Azure.
Uwaga
- Przed przełączeniem w tryb failover zatrzymaj obciążenie źródłowej bazy danych, aby umożliwić replikowanej bazie danych całkowite nadrobienie zaległości i przejście w tryb failover bez utraty danych. Jeśli wykonasz wymuszone przełączenie awaryjne lub przerwiesz łącze przed dopasowaniem LSN, możesz utracić dane.
- Przełączanie bazy danych w tryb failover w programie SQL Server 2019 i starszych wersjach powoduje przerwanie połączenia między dwiema replikami. Nie można powrócić po awarii do początkowego podstawowego.
Poniższy przykładowy skrypt przerywa połączenie i kończy replikację między replikami, dzięki czemu baza danych jest odczytywana/zapisywana w obu wystąpieniach. Wymiana:
-
<ManagedInstanceName>
wstawiając nazwę wystąpienia zarządzanego.
-
<DAGName>
z nazwą linku, który jest przełączony w tryb failover (dane wyjściowe właściwości Name
z Get-AzSqlInstanceLink
polecenia wykonanego wcześniej powyżej).
# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO FAIL OVER OR MIGRATE DATABASE TO AZURE
# ===== Enter user variables here ====
# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"
$LinkName = "<DAGName>"
# ==== Do not customize the following cmdlet ====
# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName
# Failover the specified link
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup |
-InstanceName $ManagedInstanceName -Name $LinkName -Force
Po pomyślnym przejściu w tryb failover łącze zostanie porzucone i już nie istnieje. Baza danych programu SQL Server i baza danych usługi SQL Managed Instance mogą wykonywać obciążenia odczytu/zapisu, ponieważ są teraz całkowicie niezależne.
Ważne
Po pomyślnym włączeniu trybu failover do usługi SQL Managed Instance, ręcznie zaktualizuj parametry połączenia aplikacji do nazwy FQDN wystąpienia zarządzanego SQL, aby ukończyć proces migracji lub failover i kontynuować działanie na platformie Azure.
Po usunięciu linku można zachować grupę dostępności w programie SQL Server, ale należy usunąć rozproszoną grupę dostępności, aby usunąć metadane łącza z programu SQL Server. Ten dodatkowy krok jest niezbędny tylko w przypadku przechodzenia w tryb failover przy użyciu programu PowerShell, ponieważ program SSMS wykonuje tę akcję.
Aby usunąć rozproszoną grupę dostępności, zastąp następującą wartość, a następnie uruchom przykładowy kod T-SQL:
-
<DAGName>
z nazwą rozproszonej grupy dostępności w programie SQL Server (używanym do utworzenia linku).
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO