قابلية وصول عالية مع تمكين مثيل SQL المدار بواسطة Azure Arc

يتم نشر مثيل SQL المدار الذي تم تمكينه بواسطة Azure Arc على Kubernetes كتطبيق حاوية. ويستخدم بنيات Kubernetes مثل المجموعات ذات الحالة والتخزين المستمر لتوفير المضمنة:

  • مراقبة السلامة
  • الكشف عن الفشل
  • تجاوز الفشل التلقائي للحفاظ على صحة الخدمة.

لزيادة الموثوقية، يمكنك أيضا تكوين مثيل SQL المدار الذي تم تمكينه بواسطة Azure Arc للنشر مع نسخ متماثلة إضافية في تكوين قابلية وصول عالية. تدير وحدة تحكم بيانات خدمات بيانات Arc ما يلي:

  • مراقبة‬
  • الكشف عن الفشل
  • تجاوز الفشل التلقائي

توفر خدمة البيانات الممكنة بواسطة Arc هذه الخدمة دون تدخل المستخدم. الخدمة:

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

يستكشف هذا المستند كلا النوعين من قابلية وصول عالية.

يوفر مثيل SQL المدار الذي تم تمكينه بواسطة Azure Arc مستويات مختلفة من التوفر العالي اعتمادا على ما إذا كان تم نشر مثيل SQL المدار كطبقة خدمة للأغراض العامة أو مستوى خدمة Business Critical .

قابلية وصول عالية في فئة خدمة الأغراض العامة

في طبقة خدمة الأغراض العامة، لا تتوفر سوى نسخة متماثلة واحدة، ويتم تحقيق قابلية وصول عالية من خلال تنسيق Kubernetes. على سبيل المثال، إذا تعطل جراب أو عقدة تحتوي على صورة حاوية المثيل المدارة، يحاول Kubernetes الوقوف في حاوية أو عقدة أخرى، وإرفاقها بنفس التخزين المستمر. خلال هذا الوقت، لا يتوفر مثيل SQL المُدار للتطبيقات. تحتاج التطبيقات إلى إعادة الاتصال وإعادة محاولة المعاملة عندما تكون الحجيرة الجديدة قيد التشغيل. إذا كان load balancer هو نوع الخدمة المستخدمة، يمكن للتطبيقات إعادة الاتصال بنقطة النهاية الأساسية نفسها وسيقوم Kubernetes بإعادة توجيه الاتصال إلى الأساسي الجديد. إذا كان نوع الخدمة هو nodeport، فستحتاج التطبيقات إلى إعادة الاتصال بعنوان IP الجديد.

تحقق من قابلية الوصول العالي المدمج

للتحقق من التوفر العالي للبناء الذي توفره Kubernetes، يمكنك:

  1. حذف جراب مثيل مدار موجود
  2. تحقق من استرداد Kubernetes من هذا الإجراء

أثناء الاسترداد، يقوم Kubernetes بتمهيد حاوية أخرى وإرفاق التخزين المستمر.

المتطلبات الأساسية

  1. عرض القرون.

    kubectl get pods -n <namespace of data controller>
    
  2. احذف pod المثيل المُدار.

    kubectl delete pod <name of managed instance>-0 -n <namespace of data controller>
    

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

    user@pc:/# kubectl delete pod sql1-0 -n arc
    pod "sql1-0" deleted
    
  3. اعرض القرون للتحقق من أن المثيل المُدار يتم استرداده.

    kubectl get pods -n <namespace of data controller>
    

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

    user@pc:/# kubectl get pods -n arc
    NAME                 READY   STATUS    RESTARTS   AGE
    sql1-0               2/3     Running   0          22s
    

بعد جميع الحاويات داخل استرداد الجراب، يمكنك الاتصال بالمثيل المدار.

قابلية وصول عالية في فئة الخدمات الحرجة للأعمال

