Een back-up maken van een controllerdatabase en deze herstellen
Wanneer u Azure Arc-gegevensservices implementeert, is de Azure Arc-gegevenscontroller een van de meest kritieke onderdelen die worden geïmplementeerd. De functies van de gegevenscontroller zijn:
- Resources inrichten, de inrichting ongedaan maken en bijwerken
- De meeste activiteiten organiseren voor SQL Managed Instance die is ingeschakeld door Azure Arc, zoals upgrades, uitschalen, enzovoort.
- Noteer de facturerings- en gebruiksgegevens van elk beheerd Arc SQL-exemplaar.
Om bovenstaande functies uit te voeren, moet de gegevenscontroller een inventaris opslaan van alle huidige beheerde Arc SQL-exemplaren, facturering, gebruik en de huidige status van al deze met SQL beheerde exemplaren. Al deze gegevens worden opgeslagen in een database die wordt aangeroepen controller
in het SQL Server-exemplaar dat in de controldb-0
pod is geïmplementeerd.
In dit artikel wordt uitgelegd hoe u een back-up maakt van de controllerdatabase.
Een back-up maken van een database voor gegevenscontroller
Als onderdeel van ingebouwde mogelijkheden wordt er elke 5 minuten automatisch een back-up van de database controller
van de gegevenscontroller gemaakt zodra back-ups zijn ingeschakeld. Back-ups inschakelen:
- Maak een
backups-controldb
PersistentVolumeClaim
met een opslagklasse die ondersteuning biedt voorReadWriteMany
toegang:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
- Bewerk de
DataController
aangepaste resourcespecificatie om eenbackups
opslagdefinitie op te nemen:
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
De .bak
bestanden voor de controller
database worden opgeslagen op het backups
volume van de controldb
pod op /var/opt/backups/mssql
.
Controllerdatabase herstellen
Er zijn twee soorten herstel mogelijk:
controller
is beschadigd en u hoeft alleen de database te herstellen- de volledige opslag die de
controller
gegevens en logboekbestanden bevat, is beschadigd/verdwenen en u moet herstellen
Scenario met beschadigde controllerdatabase
In dit scenario zijn alle pods actief en werkend, kunt u verbinding maken met de controldb
SQL Server en kan de database beschadigd controller
zijn. U hoeft de database alleen te herstellen vanuit een back-up.
Volg deze stappen om de controllerdatabase te herstellen vanuit een back-up, als de SQL Server nog steeds actief is op de controldb
pod en u er verbinding mee kunt maken:
Controleer de verbinding met SQL Server-pods die als host fungeren voor de
controller
database.Haal eerst de referenties voor het geheim op.
controller-system-secret
is het geheim met de referenties voor hetsystem
gebruikersaccount dat kan worden gebruikt om verbinding te maken met het SQL-exemplaar. Voer de volgende opdracht uit om de geheime inhoud op te halen:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
Voorbeeld:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
Decoderen van de met Base64 gecodeerde referenties. De inhoud van het yaml-bestand van het geheim
controller-system-secret
bevat eenpassword
enusername
. U kunt elk hulpprogramma voor base64-decoderen gebruiken om de inhoud van depassword
.Controleer de connectiviteit: Voer met de gedecodeerde referenties een opdracht uit, bijvoorbeeld
SELECT @@SERVERNAME
om de verbinding met de SQL Server te verifiëren.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"
Schaal de controllerReplicaSet als volgt omlaag naar 0 replica's:
kubectl scale --replicas=0 rs/control -n <namespace>`
Voorbeeld:
kubectl scale --replicas=0 rs/control -n arcdataservices
Maak verbinding met de
controldb
SQL Server, zoalssystem
beschreven in stap 1.Verwijder de beschadigde controllerdatabase met behulp van T-SQL:
DROP DATABASE controller
Herstel de database vanuit een back-up- nadat de beschadigde
controllerdb
is verwijderd. Voorbeeld: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
Schaal de replicaset van de controller terug tot 1 replica.
kubectl scale --replicas=1 rs/control -n <namespace>
Voorbeeld:
kubectl scale --replicas=1 rs/control -n arcdataservices
Beschadigd opslagscenario
In dit scenario is de opslag die als host fungeert voor de gegevenscontrollergegevens en logboekbestanden, beschadigd en is er een nieuwe opslag ingericht en moet u de controllerdatabase herstellen.
Volg deze stappen om de controllerdatabase te herstellen vanuit een back-up met nieuwe opslag voor de controldb
StatefulSet:
Zorg ervoor dat u een back-up hebt van de laatst bekende goede status van de
controller
databaseSchaal de controllerReplicaSet als volgt omlaag naar 0 replica's:
kubectl scale --replicas=0 rs/control -n <namespace>
Voorbeeld:
kubectl scale --replicas=0 rs/control -n arcdataservices
Schaal de
controldb
StatefulSet als volgt omlaag naar 0 replica's:kubectl scale --replicas=0 sts/controldb -n <namespace>
Voorbeeld:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Maak een kubernetes-geheim
controller-sa-secret
met de volgende YAML:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
Bewerk de
controldb
StatefulSet om eencontroller-sa-secret
volume en bijbehorende volumekoppeling (/var/run/secrets/mounts/credentials/mssql-sa-password
) in de container op te nemen met behulp vankubectl edit sts controldb -n <namespace>
demssql-server
opdracht.Maak als volgt nieuwe gegevens (
data-controldb
) en logboeken (logs-controldb
) permanente volumeclaims voor decontroldb
pod: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>
Schaal de
controldb
StatefulSet terug naar 1 replica met behulp van:kubectl scale --replicas=1 sts/controldb -n <namespace>
Maak verbinding met de
controldb
SQL-server metsa
behulp van het wachtwoord in hetcontroller-sa-secret
geheim dat u eerder hebt gemaakt.Maak als volgt een
system
aanmelding met de rol sysadmin met behulp van het wachtwoord in hetcontroller-system-secret
kubernetes-geheim:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Herstel de back-up met behulp van de
RESTORE
opdracht als volgt:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
Maak een
controldb-rw-user
aanmelding met behulp van het wachtwoord in hetcontroller-db-rw-secret
geheimCREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
en koppel deze aan de bestaandecontroldb-rw-user
gebruiker in de controllerdatabaseALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
.Schakel de
sa
aanmelding uit met behulp van TSQL -ALTER LOGIN [sa] DISABLE
.Bewerk de
controldb
StatefulSet om hetcontroller-sa-secret
volume en de bijbehorende volumekoppeling te verwijderen.Verwijder het
controller-sa-secret
geheim.Schaal de controller ReplicaSet terug tot 1 replica met behulp van de
kubectl scale
opdracht.