Vysoká dostupnost se službou SQL Managed Instance povolenou službou Azure Arc

Spravovaná instance SQL povolená službou Azure Arc je nasazená v Kubernetes jako kontejnerizovaná aplikace. K zajištění integrovaného úložiště používá konstrukty Kubernetes, jako jsou stavové sady a trvalé úložiště:

  • Monitorování stavu
  • Detekce poruch
  • Automatické převzetí služeb při selhání za účelem zachování stavu služby

Kvůli vyšší spolehlivosti můžete také nakonfigurovat službu SQL Managed Instance povolenou službou Azure Arc tak, aby se nasadila s dalšími replikami v konfiguraci s vysokou dostupností. Kontroler dat datových služeb Arc spravuje:

  • Sledování
  • Detekce poruch
  • Automatické převzetí služeb při selhání

Datová služba s podporou arc poskytuje tuto službu bez zásahu uživatele. Služba:

  • Nastaví skupinu dostupnosti.
  • Konfigurace koncových bodů zrcadlení databáze
  • Přidá databáze do skupiny dostupnosti.
  • Koordinuje převzetí služeb při selhání a upgrade.

Tento dokument zkoumá oba typy vysoké dostupnosti.

Spravovaná instance SQL povolená službou Azure Arc poskytuje různé úrovně vysoké dostupnosti v závislosti na tom, jestli byla spravovaná instance SQL nasazená jako úroveň služby pro obecné účely nebo Pro důležité obchodní informace úroveň služby.

Vysoká dostupnost na úrovni služby Pro obecné účely

Na úrovni služby Pro obecné účely je k dispozici pouze jedna replika a vysoká dostupnost se dosahuje prostřednictvím orchestrace Kubernetes. Pokud například dojde k chybě podu nebo uzlu obsahujícího image kontejneru spravované instance, Kubernetes se pokusí vystát jiný pod nebo uzel a připojit se ke stejnému trvalému úložišti. Během této doby není spravovaná instance SQL pro aplikace dostupná. Aplikace se musí znovu připojit a opakovat transakci, když je nový pod spuštěný. Pokud load balancer se používá typ služby, můžou se aplikace znovu připojit ke stejnému primárnímu koncovému bodu a Kubernetes přesměruje připojení na novou primární. Pokud je nodeport typ služby, aplikace se budou muset znovu připojit k nové IP adrese.

Ověření integrované vysoké dostupnosti

Pokud chcete ověřit vysokou dostupnost sestavení poskytovanou Kubernetes, můžete:

  1. Odstranění podu existující spravované instance
  2. Ověřte, že se Kubernetes z této akce obnoví.

Během obnovení kubernetes spustí další pod a připojí trvalé úložiště.

Požadavky

  1. Prohlédněte si pody.

    kubectl get pods -n <namespace of data controller>
    
  2. Odstraňte pod spravované instance.

    kubectl delete pod <name of managed instance>-0 -n <namespace of data controller>
    

    Například

    user@pc:/# kubectl delete pod sql1-0 -n arc
    pod "sql1-0" deleted
    
  3. Prohlédněte si pody a ověřte, že se spravovaná instance obnovuje.

    kubectl get pods -n <namespace of data controller>
    

    Příklad:

    user@pc:/# kubectl get pods -n arc
    NAME                 READY   STATUS    RESTARTS   AGE
    sql1-0               2/3     Running   0          22s
    

Po obnovení všech kontejnerů v podu se můžete připojit ke spravované instanci.

Vysoká dostupnost ve vrstvě služby Pro důležité obchodní informace

Kromě toho, co nativně poskytuje orchestrace Kubernetes, poskytuje spravovaná instance SQL pro Azure Arc na úrovni služby Pro důležité obchodní informace kromě toho, co nativně poskytuje skupina dostupnosti. Skupina dostupnosti obsažená je založená na technologii SQL Server AlwaysOn. Poskytuje vyšší úroveň dostupnosti. Spravovanou instanci SQL povolenou službou Azure Arc nasazenou s Pro důležité obchodní informace vrstvou služby je možné nasadit s 2 nebo 3 replikami. Tyto repliky se vždy synchronizují s ostatními.

U skupin dostupnosti s obsahem jsou všechny chyby podu nebo selhání uzlů pro aplikaci transparentní. Skupina dostupnosti obsahuje alespoň jeden další pod, který obsahuje všechna data z primárního serveru a je připravená na připojení.

Skupiny dostupnosti s obsahem