في طبقة خدمة Business Critical، بالإضافة إلى ما يتم توفيره في الأصل بواسطة تنسيق Kubernetes، يوفر مثيل SQL المدار ل Azure Arc مجموعة توفر مضمنة. مجموعة قابلية وصول عالية التوفر المضمنة مبنية على تقنية SQL Server مجموعات قابلية وصول عالية التوفر AlwaysOn. يوفر مستويات أعلى من التوافر. يمكن نشر مثيل SQL المدار الذي تم تمكينه بواسطة Azure Arc المنشور مع مستوى خدمة Business Critical إما بنسختين متماثلتين أو 3 نسخ متماثلة. دائماً ما يتم الاحتفاظ بهذه النسخ المتماثلة متزامنة مع بعضها البعض.

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

مجموعات قابلية وصول عالية التوفر المضمنة

تربط مجموعة قابلية وصول عالية التوفر قاعدة بيانات مستخدم واحدة أو أكثر في مجموعة منطقية بحيث عندما يكون هناك تجاوز فشل، تفشل مجموعة قواعد البيانات بأكملها في النسخة المتماثلة الثانوية كوحدة واحدة. تقوم مجموعة قابلية وصول عالية التوفر فقط بتكرار البيانات الموجودة في قواعد بيانات المستخدم ولكن ليس البيانات الموجودة في قواعد بيانات النظام مثل عمليات تسجيل الدخول أو الأذونات أو وظائف العامل. تتضمن مجموعة قابلية وصول عالية التوفر المضمنة بيانات التعريف من قواعد بيانات النظام مثل قواعد بيانات msdb وmaster. عندما يتم إنشاء عمليات تسجيل الدخول أو تعديلها في النسخة المتماثلة الأساسية، يتم إنشاؤها تلقائياً أيضاً في النسخ المتماثلة الثانوية. وبالمثل، عند إنشاء وظيفة عامل أو تعديلها في النسخة المتماثلة الأساسية، تتلقى النسخ المتماثلة الثانوية هذه التغييرات أيضاً.

يأخذ مثيل SQL المدار الذي تم تمكينه بواسطة Azure Arc هذا المفهوم لمجموعة التوفر المضمنة ويضيف عامل تشغيل Kubernetes بحيث يمكن توزيعها وإدارتها على نطاق واسع.

القدرات التي تحتوي على مجموعات قابلية وصول عالية التوفر تمكّن:

  • عند التوزيع مع عدة نسخ متماثلة، يتم إنشاء مجموعة إتاحة واحدة تحمل نفس الاسم مثل مثيل SQL المُدار الذي تم تمكين Arc به. بشكل افتراضي، يحتوي AG المضمن على ثلاث نسخ متماثلة، بما في ذلك الأساسي. تتم إدارة جميع عمليات CRUD لمجموعة قابلية وصول عالية التوفر داخلياً، بما في ذلك إنشاء مجموعة قابلية وصول عالية التوفر أو الانضمام إلى النسخ المتماثلة إلى مجموعة قابلية وصول عالية التوفر التي تم إنشاؤها. لا يمكنك إنشاء المزيد من مجموعات التوفر في مثيل.

  • تتم إضافة جميع قواعد البيانات تلقائياً إلى مجموعة قابلية وصول عالية التوفر، بما في ذلك جميع قواعد بيانات المستخدم والنظام مثل master وmsdb. توفر هذه الإمكانية عرض نظام واحد عبر النسخ المتماثلة لمجموعة الإتاحة. لاحظ قواعد بيانات containedag_master وcontainedag_msdb إذا كنت تتصل مباشرة بالمثيل. تمثل قواعد البيانات containedag_*master وmsdb داخل مجموعة الإتاحة.

  • يتم توفير نقطة نهاية خارجية تلقائياً للاتصال بقواعد البيانات ضمن مجموعة الإتاحة. تلعب نقطة النهاية هذه <managed_instance_name>-external-svc دور مستمع مجموعة قابلية وصول عالية التوفر.

نشر مثيل SQL المدار الذي تم تمكينه بواسطة Azure Arc مع نسخ متماثلة متعددة باستخدام مدخل Microsoft Azure

من مدخل Microsoft Azure، في صفحة إنشاء مثيل مدار SQL ممكن بواسطة Azure Arc:

  1. حدد Configure Compute + Storage ضمن Compute + Storage. تعرض البوابة إعدادات متقدمة.
  2. ضمن طبقة الخدمة، حدد Business Critical.
  3. فحص "لأغراض التطوير فقط"، إذا كنت تستخدم لأغراض التطوير.
  4. ضمن قابلية وصول عالية، حدد إما نسختين متماثلتين أو 3 نسخ متماثلة.

