Mencadangkan dan memulihkan database pengontrol
Saat Anda menyebarkan layanan data Azure Arc, Pengontrol Data Azure Arc adalah salah satu komponen paling penting yang disebarkan. Fungsi pengontrol data meliputi:
- Menyediakan, mendeprovisi, dan memperbarui sumber daya
- Mengatur sebagian besar aktivitas untuk SQL Managed Instance yang diaktifkan oleh Azure Arc seperti peningkatan, peluasan skala, dll.
- Ambil informasi penagihan dan penggunaan setiap instans terkelola Arc SQL.
Untuk melakukan fungsi di atas, pengontrol Data perlu menyimpan inventaris semua instans terkelola Arc SQL saat ini, penagihan, penggunaan, dan status saat ini dari semua instans terkelola SQL ini. Semua data ini disimpan dalam database yang disebut controller
dalam instans SQL Server yang disebarkan ke controldb-0
dalam pod.
Artikel ini menjelaskan cara mencadangkan database pengontrol.
Mencadangkan database pengontrol data
Sebagai bagian dari kemampuan bawaan, database controller
Pengontrol data secara otomatis dicadangkan setiap 5 menit setelah cadangan diaktifkan. Untuk mengaktifkan pencadangan:
- Buat
backups-controldb
PersistentVolumeClaim
dengan kelas penyimpanan yang mendukungReadWriteMany
akses:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
DataController
Edit spesifikasi sumber daya kustom untuk menyertakanbackups
definisi penyimpanan:
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
File .bak
untuk controller
database disimpan pada backups
volume controldb
pod di /var/opt/backups/mssql
.
Memulihkan database pengontrol
Ada dua jenis pemulihan yang mungkin:
controller
rusak dan Anda hanya perlu memulihkan database- seluruh penyimpanan yang berisi
controller
data dan file log rusak/hilang dan Anda perlu memulihkan
Skenario database pengontrol rusak
Dalam skenario ini, semua pod aktif dan berjalan, Anda dapat terhubung ke controldb
SQL Server, dan mungkin ada kerusakan dengan controller
database. Anda hanya perlu memulihkan database dari cadangan.
Ikuti langkah-langkah ini untuk memulihkan database pengontrol dari cadangan, jika SQL Server masih aktif dan berjalan di controldb
pod, dan Anda dapat terhubung ke sana:
Verifikasi konektivitas ke pod SQL Server yang menghosting
controller
database.Pertama, ambil kredensial untuk rahasia.
controller-system-secret
adalah rahasia yang menyimpan kredensial untuksystem
akun pengguna yang dapat digunakan untuk terhubung ke instans SQL. Jalankan perintah berikut untuk mengambil konten rahasia:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
Contohnya:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
Dekode kredensial yang dikodekan base64. Isi file yaml rahasia
controller-system-secret
berisipassword
danusername
. Anda dapat menggunakan alat dekoder base64 apa pun untuk mendekode kontenpassword
.Verifikasi konektivitas: Dengan kredensial yang didekodekan, jalankan perintah seperti
SELECT @@SERVERNAME
untuk memverifikasi konektivitas ke 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"
Turunkan skala ReplicaSet pengontrol ke 0 replika sebagai berikut:
kubectl scale --replicas=0 rs/control -n <namespace>`
Contohnya:
kubectl scale --replicas=0 rs/control -n arcdataservices
Sambungkan ke
controldb
SQL Server sepertisystem
yang dijelaskan di langkah 1.Hapus database pengontrol yang rusak menggunakan T-SQL:
DROP DATABASE controller
Pulihkan database dari cadangan - setelah rusak dihilangkan
controllerdb
. Contohnya: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
Skalakan ReplicaSet pengontrol Cadangkan hingga 1 replika.
kubectl scale --replicas=1 rs/control -n <namespace>
Contohnya:
kubectl scale --replicas=1 rs/control -n arcdataservices
Skenario penyimpanan yang rusak
Dalam skenario ini, penyimpanan yang menghosting data pengontrol data dan file log, mengalami kerusakan dan penyimpanan baru disediakan dan Anda perlu memulihkan database pengontrol.
Ikuti langkah-langkah ini untuk memulihkan database pengontrol dari cadangan dengan penyimpanan baru untuk controldb
StatefulSet:
Pastikan Anda memiliki cadangan status baik database terakhir yang
controller
diketahuiTurunkan skala ReplicaSet pengontrol ke 0 replika sebagai berikut:
kubectl scale --replicas=0 rs/control -n <namespace>
Contohnya:
kubectl scale --replicas=0 rs/control -n arcdataservices
Turunkan
controldb
Skala StatefulSet ke 0 replika, sebagai berikut:kubectl scale --replicas=0 sts/controldb -n <namespace>
Contohnya:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Buat rahasia kubernetes bernama
controller-sa-secret
dengan YAML berikut:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
controldb
Edit StatefulSet untuk menyertakancontroller-sa-secret
volume dan pemasangan volume yang sesuai (/var/run/secrets/mounts/credentials/mssql-sa-password
) dalammssql-server
kontainer, dengan menggunakankubectl edit sts controldb -n <namespace>
perintah .Buat data baru (
data-controldb
) dan log (logs-controldb
) klaim volume persisten untukcontroldb
pod sebagai berikut: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>
Skalakan
controldb
StatefulSet kembali ke 1 replika menggunakan:kubectl scale --replicas=1 sts/controldb -n <namespace>
Sambungkan ke
controldb
server SQL sepertisa
menggunakan kata sandi dalam rahasia yangcontroller-sa-secret
dibuat sebelumnya.Buat
system
login dengan peran sysadmin menggunakan kata sandi dicontroller-system-secret
rahasia kubernetes sebagai berikut:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Pulihkan cadangan menggunakan
RESTORE
perintah sebagai berikut:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
Buat
controldb-rw-user
login menggunakan kata sandi dicontroller-db-rw-secret
rahasiaCREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
dan kaitkan dengan pengguna yang adacontroldb-rw-user
di pengontrol DBALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
.sa
Nonaktifkan login menggunakan TSQL -ALTER LOGIN [sa] DISABLE
.controldb
Edit StatefulSet untuk menghapuscontroller-sa-secret
volume dan pemasangan volume yang sesuai.controller-sa-secret
Hapus rahasia.Skalakan ReplicaSet pengontrol Cadangkan hingga 1 replika menggunakan
kubectl scale
perintah .