النسخ الاحتياطي واسترداد قاعدة بيانات وحدة التحكم

عند نشر خدمات بيانات Azure Arc، تكون وحدة تحكم بيانات Azure Arc واحدة من المكونات الأكثر أهمية التي يتم نشرها. تتضمن وظائف وحدة تحكم البيانات ما يلي:

  • توفير الموارد وإلغاء توفيرها وتحديثها
  • تنسيق معظم أنشطة SQL Managed Instance التي تم تمكينها بواسطة Azure Arc مثل الترقيات وتوسيع نطاقها وما إلى ذلك.
  • التقاط معلومات الفوترة والاستخدام لكل مثيل مدار من Arc SQL.

من أجل أداء الوظائف أعلاه، تحتاج وحدة تحكم البيانات إلى تخزين مخزون لجميع مثيلات Arc SQL المدارة الحالية والفوترة والاستخدام والحالة الحالية لجميع مثيلات SQL المدارة هذه. يتم تخزين كل هذه البيانات في قاعدة بيانات تسمى controller داخل مثيل SQL Server الذي يتم نشره في controldb-0 pod.

توضح هذه المقالة كيفية إجراء نسخ احتياطي لقاعدة بيانات وحدة التحكم.

النسخ الاحتياطي لقاعدة بيانات وحدة تحكم البيانات

كجزء من الإمكانات المضمنة، يتم نسخ قاعدة بيانات controller وحدة تحكم البيانات احتياطيا تلقائيا كل 5 دقائق بمجرد تمكين النسخ الاحتياطية. لتمكين النسخ الاحتياطية:

  • backups-controldbPersistentVolumeClaim إنشاء مع فئة تخزين تدعم 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.

استرداد قاعدة بيانات وحدة التحكم

هناك نوعان من الاسترداد المحتمل:

  1. controller تالف وتحتاج فقط إلى استعادة قاعدة البيانات
  2. التخزين بأكمله الذي يحتوي على controller البيانات وملفات السجل تالف/ذهب وتحتاج إلى استرداد

سيناريو قاعدة بيانات وحدة التحكم التالفة

في هذا السيناريو، يتم تشغيل جميع pods، ويمكنك الاتصال ب controldb SQL Server، وقد يكون هناك تلف في controller قاعدة البيانات. تحتاج فقط إلى استعادة قاعدة البيانات من نسخة احتياطية.

اتبع هذه الخطوات لاستعادة قاعدة بيانات وحدة التحكم من نسخة احتياطية، إذا كان SQL Server لا يزال قيد التشغيل على controldb pod، وكنت قادرا على الاتصال به:

  1. تحقق من الاتصال ب جراب 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"
      
  2. قم بتغيير حجم وحدة التحكم ReplicaSet إلى 0 نسخ متماثلة كما يلي:

    kubectl scale --replicas=0 rs/control -n <namespace>`
    

    على سبيل المثال:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. الاتصال إلى controldb SQL Server كما هو system موضح في الخطوة 1.

  4. حذف قاعدة بيانات وحدة التحكم التالفة باستخدام T-SQL:

    DROP DATABASE controller
    
  5. استعادة قاعدة البيانات من النسخ الاحتياطي - بعد إسقاط التالف 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
    
  6. قم بتحجيم وحدة التحكم ReplicaSet احتياطيا حتى 1 نسخة متماثلة.

    kubectl scale --replicas=1 rs/control -n <namespace>
    

    على سبيل المثال:

    kubectl scale --replicas=1 rs/control -n arcdataservices
    

سيناريو التخزين التالفة

في هذا السيناريو، يحتوي التخزين الذي يستضيف بيانات وحدة تحكم البيانات وملفات السجل على تلف وتم توفير تخزين جديد وتحتاج إلى استعادة قاعدة بيانات وحدة التحكم.

اتبع هذه الخطوات لاستعادة قاعدة بيانات وحدة التحكم من نسخة احتياطية مع تخزين جديد ل controldb StatefulSet:

  1. تأكد من أن لديك نسخة احتياطية من آخر حالة جيدة معروفة لقاعدة controller البيانات

  2. قم بتغيير حجم وحدة التحكم ReplicaSet إلى 0 نسخ متماثلة كما يلي:

    kubectl scale --replicas=0 rs/control -n <namespace>
    

    على سبيل المثال:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. قم بتغيير controldb حجم StatefulSet إلى 0 نسخ متماثلة، كما يلي:

    kubectl scale --replicas=0 sts/controldb -n <namespace>
    

    على سبيل المثال:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. إنشاء سر kubernetes باسم controller-sa-secret باستخدام YAML التالي:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. قم بتحرير controldb StatefulSet لتضمين وحدة controller-sa-secret تخزين وتركيب وحدة تخزين مقابلة (/var/run/secrets/mounts/credentials/mssql-sa-password) في الحاوية mssql-server ، باستخدام kubectl edit sts controldb -n <namespace> الأمر .

  6. إنشاء بيانات جديدة (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>
    
  7. قم بتغيير controldb حجم StatefulSet مرة أخرى إلى نسخة متماثلة 1 باستخدام:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. الاتصال إلى controldb خادم SQL باستخدام sa كلمة المرور في السر الذي controller-sa-secret تم إنشاؤه سابقا.

  9. system إنشاء تسجيل دخول مع دور مسؤول النظام باستخدام كلمة المرور في controller-system-secret سر kubernetes كما يلي:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. استعادة النسخة الاحتياطية RESTORE باستخدام الأمر كما يلي:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  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]وحدة التحكم .

  2. sa تعطيل تسجيل الدخول باستخدام TSQL - ALTER LOGIN [sa] DISABLE.

  3. قم بتحرير controldb StatefulSet لإزالة controller-sa-secret وحدة التخزين وتركيب وحدة التخزين المقابلة.

  4. controller-sa-secret احذف البيانات السرية.

  5. قم بتحجيم وحدة التحكم ReplicaSet احتياطيا إلى نسخة متماثلة kubectl scale 1 باستخدام الأمر .

لوحات معلومات Azure Data Studio