High availability settings

النشر باستخدام نسخ متماثلة متعددة باستخدام Azure CLI

عند نشر مثيل مدار SQL ممكن بواسطة Azure Arc في طبقة خدمة Business Critical، ينشئ النشر نسخا متماثلة متعددة. يتم إجراء الإعداد والتكوين لمجموعة قابلية وصول عالية التوفر المضمنة بين تلك الطبعات تلقائياً أثناء التزويد.

على سبيل المثال، يقوم الأمر التالي بإنشاء مثيل مُدار بثلاث نسخ متماثلة.

وضع الاتصال غير المباشر:

az sql mi-arc create -n <instanceName> --k8s-namespace <namespace> --use-k8s --tier <tier> --replicas <number of replicas>

مثال:

az sql mi-arc create -n sqldemo --k8s-namespace my-namespace --use-k8s --tier BusinessCritical --replicas 3

وضع الاتصال المباشر:

az sql mi-arc create --name <name> --resource-group <group>  --location <Azure location> –subscription <subscription>  --custom-location <custom-location> --tier <tier> --replicas <number of replicas>

مثال:

az sql mi-arc create --name sqldemo --resource-group rg  --location uswest2 –subscription xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  --custom-location private-location --tier BusinessCritical --replcias 3

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

عرض حالة التوفر العالي ومراقبتها

بمجرد اكتمال التوزيع، اتصل بنقطة النهاية الأساسية من Management Studio.

تحقق من نقطة نهاية النسخة المتماثلة الأساسية واستردادها، واتصل بها من Management Studio. على سبيل المثال، إذا تم توزيع مثيل SQL باستخدام service-type=loadbalancer، فقم بتشغيل الأمر أدناه لاسترداد نقطة النهاية للاتصال بها:

az sql mi-arc list --k8s-namespace my-namespace --use-k8s

أو

kubectl get sqlmi -A

احصل على نقاط النهاية الأساسية والثانوية وحالة AG

kubectl describe sqlmi استخدم الأوامر أو az sql mi-arc show لعرض نقاط النهاية الأساسية والثانوية وحالة التوفر العالي.

مثال:

kubectl describe sqlmi sqldemo -n my-namespace

أو

az sql mi-arc show --name sqldemo --k8s-namespace my-namespace --use-k8s

مثال على الإخراج:

 "status": {
    "endpoints": {
      "logSearchDashboard": "https://10.120.230.404:5601/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:sqldemo'))",
      "metricsDashboard": "https://10.120.230.46:3000/d/40q72HnGk/sql-managed-instance-metrics?var-hostname=sqldemo-0",
      "mirroring": "10.15.100.150:5022",
      "primary": "10.15.100.150,1433",
      "secondary": "10.15.100.156,1433"
    },
    "highAvailability": {
      "healthState": "OK",
      "mirroringCertificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
    },
    "observedGeneration": 1,
    "readyReplicas": "2/2",
    "state": "Ready"
  }

يمكنك الاتصال بنقطة النهاية الأساسية باستخدام SQL Server Management Studio والتحقق من DMVs على النحو التالي:

SELECT * FROM sys.dm_hadr_availability_replica_states

Availability Group

ولوحة معلومات الإتاحة المضمنة:

Container Availability Group dashboard

سيناريوهات تجاوز الفشل

يلغي الإعجاب SQL Server مجموعات قابلية وصول عالية التوفر AlwaysOn، فإن مجموعة الإتاحة المضمنة هي حل مُدار عالي الإتاحة. وبالتالي، فإن أوضاع تجاوز الفشل محدودة مقارنة بالأوضاع النموذجية المتوفرة مع SQL Server مجموعات قابلية وصول عالية التوفر AlwaysOn.