Skupina dostupnosti sváže jednu nebo více uživatelských databází do logické skupiny, aby v případě převzetí služeb při selhání převzala při selhání celou skupinu databází sekundární repliku jako jednu jednotku. Skupina dostupnosti replikuje data pouze v uživatelských databázích, ale ne v systémových databázích, jako jsou přihlášení, oprávnění nebo úlohy agenta. Skupina dostupnosti obsahuje metadata ze systémových databází, jako msdb jsou databáze a master databáze. Když se v primární replice vytvoří nebo upraví přihlášení, automaticky se vytvoří také v sekundárních replikách. Podobně při vytvoření nebo úpravě úlohy agenta v primární replice obdrží tyto změny také sekundární repliky.

Služba SQL Managed Instance povolená službou Azure Arc využívá tento koncept skupiny dostupnosti a přidává operátora Kubernetes, aby je bylo možné nasadit a spravovat ve velkém měřítku.

Možnosti, které obsahují skupiny dostupnosti, umožňují:

  • Při nasazení s více replikami se vytvoří jedna skupina dostupnosti se stejným názvem jako spravovaná instance SQL s podporou Arc. Ve výchozím nastavení má skupina dostupnosti tři repliky, včetně primární. Všechny operace CRUD pro skupinu dostupnosti se spravují interně, včetně vytvoření skupiny dostupnosti nebo připojení replik k vytvořené skupině dostupnosti. V instanci nemůžete vytvářet další skupiny dostupnosti.

  • Všechny databáze se automaticky přidají do skupiny dostupnosti, včetně všech uživatelských a systémových databází, jako master a msdb. Tato funkce poskytuje jednosystémové zobrazení napříč replikami skupiny dostupnosti. Pokud se připojujete přímo k instanci, containedag_msdb všimněte si obou containedag_master databází. Databáze containedag_* představují master skupinu dostupnosti a msdb uvnitř skupiny dostupnosti.

  • Externí koncový bod se automaticky zřizuje pro připojení k databázím v rámci skupiny dostupnosti. Tento koncový bod <managed_instance_name>-external-svc hraje roli naslouchacího procesu skupiny dostupnosti.

Nasazení služby SQL Managed Instance povolené službou Azure Arc s více replikami pomocí webu Azure Portal

Na webu Azure Portal na stránce Vytvořit spravovanou instanci SQL povolenou službou Azure Arc:

  1. V části Výpočty a úložiště vyberte Konfigurovat výpočetní prostředky a úložiště . Portál zobrazuje upřesňující nastavení.
  2. V části Úroveň služby vyberte Pro důležité obchodní informace.
  3. Zaškrtněte políčko "Pouze pro použití při vývoji", pokud používáte pro účely vývoje.
  4. V části Vysoká dostupnost vyberte buď 2 repliky , nebo 3 repliky.

High availability settings

Nasazení s několika replikami pomocí Azure CLI

Když je spravovaná instance SQL povolená službou Azure Arc nasazená v Pro důležité obchodní informace úrovni služby, nasazení vytvoří více replik. Nastavení a konfigurace skupin dostupnosti obsažených mezi těmito instancemi se během zřizování provádí automaticky.

Například následující příkaz vytvoří spravovanou instanci se 3 replikami.

Nepřímo připojený režim:

az sql mi-arc create -n <instanceName> --k8s-namespace <namespace> --use-k8s --tier <tier> --replicas <number of replicas>

Příklad:

az sql mi-arc create -n sqldemo --k8s-namespace my-namespace --use-k8s --tier BusinessCritical --replicas 3

Přímo připojený režim:

az sql mi-arc create --name <name> --resource-group <group>  --location <Azure location> –subscription <subscription>  --custom-location <custom-location> --tier <tier> --replicas <number of replicas>

Příklad:

az sql mi-arc create --name sqldemo --resource-group rg  --location uswest2 –subscription xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  --custom-location private-location --tier BusinessCritical --replcias 3

Ve výchozím nastavení jsou všechny repliky nakonfigurované v synchronním režimu. To znamená, že všechny aktualizace primární instance se synchronně replikují do každé sekundární instance.

Zobrazení a monitorování stavu vysoké dostupnosti

Po dokončení nasazení se z aplikace SQL Server Management Studio připojte k primárnímu koncovému bodu.

Ověřte a načtěte koncový bod primární repliky a připojte se k němu ze sady SQL Server Management Studio. Pokud se například instance SQL nasadila pomocí service-type=loadbalancernásledujícího příkazu, načtěte koncový bod, ke kterému se chcete připojit:

