Tworzenie kopii zapasowej i odzyskiwanie bazy danych kontrolera
Podczas wdrażania usług danych usługi Azure Arc kontroler danych usługi Azure Arc jest jednym z najważniejszych składników, które są wdrażane. Funkcje kontrolera danych obejmują:
- Aprowizacja, anulowanie aprowizacji i aktualizowanie zasobów
- Organizowanie większości działań dla usługi SQL Managed Instance włączonej przez usługę Azure Arc, takich jak uaktualnienia, skalowanie w poziomie itp.
- Przechwyć informacje dotyczące rozliczeń i użycia każdego wystąpienia zarządzanego usługi Arc SQL.
Aby móc wykonywać powyższe funkcje, kontroler danych musi przechowywać spis wszystkich bieżących wystąpień zarządzanych usługi Arc SQL, rozliczeń, użycia i bieżącego stanu wszystkich tych wystąpień zarządzanych SQL. Wszystkie te dane są przechowywane w bazie danych o nazwie controller
w wystąpieniu programu SQL Server wdrożonym w zasobniku controldb-0
.
W tym artykule wyjaśniono, jak utworzyć kopię zapasową bazy danych kontrolera.
Tworzenie kopii zapasowej bazy danych kontrolera danych
W ramach wbudowanych funkcji baza danych controller
kontrolera danych jest automatycznie tworzona co 5 minut po włączeniu kopii zapasowych. Aby włączyć kopie zapasowe:
- Utwórz element
backups-controldb
PersistentVolumeClaim
z klasą magazynu, która obsługujeReadWriteMany
dostęp:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
- Edytuj specyfikację zasobu niestandardowego,
DataController
aby uwzględnić definicjębackups
magazynu:
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
Pliki .bak
bazy controller
danych są przechowywane na backups
woluminie controldb
zasobnika pod adresem /var/opt/backups/mssql
.
Odzyskiwanie bazy danych kontrolera
Możliwe są dwa typy odzyskiwania:
controller
jest uszkodzony i wystarczy przywrócić bazę danych- cały magazyn zawierający
controller
dane i pliki dziennika jest uszkodzony/zniknął i musisz odzyskać
Scenariusz uszkodzonej bazy danych kontrolera
W tym scenariuszu wszystkie zasobniki są uruchomione, można nawiązać połączenie z controldb
controller
programem SQL Server i może wystąpić uszkodzenie bazy danych. Wystarczy przywrócić bazę danych z kopii zapasowej.
Wykonaj następujące kroki, aby przywrócić bazę danych kontrolera z kopii zapasowej, jeśli program SQL Server jest nadal uruchomiony na zasobniku controldb
i możesz nawiązać z nim połączenie:
Sprawdź łączność z zasobnikami programu SQL Server hostem
controller
bazy danych.Najpierw pobierz poświadczenia dla wpisu tajnego.
controller-system-secret
to wpis tajny, który przechowuje poświadczenia dlasystem
konta użytkownika, które może służyć do nawiązywania połączenia z wystąpieniem SQL. Uruchom następujące polecenie, aby pobrać zawartość wpisu tajnego:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
Na przykład:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
Zdekoduj poświadczenia zakodowane w formacie base64. Zawartość pliku yaml wpisu tajnego
controller-system-secret
zawiera elementpassword
iusername
. Aby zdekodować zawartość pliku , można użyć dowolnego narzędzia dekoderapassword
base64.Sprawdź łączność: za pomocą dekodowanych poświadczeń uruchom polecenie, takie jak
SELECT @@SERVERNAME
weryfikowanie łączności z programem 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"
Przeprowadź skalowanie kontrolera ReplicaSet w dół do 0 replik w następujący sposób:
kubectl scale --replicas=0 rs/control -n <namespace>`
Na przykład:
kubectl scale --replicas=0 rs/control -n arcdataservices
Połącz się z programem
controldb
SQL Server zgodniesystem
z opisem w kroku 1.Usuń uszkodzoną bazę danych kontrolera przy użyciu języka T-SQL:
DROP DATABASE controller
Przywróć bazę danych z kopii zapasowej — po usunięciu uszkodzonej
controllerdb
bazy danych. Na przykład: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
Przeprowadź skalowanie repliki kontroleraKonskaluj kopię zapasową do 1 repliki.
kubectl scale --replicas=1 rs/control -n <namespace>
Na przykład:
kubectl scale --replicas=1 rs/control -n arcdataservices
Uszkodzony scenariusz magazynu
W tym scenariuszu magazyn obsługujący dane i pliki dziennika kontrolera danych ma uszkodzenie, a nowy magazyn został aprowizowany i trzeba przywrócić bazę danych kontrolera.
Wykonaj następujące kroki, aby przywrócić bazę danych kontrolera z kopii zapasowej z nowym magazynem dla zestawu controldb
StatefulSet:
Upewnij się, że masz kopię zapasową ostatniego znanego dobrego
controller
stanu bazy danychPrzeprowadź skalowanie kontrolera ReplicaSet w dół do 0 replik w następujący sposób:
kubectl scale --replicas=0 rs/control -n <namespace>
Na przykład:
kubectl scale --replicas=0 rs/control -n arcdataservices
Przeprowadź skalowanie elementu
controldb
StatefulSet w dół do 0 replik w następujący sposób:kubectl scale --replicas=0 sts/controldb -n <namespace>
Na przykład:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Utwórz wpis tajny kubernetes o nazwie z
controller-sa-secret
następującym kodem YAML:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
Edytuj element StatefulSet,
controldb
aby uwzględnić wolumin i odpowiednią instalacjęcontroller-sa-secret
woluminu (/var/run/secrets/mounts/credentials/mssql-sa-password
) w kontenerzemssql-server
przy użyciukubectl edit sts controldb -n <namespace>
polecenia .Utwórz nowe dane (
data-controldb
) i dzienniki (logs-controldb
) trwałe oświadczenia woluminucontroldb
dla zasobnika w następujący sposób: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>
Przeprowadź skalowanie zestawu
controldb
StatefulSet z powrotem do 1 repliki przy użyciu:kubectl scale --replicas=1 sts/controldb -n <namespace>
Połącz się z serwerem
controldb
SQL jakosa
przy użyciu hasła w wpisie tajnymcontroller-sa-secret
utworzonym wcześniej.system
Utwórz identyfikator logowania z rolą sysadmin przy użyciu hasła w kluczu tajnymcontroller-system-secret
kubernetes w następujący sposób:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Przywróć kopię zapasową przy użyciu polecenia w
RESTORE
następujący sposób:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
controldb-rw-user
Utwórz identyfikator logowania przy użyciu hasła w kluczu tajnymcontroller-db-rw-secret
CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
i skojarz go z istniejącymcontroldb-rw-user
użytkownikiem w bazie danychALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
kontrolera .sa
Wyłącz logowanie przy użyciu języka TSQL —ALTER LOGIN [sa] DISABLE
.Edytuj element StatefulSet,
controldb
aby usunąć wolumin i odpowiednią instalacjęcontroller-sa-secret
woluminu.Usuń wpis
controller-sa-secret
tajny.Przeprowadź skalowanie repliki kontroleraKonskaluj kopię zapasową do 1 repliki
kubectl scale
przy użyciu polecenia .