قم بتوزيع مثيلات SQL المُدارة لطبقة الخدمات الحرجة للأعمال في تكوين نسختين متماثلتين أو تكوين ثلاث نسخ متماثلة. تختلف تأثيرات الفشل وقابلية الاسترداد اللاحقة مع كل تكوين. يوفر مثيل النسخة المتماثلة الثلاثة مستوى أعلى من التوفر والاسترداد، من مثيلين للنسخة المتماثلة.

في تكوين نسختين متماثلتين، عندما تكون كلتا حالتي العقدة SYNCHRONIZED، إذا أصبحت النسخة المتماثلة الأساسية غير متاحة، تتم ترقية النسخة المتماثلة الثانوية تلقائياً إلى النسخة المتماثلة الأساسية. عند توفر النسخة المتماثلة الفاشلة، يتم تحديثها بجميع التغييرات المعلقة. إذا كانت هناك مشكلات في الاتصال بين النسخ المتماثلة، فقد لا تلتزم النسخة المتماثلة الأساسية بأي عمليات حيث يجب الالتزام بكل عملية على كلا النسختين المتماثلتين قبل إرجاع النجاح مرة أخرى إلى النسخة الأساسية.

في تكوين ثلاث نسخ متماثلة، يجب أن تلتزم العملية في نسختين متماثلتين على الأقل من 3 نسخ متماثلة قبل إرجاع رسالة النجاح إلى التطبيق. في حالة حدوث فشل، تتم ترقية أحد العناصر الثانوية تلقائياً إلى المستوى الأساسي بينما يحاول Kubernetes استرداد النسخة المتماثلة الفاشلة. عندما تصبح النسخة المتماثلة متاحة، يتم ربطها تلقائيا مرة أخرى بمجموعة التوفر المضمنة وتتم مزامنة التغييرات المعلقة. إذا كانت هناك مشكلات في الاتصال بين النسخ المتماثلة، وكانت أكثر من نسختين متماثلتين غير متزامنتين، فلن تلتزم النسخة المتماثلة الأساسية بأي معاملات.

إشعار

يوصى بتوزيع مثيل مُدار لـSQL للأعمال في تكوين ثلاث نسخ متماثلة بدلاً من تكوين نسختين متماثلتين لتحقيق فقد بيانات قريب من الصفر.

للفشل من النسخة المتماثلة الأساسية إلى إحدى النسخ الثانوية، لحدث مخطط، قم بتشغيل الأمر التالي:

إذا قمت بالاتصال بملف، يمكنك استخدام T-SQL التالي للفشل في تجاوز مثيل SQL Server إلى أحد الثوابت:

ALTER AVAILABILITY GROUP current SET (ROLE = SECONDARY);

إذا قمت بالاتصال بالثانوي، يمكنك استخدام T-SQL التالي لترقية النسخة المتماثلة الثانوية المطلوبة إلى النسخة المتماثلة الأساسية.

ALTER AVAILABILITY GROUP current SET (ROLE = PRIMARY);

النسخة المتماثلة الأساسية المفضلة

يمكنك أيضاً تعيين نسخة متماثلة محددة لتكون النسخة المتماثلة الأساسية باستخدام AZ CLI على النحو التالي:

az sql mi-arc update --name <sqlinstance name> --k8s-namespace <namespace> --use-k8s --preferred-primary-replica <replica>

مثال:

az sql mi-arc update --name sqldemo --k8s-namespace my-namespace --use-k8s --preferred-primary-replica sqldemo-3

إشعار

سيحاول Kubernetes تعيين النسخة المتماثلة المفضلة، ولكن ذلك ليس مضموناً.

