Zálohování a obnovení databáze kontroleru
Při nasazování datových služeb Azure Arc je kontroler dat Azure Arc jednou z nejdůležitějších komponent, které se nasazují. Mezi funkce kontroleru dat patří:
- Zřízení, zrušení zřízení a aktualizace prostředků
- Orchestrace většiny aktivit pro spravovanou instanci SQL povolenou službou Azure Arc, jako jsou upgrady, horizontální navýšení kapacity atd.
- Zachyťte informace o fakturaci a využití každé spravované instance Arc SQL.
Aby bylo možné provádět výše uvedené funkce, musí kontroler dat ukládat inventář všech aktuálních instancí spravovaných službou Arc SQL, fakturaci, využití a aktuální stav všech těchto spravovaných instancí SQL. Všechna tato data jsou uložena v databázi volané controller
v instanci SQL Serveru, která je nasazena do podu controldb-0
.
Tento článek vysvětluje, jak zálohovat databázi kontroleru.
Zálohování databáze kontroleru dat
V rámci integrovaných funkcí se databáze controller
kontroleru dat automaticky zálohuje každých 5 minut, jakmile se povolí zálohování. Povolení záloh:
- Vytvořte s
backups-controldb
PersistentVolumeClaim
třídou úložiště, která podporujeReadWriteMany
přístup:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
- Upravte specifikaci vlastního
DataController
prostředku tak, aby obsahovala definicibackups
úložiště:
storage:
backups:
accessMode: ReadWriteMany
className: <storage-class>
size: 15Gi
data:
accessMode: ReadWriteOnce
className: managed-premium
size: 15Gi
logs:
accessMode: ReadWriteOnce
className: managed-premium
size: 10Gi
Soubory .bak
databáze controller
jsou uloženy na backups
svazku podu controldb
na adrese /var/opt/backups/mssql
.
Obnovení databáze kontroleru
Existují dva typy možného obnovení:
controller
je poškozen a stačí obnovit databázi.- celé úložiště, které obsahuje
controller
data a soubory protokolů, jsou poškozené nebo pryč a potřebujete provést obnovení.
Scénář databáze poškozeného kontroleru
V tomto scénáři jsou všechny pody spuštěné, můžete se připojit k controldb
SQL Serveru a může dojít k poškození controller
databáze. Stačí obnovit databázi ze zálohy.
Pokud je sql Server stále v provozu a běží na podu controldb
, obnovte databázi kontroleru ze zálohy a můžete se k ní připojit:
Ověřte připojení k podu SQL Serveru, který je hostitelem
controller
databáze.Nejprve načtěte přihlašovací údaje pro tajný klíč.
controller-system-secret
je tajný klíč, který obsahuje přihlašovací údaje prosystem
uživatelský účet, který lze použít pro připojení k instanci SQL. Spuštěním následujícího příkazu načtěte obsah tajného kódu:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
Příklad:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
Dekódujte přihlašovací údaje zakódované v base64. Obsah souboru yaml tajného klíče
controller-system-secret
obsahuje apassword
username
. K dekódování obsahupassword
dekódovače base64 můžete použít jakýkoli dekódovací nástroj base64 .Ověřte připojení: Pomocí dekódovaných přihlašovacích údajů spusťte příkaz, například
SELECT @@SERVERNAME
k ověření připojení k SQL Serveru.kubectl exec controldb-0 -n <namespace> -c mssql-server -- /opt/mssql-tools/bin/sqlcmd -S localhost -U system -P "<password>" -Q "SELECT @@SERVERNAME"
kubectl exec controldb-0 -n contosons -c mssql-server -- /opt/mssql-tools/bin/sqlcmd -S localhost -U system -P "<password>" -Q "SELECT @@SERVERNAME"
Škálujte sadu replik kontroleru na 0 replik následujícím způsobem:
kubectl scale --replicas=0 rs/control -n <namespace>`
Příklad:
kubectl scale --replicas=0 rs/control -n arcdataservices
Připojte se k
controldb
SQL Serveru, jaksystem
je popsáno v kroku 1.Odstraňte poškozenou databázi kontroleru pomocí T-SQL:
DROP DATABASE controller
Obnovte databázi ze zálohy – po vyřazení poškozené
controllerdb
databáze. Příklad:RESTORE DATABASE test FROM DISK = '/var/opt/backups/mssql/<controller backup file>.bak' WITH MOVE 'controller' to '/var/opt/mssql/data/controller.mdf ,MOVE 'controller' to '/var/opt/mssql/data/controller_log.ldf' ,RECOVERY; GO
Škálujte repliku repliky kontroleru zpět na 1 repliku.
kubectl scale --replicas=1 rs/control -n <namespace>
Příklad:
kubectl scale --replicas=1 rs/control -n arcdataservices
Scénář poškozeného úložiště
V tomto scénáři má úložiště hostující data kontroleru dat a soubory protokolů poškození a nové úložiště bylo zřízeno a potřebujete obnovit databázi kontroleru.
Následujícím postupem obnovíte databázi kontroleru ze zálohy s novým úložištěm pro controldb
StatefulSet:
Ujistěte se, že máte zálohu posledního známého dobrého
controller
stavu databáze.Škálujte sadu replik kontroleru na 0 replik následujícím způsobem:
kubectl scale --replicas=0 rs/control -n <namespace>
Příklad:
kubectl scale --replicas=0 rs/control -n arcdataservices
Škálujte
controldb
stavovou sadu dolů na 0 replik, a to následujícím způsobem:kubectl scale --replicas=0 sts/controldb -n <namespace>
Příklad:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Vytvořte tajný kód Kubernetes s názvem
controller-sa-secret
s následujícím YAML:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
controldb
Upravte StatefulSet tak, aby zahrnovalcontroller-sa-secret
svazek a odpovídající připojení svazku (/var/run/secrets/mounts/credentials/mssql-sa-password
) v kontejnerumssql-server
pomocíkubectl edit sts controldb -n <namespace>
příkazu.Vytvořte nová data (
data-controldb
) a protokoly (logs-controldb
) deklarace trvalých svazků pro podcontroldb
následujícím způsobem:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data-controldb namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 15Gi storageClassName: <storage class> --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: logs-controldb namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: <storage class>
Škálujte
controldb
StatefulSet zpět na 1 repliku pomocí:kubectl scale --replicas=1 sts/controldb -n <namespace>
Připojte se k
controldb
SQL Serveru jakosa
heslo v dříve vytvořeném tajnémcontroller-sa-secret
kódu.Pomocí hesla v tajném
controller-system-secret
kódu Kubernetes vytvořtesystem
přihlašovací jméno s rolí sysadmin následujícím způsobem:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Pomocí následujícího příkazu obnovte zálohu
RESTORE
:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
controldb-rw-user
Vytvořte přihlášení pomocí hesla v tajnémcontroller-db-rw-secret
kóduCREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
a přidružte ho k existujícímucontroldb-rw-user
uživateli v databázi kontroleruALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
.Zakažte
sa
přihlášení pomocí TSQL –ALTER LOGIN [sa] DISABLE
.controldb
Upravte StatefulSet tak, aby se odebralcontroller-sa-secret
svazek a odpovídající připojení svazku.controller-sa-secret
Odstraňte tajný kód.Pomocí příkazu škálujte repliku repliky kontroleru na 1 repliku
kubectl scale
.