Säkerhetskopiera och återställa kontrollantdatabas
När du distribuerar Azure Arc-datatjänster är Azure Arc-datakontrollanten en av de mest kritiska komponenterna som distribueras. Datakontrollantens funktioner omfattar:
- Etablera, avetablera och uppdatera resurser
- Samordna de flesta aktiviteterna för SQL Managed Instance som aktiveras av Azure Arc, till exempel uppgraderingar, utskalning osv.
- Samla in fakturerings- och användningsinformation för varje Arc SQL-hanterad instans.
För att kunna utföra ovanstående funktioner måste datakontrollanten lagra en inventering av alla aktuella Arc SQL-hanterade instanser, fakturering, användning och det aktuella tillståndet för alla dessa SQL-hanterade instanser. Alla dessa data lagras i en databas som anropas controller
i SQL Server-instansen controldb-0
som distribueras till podden.
Den här artikeln beskriver hur du säkerhetskopierar kontrollantdatabasen.
Säkerhetskopiera datastyrenhetsdatabas
Som en del av de inbyggda funktionerna säkerhetskopieras datastyrenhetens databas controller
automatiskt var 5:e minut när säkerhetskopior har aktiverats. Så här aktiverar du säkerhetskopior:
- Skapa en
backups-controldb
PersistentVolumeClaim
med en lagringsklass som stöderReadWriteMany
åtkomst:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
- Redigera den
DataController
anpassade resursspecifikationen så att den innehåller enbackups
lagringsdefinition:
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
Filerna .bak
för controller
databasen lagras på backups
poddens controldb
volym på /var/opt/backups/mssql
.
Återställa kontrollantdatabas
Det finns två typer av återställning:
controller
är skadad och du behöver bara återställa databasen- hela lagringen som innehåller
controller
data och loggfiler är skadad/borta och du måste återställa
Scenario med skadad kontrollantdatabas
I det här scenariot är alla poddar igång, du kan ansluta till controldb
SQL Server och det kan finnas en skada i controller
databasen. Du behöver bara återställa databasen från en säkerhetskopia.
Följ dessa steg för att återställa kontrollantdatabasen från en säkerhetskopia, om SQL Server fortfarande är igång på controldb
podden och du kan ansluta till den:
Kontrollera anslutningen till SQL Server-podden som är värd för
controller
databasen.Hämta först autentiseringsuppgifterna för hemligheten.
controller-system-secret
är hemligheten som innehåller autentiseringsuppgifternasystem
för användarkontot som kan användas för att ansluta till SQL-instansen. Kör följande kommando för att hämta det hemliga innehållet:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
Till exempel:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
Avkoda de base64-kodade autentiseringsuppgifterna. Innehållet i yaml-filen i hemligheten
controller-system-secret
innehåller enpassword
ochusername
. Du kan använda valfritt base64-avkodningsverktyg för att avkoda innehållet ipassword
.Verifiera anslutningen: Kör ett kommando med de avkodade autentiseringsuppgifterna, till exempel
SELECT @@SERVERNAME
för att verifiera anslutningen till SQL Server.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"
Skala ned styrenhetsreplikuppsättningen till 0 repliker enligt följande:
kubectl scale --replicas=0 rs/control -n <namespace>`
Till exempel:
kubectl scale --replicas=0 rs/control -n arcdataservices
Anslut till SQL Server
system
enligt beskrivningencontroldb
i steg 1.Ta bort den skadade kontrollantdatabasen med hjälp av T-SQL:
DROP DATABASE controller
Återställ databasen från säkerhetskopian – när den skadade har tagits
controllerdb
bort. Till exempel: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
Skala upp styrenhetsreplikuppsättningen till 1 replik.
kubectl scale --replicas=1 rs/control -n <namespace>
Till exempel:
kubectl scale --replicas=1 rs/control -n arcdataservices
Skadat lagringsscenario
I det här scenariot har lagringen som är värd för data- och loggfilerna för datakontrollanten skadats och en ny lagring har etablerats och du måste återställa kontrollantdatabasen.
Följ dessa steg för att återställa kontrollantdatabasen från en säkerhetskopia med ny lagring för controldb
StatefulSet:
Se till att du har en säkerhetskopia av databasens senast kända goda tillstånd
controller
Skala ned styrenhetsreplikuppsättningen till 0 repliker enligt följande:
kubectl scale --replicas=0 rs/control -n <namespace>
Till exempel:
kubectl scale --replicas=0 rs/control -n arcdataservices
controldb
Skala ned StatefulSet till 0 repliker enligt följande:kubectl scale --replicas=0 sts/controldb -n <namespace>
Till exempel:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Skapa en kubernetes-hemlighet med namnet
controller-sa-secret
med följande YAML:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
controldb
Redigera StatefulSet för att inkludera encontroller-sa-secret
volym och motsvarande volymmontering (/var/run/secrets/mounts/credentials/mssql-sa-password
) i containernmssql-server
med hjälpkubectl edit sts controldb -n <namespace>
av kommandot .Skapa nya data (
data-controldb
) och loggar (logs-controldb
) beständiga volymanspråk förcontroldb
podden på följande sätt: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>
controldb
Skala tillbaka StatefulSet till 1 replik med hjälp av:kubectl scale --replicas=1 sts/controldb -n <namespace>
Anslut till
controldb
SQL-servern som att använda lösenordet i hemlighetencontroller-sa-secret
somsa
skapades tidigare.Skapa en
system
inloggning med sysadmin-rollen med hjälp av lösenordet i kubernetes-hemlighetencontroller-system-secret
enligt följande:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Återställ säkerhetskopieringen med hjälp av
RESTORE
kommandot på följande sätt:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
Skapa en
controldb-rw-user
inloggning med lösenordet i hemlighetencontroller-db-rw-secret
CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
och associera den med den befintligacontroldb-rw-user
användaren i kontrollantdatabasenALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
.Inaktivera inloggningen
sa
med TSQL –ALTER LOGIN [sa] DISABLE
.controldb
Redigera StatefulSet för att ta bortcontroller-sa-secret
volymen och motsvarande volymmontering.Ta bort hemligheten
controller-sa-secret
.Skala styrenhetsreplikuppsättningen upp till 1 replik med kommandot
kubectl scale
.