استعادة قاعدة بيانات على طبعة متعددة النسخ المتماثلة

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

  1. اكشف نقطة النهاية الخارجية للمثيل الأساسي عن طريق إنشاء خدمة Kubernetes جديدة.

    حدد الحجرة التي تستضيف النسخة المتماثلة الأساسية. اتصل بالمثيل المُدار وقم بتشغيل:

    SELECT @@SERVERNAME
    

    يقوم الاستعلام بإرجاع الحجرة التي تستضيف النسخة المتماثلة الأساسية.

    إنشاء خدمة Kubernetes إلى المثيل الأساسي عن طريق تشغيل الأمر التالي إذا كان نظام مجموعة Kubernetes الخاص بك يستخدم NodePort الخدمات. استبدل <podName> باسم الخادم الذي تم إرجاعه في الخطوة السابقة، <serviceName> بالاسم المفضل لخدمة Kubernetes التي تم إنشاؤها.

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=NodePort
    

    بالنسبة لخدمة LoadBalancer، قم بتشغيل نفس الأمر، باستثناء أن نوع الخدمة التي تم إنشاؤها هو LoadBalancer. على سبيل المثال:

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=LoadBalancer
    

    في ما يلي مثال على تشغيل هذا الأمر مع خدمة Azure Kubernetes، حيث يكون الجزء الذي يستضيف الأساسي هو sql2-0:

    kubectl -n arc-cluster expose pod sql2-0 --port=1533  --name=sql2-0-p --type=LoadBalancer
    

    احصل على IP الخاص بخدمة Kubernetes التي تم إنشاؤها:

    kubectl get services -n <namespaceName>
    
  2. قم باستعادة قاعدة البيانات إلى نقطة نهاية المثيل الأساسي.

    أضف ملف النسخة الاحتياطية لقاعدة البيانات إلى حاوية المثيل الأساسية.

    kubectl cp <source file location> <pod name>:var/opt/mssql/data/<file name> -c <serviceName> -n <namespaceName>
    

    مثال

    kubectl cp /home/WideWorldImporters-Full.bak sql2-1:var/opt/mssql/data/WideWorldImporters-Full.bak -c arc-sqlmi -n arc
    

    قم باستعادة ملف النسخ الاحتياطي لقاعدة البيانات عن طريق تشغيل الأمر أدناه.

    RESTORE DATABASE test FROM DISK = '/var/opt/mssql/data/<file name>.bak'
    WITH MOVE '<database name>' to '/var/opt/mssql/data/<file name>.mdf'  
    ,MOVE '<database name>' to '/var/opt/mssql/data/<file name>_log.ldf'  
    ,RECOVERY, REPLACE, STATS = 5;  
    GO
    

    مثال

    RESTORE Database WideWorldImporters
    FROM DISK = '/var/opt/mssql/data/WideWorldImporters-Full.BAK'
    WITH
    MOVE 'WWI_Primary' TO '/var/opt/mssql/data/WideWorldImporters.mdf',
    MOVE 'WWI_UserData' TO '/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
    MOVE 'WWI_Log' TO '/var/opt/mssql/data/WideWorldImporters.ldf',
    MOVE 'WWI_InMemory_Data_1' TO '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
    RECOVERY, REPLACE, STATS = 5;  
    GO
    
  3. أضف قاعدة البيانات إلى مجموعة الإتاحة.

    من أجل إضافة قاعدة البيانات إلى AG، يجب تشغيلها في وضع الاسترداد الكامل ويجب أخذ نسخة احتياطية من السجل. قم بتشغيل عبارات TSQL أدناه لإضافة قاعدة البيانات المستعادة إلى مجموعة الإتاحة.

    ALTER DATABASE <databaseName> SET RECOVERY FULL;
    BACKUP DATABASE <databaseName> TO DISK='<filePath>'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE <databaseName>
    

    يضيف المثال التالي قاعدة بيانات باسم WideWorldImporters تمت استعادتها على المثيل:

    ALTER DATABASE WideWorldImporters SET RECOVERY FULL;
    BACKUP DATABASE WideWorldImporters TO DISK='/var/opt/mssql/data/WideWorldImporters.bak'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE WideWorldImporters
    

هام

كأفضل ممارسة، يجب حذف خدمة Kubernetes التي تم إنشاؤها أعلاه عن طريق تشغيل هذا الأمر:

kubectl delete svc sql2-0-p -n arc

القيود

مثيل SQL المدار الذي تم تمكينه بواسطة مجموعات توفر Azure Arc له نفس القيود مثل مجموعات توفر مجموعة البيانات الضخمة. لمزيد من المعلومات، راجع توزيع مجموعة البيانات الكبيرة في SQL Server بقابلية وصول عالية.

تعرف على المزيد حول ميزات وقدرات مثيل SQL المدار الذي تم تمكينه بواسطة Azure Arc