az sql mi-arc list --k8s-namespace my-namespace --use-k8s

nebo

kubectl get sqlmi -A

Získání primárního a sekundárního koncového bodu a stavu skupiny dostupnosti

kubectl describe sqlmi Pomocí příkazů az sql mi-arc show můžete zobrazit primární a sekundární koncové body a stav vysoké dostupnosti.

Příklad:

kubectl describe sqlmi sqldemo -n my-namespace

nebo

az sql mi-arc show --name sqldemo --k8s-namespace my-namespace --use-k8s

Příklad výstupu:

 "status": {
    "endpoints": {
      "logSearchDashboard": "https://10.120.230.404:5601/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:sqldemo'))",
      "metricsDashboard": "https://10.120.230.46:3000/d/40q72HnGk/sql-managed-instance-metrics?var-hostname=sqldemo-0",
      "mirroring": "10.15.100.150:5022",
      "primary": "10.15.100.150,1433",
      "secondary": "10.15.100.156,1433"
    },
    "highAvailability": {
      "healthState": "OK",
      "mirroringCertificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
    },
    "observedGeneration": 1,
    "readyReplicas": "2/2",
    "state": "Ready"
  }

Pomocí aplikace SQL Server Management Studio se můžete připojit k primárnímu koncovému bodu a ověřit zobrazení dynamické správy jako:

SELECT * FROM sys.dm_hadr_availability_replica_states

Availability Group

A řídicí panel dostupnosti s obsahem:

Container Availability Group dashboard

Scénáře převzetí služeb při selhání

Na rozdíl od skupin dostupnosti AlwaysOn sql Serveru je skupina dostupnosti obsažená jako spravované řešení s vysokou dostupností. Režimy převzetí služeb při selhání jsou proto omezené v porovnání s typickými režimy dostupnými u skupin dostupnosti AlwaysOn SQL Serveru.

Nasaďte spravované instance SQL úrovně služby Pro důležité obchodní informace v konfiguraci dvou replik nebo ve třech konfiguracích replik. Účinky selhání a následná obnovitelnost se u každé konfigurace liší. Tři instance repliky poskytují vyšší úroveň dostupnosti a obnovení než dvě instance repliky.

V konfiguraci dvou replik, pokud jsou SYNCHRONIZEDoba stavy uzlů , pokud primární replika přestane být k dispozici, sekundární replika se automaticky zvýší na primární. Jakmile bude replika, která selhala, bude aktualizována o všechny čekající změny. Pokud mezi replikami dojde k problémům s připojením, nemusí primární replika potvrdit žádné transakce, protože každá transakce musí být potvrzena na obou replikách, než se vrátí úspěch na primárním serveru.

V konfiguraci tří replik musí transakce potvrdit alespoň ve 2 ze 3 replik před vrácením zprávy o úspěchu zpět do aplikace. V případě selhání se jeden z sekundářů automaticky zvýší na primární, zatímco Kubernetes se pokusí obnovit neúspěšnou repliku. Jakmile bude replika dostupná, automaticky se připojí zpět k obsažené skupině dostupnosti a čekající změny se synchronizují. Pokud dochází k problémům s připojením mezi replikami a více než 2 repliky nejsou synchronizované, primární replika nebude provádět žádné transakce.

Poznámka:

Doporučuje se nasadit Pro důležité obchodní informace SQL Managed Instance v konfiguraci tří replik než dvě konfigurace repliky, aby se dosáhlo téměř nulové ztráty dat.

Pokud chcete převzít služby při selhání z primární repliky na jeden z sekundárních objektů, spusťte pro plánovanou událost následující příkaz:

Pokud se připojujete k primárnímu serveru, můžete pomocí následujícího jazyka T-SQL převzít služby při selhání instance SQL na jeden z sekundárních souborů:

ALTER AVAILABILITY GROUP current SET (ROLE = SECONDARY);

Pokud se připojíte k sekundární, můžete pomocí následujícího příkazu T-SQL zvýšit úroveň požadované sekundární na primární repliku.

ALTER AVAILABILITY GROUP current SET (ROLE = PRIMARY);

Upřednostňovaná primární replika

Konkrétní repliku můžete také nastavit jako primární repliku pomocí AZ CLI následujícím způsobem:

az sql mi-arc update --name <sqlinstance name> --k8s-namespace <namespace> --use-k8s --preferred-primary-replica <replica>

Příklad:

