النسخ الاحتياطي واسترداد قاعدة بيانات وحدة التحكم
عند نشر خدمات بيانات Azure Arc، تكون وحدة تحكم بيانات Azure Arc واحدة من المكونات الأكثر أهمية التي يتم نشرها. تتضمن وظائف وحدة تحكم البيانات ما يلي:
- توفير الموارد وإلغاء توفيرها وتحديثها
- تنسيق معظم أنشطة SQL Managed Instance التي تم تمكينها بواسطة Azure Arc مثل الترقيات وتوسيع نطاقها وما إلى ذلك.
- التقاط معلومات الفوترة والاستخدام لكل مثيل مدار من Arc SQL.
من أجل أداء الوظائف أعلاه، تحتاج وحدة تحكم البيانات إلى تخزين مخزون لجميع مثيلات Arc SQL المدارة الحالية والفوترة والاستخدام والحالة الحالية لجميع مثيلات SQL المدارة هذه. يتم تخزين كل هذه البيانات في قاعدة بيانات تسمى controller
داخل مثيل SQL Server الذي يتم نشره في controldb-0
pod.
توضح هذه المقالة كيفية إجراء نسخ احتياطي لقاعدة بيانات وحدة التحكم.
النسخ الاحتياطي لقاعدة بيانات وحدة تحكم البيانات
كجزء من الإمكانات المضمنة، يتم نسخ قاعدة بيانات controller
وحدة تحكم البيانات احتياطيا تلقائيا كل 5 دقائق بمجرد تمكين النسخ الاحتياطية. لتمكين النسخ الاحتياطية:
backups-controldb
PersistentVolumeClaim
إنشاء مع فئة تخزين تدعمReadWriteMany
الوصول:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
DataController
تحرير مواصفات المورد المخصصة لتضمينbackups
تعريف تخزين:
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
.bak
يتم تخزين ملفات controller
قاعدة البيانات على backups
وحدة تخزين controldb
الجراب في /var/opt/backups/mssql
.
استرداد قاعدة بيانات وحدة التحكم
هناك نوعان من الاسترداد المحتمل:
controller
تالف وتحتاج فقط إلى استعادة قاعدة البيانات- التخزين بأكمله الذي يحتوي على
controller
البيانات وملفات السجل تالف/ذهب وتحتاج إلى استرداد
سيناريو قاعدة بيانات وحدة التحكم التالفة
في هذا السيناريو، يتم تشغيل جميع pods، ويمكنك الاتصال ب controldb
SQL Server، وقد يكون هناك تلف في controller
قاعدة البيانات. تحتاج فقط إلى استعادة قاعدة البيانات من نسخة احتياطية.
اتبع هذه الخطوات لاستعادة قاعدة بيانات وحدة التحكم من نسخة احتياطية، إذا كان SQL Server لا يزال قيد التشغيل على controldb
pod، وكنت قادرا على الاتصال به:
تحقق من الاتصال ب جراب SQL Server الذي
controller
يستضيف قاعدة البيانات.أولا، استرداد بيانات الاعتماد للسر.
controller-system-secret
هو السر الذي يحتفظ ببيانات الاعتمادsystem
لحساب المستخدم الذي يمكن استخدامه للاتصال بمثيل SQL. قم بتشغيل الأمر التالي لاسترداد المحتويات السرية:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
على سبيل المثال:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
فك ترميز بيانات الاعتماد المشفرة base64. تحتوي محتويات ملف yaml للبيانات السرية
controller-system-secret
علىpassword
وusername
. يمكنك استخدام أي أداة فك ترميز base64 لفك تشفير محتوياتpassword
.التحقق من الاتصال: باستخدام بيانات الاعتماد التي تم فك ترميزها، قم بتشغيل أمر مثل
SELECT @@SERVERNAME
التحقق من الاتصال ب 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"
قم بتغيير حجم وحدة التحكم ReplicaSet إلى 0 نسخ متماثلة كما يلي:
kubectl scale --replicas=0 rs/control -n <namespace>`
على سبيل المثال:
kubectl scale --replicas=0 rs/control -n arcdataservices
الاتصال إلى
controldb
SQL Server كما هوsystem
موضح في الخطوة 1.حذف قاعدة بيانات وحدة التحكم التالفة باستخدام T-SQL:
DROP DATABASE controller
استعادة قاعدة البيانات من النسخ الاحتياطي - بعد إسقاط التالف
controllerdb
. على سبيل المثال: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
قم بتحجيم وحدة التحكم ReplicaSet احتياطيا حتى 1 نسخة متماثلة.
kubectl scale --replicas=1 rs/control -n <namespace>
على سبيل المثال:
kubectl scale --replicas=1 rs/control -n arcdataservices
سيناريو التخزين التالفة
في هذا السيناريو، يحتوي التخزين الذي يستضيف بيانات وحدة تحكم البيانات وملفات السجل على تلف وتم توفير تخزين جديد وتحتاج إلى استعادة قاعدة بيانات وحدة التحكم.
اتبع هذه الخطوات لاستعادة قاعدة بيانات وحدة التحكم من نسخة احتياطية مع تخزين جديد ل controldb
StatefulSet:
تأكد من أن لديك نسخة احتياطية من آخر حالة جيدة معروفة لقاعدة
controller
البياناتقم بتغيير حجم وحدة التحكم ReplicaSet إلى 0 نسخ متماثلة كما يلي:
kubectl scale --replicas=0 rs/control -n <namespace>
على سبيل المثال:
kubectl scale --replicas=0 rs/control -n arcdataservices
قم بتغيير
controldb
حجم StatefulSet إلى 0 نسخ متماثلة، كما يلي:kubectl scale --replicas=0 sts/controldb -n <namespace>
على سبيل المثال:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
إنشاء سر kubernetes باسم
controller-sa-secret
باستخدام YAML التالي:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
قم بتحرير
controldb
StatefulSet لتضمين وحدةcontroller-sa-secret
تخزين وتركيب وحدة تخزين مقابلة (/var/run/secrets/mounts/credentials/mssql-sa-password
) في الحاويةmssql-server
، باستخدامkubectl edit sts controldb -n <namespace>
الأمر .إنشاء بيانات جديدة (
data-controldb
) وسجلات (logs-controldb
) مطالبات وحدة التخزين الثابتة للحجيرةcontroldb
كما يلي: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
حجم StatefulSet مرة أخرى إلى نسخة متماثلة 1 باستخدام:kubectl scale --replicas=1 sts/controldb -n <namespace>
الاتصال إلى
controldb
خادم SQL باستخدامsa
كلمة المرور في السر الذيcontroller-sa-secret
تم إنشاؤه سابقا.system
إنشاء تسجيل دخول مع دور مسؤول النظام باستخدام كلمة المرور فيcontroller-system-secret
سر kubernetes كما يلي:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
استعادة النسخة الاحتياطية
RESTORE
باستخدام الأمر كما يلي:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
قم بإنشاء
controldb-rw-user
تسجيل دخول باستخدام كلمة المرور فيcontroller-db-rw-secret
السرCREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
وربطها بالمستخدم الحاليcontroldb-rw-user
في قاعدة بياناتALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
وحدة التحكم .sa
تعطيل تسجيل الدخول باستخدام TSQL -ALTER LOGIN [sa] DISABLE
.قم بتحرير
controldb
StatefulSet لإزالةcontroller-sa-secret
وحدة التخزين وتركيب وحدة التخزين المقابلة.controller-sa-secret
احذف البيانات السرية.قم بتحجيم وحدة التحكم ReplicaSet احتياطيا إلى نسخة متماثلة
kubectl scale
1 باستخدام الأمر .