az sql mi-arc update --name sqldemo --k8s-namespace my-namespace --use-k8s --preferred-primary-replica sqldemo-3

Poznámka:

Kubernetes se pokusí nastavit upřednostňovanou repliku, ale není zaručeno.

Obnovení databáze do instance s více replikou

Další kroky jsou potřeba k obnovení databáze do skupiny dostupnosti. Následující kroky ukazují, jak obnovit databázi do spravované instance a přidat ji do skupiny dostupnosti.

  1. Zveřejnění externího koncového bodu primární instance vytvořením nové služby Kubernetes

    Určete pod, který je hostitelem primární repliky. Připojení ke spravované instanci a spusťte:

    SELECT @@SERVERNAME
    

    Dotaz vrátí pod, který je hostitelem primární repliky.

    Službu Kubernetes vytvořte do primární instance spuštěním následujícího příkazu, pokud váš cluster Kubernetes používá NodePort služby. Nahraďte <podName> názvem serveru vráceným v předchozím kroku <serviceName> upřednostňovaným názvem pro vytvořenou službu Kubernetes.

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=NodePort
    

    Pro službu LoadBalancer spusťte stejný příkaz s tím rozdílem, že typ vytvořené služby je LoadBalancer. Příklad:

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=LoadBalancer
    

    Tady je příklad spuštění tohoto příkazu ve službě Azure Kubernetes Service, kde pod, který je sql2-0hostitelem primární služby:

    kubectl -n arc-cluster expose pod sql2-0 --port=1533  --name=sql2-0-p --type=LoadBalancer
    

    Získejte IP adresu vytvořené služby Kubernetes:

    kubectl get services -n <namespaceName>
    
  2. Obnovte databázi do koncového bodu primární instance.

    Přidejte záložní soubor databáze do kontejneru primární instance.

    kubectl cp <source file location> <pod name>:var/opt/mssql/data/<file name> -c <serviceName> -n <namespaceName>
    

    Příklad

    kubectl cp /home/WideWorldImporters-Full.bak sql2-1:var/opt/mssql/data/WideWorldImporters-Full.bak -c arc-sqlmi -n arc
    

    Obnovte záložní soubor databáze spuštěním následujícího příkazu.

    RESTORE DATABASE test FROM DISK = '/var/opt/mssql/data/<file name>.bak'
    WITH MOVE '<database name>' to '/var/opt/mssql/data/<file name>.mdf'  
    ,MOVE '<database name>' to '/var/opt/mssql/data/<file name>_log.ldf'  
    ,RECOVERY, REPLACE, STATS = 5;  
    GO
    

    Příklad

    RESTORE Database WideWorldImporters
    FROM DISK = '/var/opt/mssql/data/WideWorldImporters-Full.BAK'
    WITH
    MOVE 'WWI_Primary' TO '/var/opt/mssql/data/WideWorldImporters.mdf',
    MOVE 'WWI_UserData' TO '/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
    MOVE 'WWI_Log' TO '/var/opt/mssql/data/WideWorldImporters.ldf',
    MOVE 'WWI_InMemory_Data_1' TO '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
    RECOVERY, REPLACE, STATS = 5;  
    GO
    
  3. Přidejte databázi do skupiny dostupnosti.

    Aby se databáze přidala do skupiny dostupnosti, musí běžet v režimu úplného obnovení a musí být provedena záloha protokolu. Spuštěním níže uvedených příkazů TSQL přidejte obnovenou databázi do skupiny dostupnosti.

    ALTER DATABASE <databaseName> SET RECOVERY FULL;
    BACKUP DATABASE <databaseName> TO DISK='<filePath>'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE <databaseName>
    

    Následující příklad přidá databázi s názvem WideWorldImporters , která byla obnovena v instanci:

    ALTER DATABASE WideWorldImporters SET RECOVERY FULL;
    BACKUP DATABASE WideWorldImporters TO DISK='/var/opt/mssql/data/WideWorldImporters.bak'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE WideWorldImporters
    

Důležité

Osvědčeným postupem je odstranit službu Kubernetes vytvořenou výše spuštěním tohoto příkazu:

kubectl delete svc sql2-0-p -n arc

Omezení

Spravovaná instance SQL povolená skupinami dostupnosti Azure Arc má stejná omezení jako skupiny dostupnosti clusteru s velkými objemy dat. Další informace najdete v tématu Nasazení clusteru s velkými objemy dat SQL Serveru s vysokou dostupností.

Další informace o funkcích a možnostech služby SQL Managed Instance povolené službou Azure Arc