تكوين مقاييس مخصصة للترقيات المتداولة على مجموعات مقياس الجهاز الظاهري

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

يمكن استخدام المقاييس المخصصة بالاشتراك مع وظائف الترقية المتداولة الأخرى مثل ترقيات نظام التشغيل التلقائي وترقيات الملحقات التلقائية وترقيات MaxSurge المتداولة.

المتطلبات

  • عند استخدام مقاييس مخصصة للترقيات المتداولة على مجموعات مقياس الجهاز الظاهري، يجب أن تستخدم مجموعة المقياس أيضا ملحق صحة التطبيق مع حالات صحية غنية للإبلاغ عن ترتيب المرحلة أو تخطي معلومات الترقية. ترقيات المقاييس المخصصة غير مدعومة عند استخدام ملحق صحة التطبيق مع الحالات الثنائية.
  • يجب إعداد ملحق صحة التطبيق لاستخدام HTTP أو HTTPS من أجل تلقي معلومات المقاييس المخصصة. TCP غير مدعوم للتكامل مع المقاييس المخصصة للترقيات المتداولة.

المفاهيم

ترتيب المرحلة

المرحلة هي بنية تجميع للأجهزة الظاهرية. يتم تحديد كل مرحلة عن طريق تعيين بيانات التعريف المنبعثة من ملحق صحة التطبيق عبر الخاصية customMetrics . تأخذ مجموعة مقياس الجهاز الظاهري المعلومات التي تم استردادها من المقاييس المخصصة وتستخدمها لوضع الأجهزة الظاهرية في المراحل المعينة لها. ضمن كل مرحلة، ستقوم مجموعة مقياس الجهاز الظاهري أيضا بتعيين دفعات الترقية. يتم تكوين كل دفعة باستخدام نهج الترقية المتداول الذي يأخذ في الاعتبار مجالات التحديث (UD) ومجالات الخطأ (FD) ومعلومات المنطقة لكل جهاز ظاهري.

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

مخطط مجموعة مقياس إقليمي (غير منطقي)يوضح مخططا عالي المستوى لما يحدث عند استخدام ترقيات الطور n على مجموعة مقياس إقليمي (غير منطقي).

مخطط مجموعة مقياس تمتد للمناطقيوضح مخططا عالي المستوى لما يحدث عند استخدام ترقيات الطور n على مجموعة مقياس تمتد للمنطقة.

لتحديد رقم المرحلة الذي يجب أن يقترن به الجهاز الظاهري، استخدم phaseOrderingNumber المعلمة .

{
     “applicationHealthState”: “Healthy”,
      “customMetrics”: "{ \"rollingUpgrade\": { \"PhaseOrderingNumber\": 0 } }"
}

تخطي الترقية

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

مخطط يوضح مخططا عالي المستوى لما يحدث عند استخدام ترقية التخطي على مجموعة مقياس تمتد للمناطق.

لتخطي ترقية على جهاز ظاهري، استخدم SkipUpgrade المعلمة . هذا يخبر الترقية المتداولة لتخطي هذا الجهاز الظاهري عند إجراء الترقيات.

{
     “applicationHealthState”: “Healthy”,
      “customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": true} }"
}

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

{
     “applicationHealthState”: “Healthy”,
      “customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": false, \"PhaseOrderingNumber\": 0 } }"
}

تكوين ملحق صحة التطبيق

يتطلب ملحق صحة التطبيق طلب HTTP أو HTTPS مع منفذ مقترن أو مسار طلب. يتم دعم تحقيقات TCP عند استخدام ملحق صحة التطبيق، ولكن لا يمكن تعيين ApplicationHealthState من خلال نص استجابة الفحص ولا يمكن استخدامها مع الترقيات المتداولة مع المقاييس المخصصة.

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "2.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1
          }
        }
      }
    ]
  }
}
الاسم القيمة / المثال نوع البيانات
البروتوكول http أو https سلسلة
المنفذ اختياري عندما يكون http البروتوكول أو https العدد الصحيح
مسار الطلب إلزامي عند استخدام http أو https سلسلة
الفاصل الزمنيInSeconds اختياري، الافتراضي هو 5 ثوان. هذا الإعداد هو الفاصل الزمني بين كل فحص صحة. على سبيل المثال، إذا كان intervalInSeconds == 5، يتم إرسال فحص إلى نقطة نهاية التطبيق المحلي مرة واحدة كل 5 ثوان. العدد الصحيح
numberOfProbes اختياري، الافتراضي هو 1. هذا الإعداد هو عدد الفحوصات المتتالية المطلوبة لتغيير الحالة الصحية. على سبيل المثال، إذا كانت numberOfProbles == 3، فأنت بحاجة إلى 3 إشارات "صحية" متتالية لتغيير الحالة الصحية من "غير صحي"/"غير معروف" إلى حالة "سليمة". ينطبق نفس المطلب على تغيير الحالة الصحية إلى حالة "غير صحية" أو "غير معروفة". العدد الصحيح
فترة السماح اختياري، افتراضي = intervalInSeconds * numberOfProbes؛ الحد الأقصى لفترة السماح هو 7200 ثانية العدد الصحيح

تثبيت ملحق صحة التطبيق

استخدم az vmss extension set لإضافة ملحق صحة التطبيق إلى تعريف نموذج مجموعة المقياس.

إنشاء ملف json يسمى extensions.json بالإعدادات المطلوبة.

{
  "protocol": "<protocol>",
  "port": <port>,
  "requestPath": "</requestPath>",
  "gracePeriod": <healthExtensionGracePeriod>
}

تطبيق ملحق صحة التطبيق.

az vmss extension set \
  --name ApplicationHealthLinux \
  --publisher Microsoft.ManagedServices \
  --version 2.0 \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings ./extension.json

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

az vmss update-instances \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --instance-ids "*"

تكوين استجابة ملحق صحة التطبيق

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

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

#!/bin/bash

# Open firewall port (replace with your firewall rules as needed)
sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

# Create Python HTTP server for responding with JSON
cat <<EOF > server.py
import json
from http.server import BaseHTTPRequestHandler, HTTPServer

# Function to generate the JSON response
def generate_response_json():
    return json.dumps({
        "ApplicationHealthState": "Healthy",
        "CustomMetrics": json.dumps({
            "RollingUpgrade": {
                "PhaseOrderingNumber": 1,
                "SkipUpgrade": "false"
            }
        })
    })

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # Respond with HTTP 200 and JSON content
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        response = generate_response_json()
        self.wfile.write(response.encode('utf-8'))

# Set up the HTTP server
def run(server_class=HTTPServer, handler_class=RequestHandler):
    server_address = ('localhost', 8000)
    httpd = server_class(server_address, handler_class)
    print('Starting server on port 8000...')
    httpd.serve_forever()

if __name__ == "__main__":
    run()
EOF

# Run the server in the background
python3 server.py &

# Store the process ID of the server
SERVER_PID=$!

# Wait a few seconds to ensure the server starts
sleep 2

# Confirm execution
echo "Server has been started on port 8000 with PID $SERVER_PID"

لمزيد من أمثلة تكوين الاستجابة، راجع نماذج صحة التطبيق

تحقق من بيانات المقاييس المخصصة واستعلامها

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

ملاحظة

تختلف طريقة الاستعلام عن المقاييس المخصصة بين أوضاع التنسيق الموحد والمرنة. يستخدم az vmss get-instance-viewوضع التوحيد ، بينما يتطلب وضع المرونة الاستعلام عن الآلات الافتراضية الفردية باستخدام az vm get-instance-view.

لوضع التوزيع الموحد

az vmss get-instance-view \
  --resource-group <resource-group-name> \
  --name <vmss-name> \
  --instance-id <instance-id>

مخرج العينة (مقتطف):

{
  "extensions": [
    {
      "name": "ApplicationHealthExtension",
      "substatuses": [
        {
          "code": "ComponentStatus/CustomMetrics/succeeded",
          "message": "{\"rollingUpgrade\": {\"PhaseOrderingNumber\": 2, \"SkipUpgrade\": false}}"
        }
      ]
    }
  ]
}

المقاييس المخصصة موجودة في message حقل ComponentStatus/CustomMetrics/succeeded الحالة الفرعية.

لوضع التوزيع الموسيقي المرن

في وضع التنسيق المرن، تكون العينات أجهزة افتراضية فردية. استخدم az vm get-instance-view الأمر وحدد اسم الجهاز الافتراضي.

احصل على مقاييس مخصصة لآلة افتراضية معينة:

az vm get-instance-view \
  --resource-group <resource-group-name> \
  --name <vm-name>

مخرج العينة (مقتطف):

{
  "extensions": [
    {
      "name": "ApplicationHealthExtension",
      "substatuses": [
        {
          "code": "ComponentStatus/CustomMetrics/succeeded",
          "message": "{\"rollingUpgrade\": {\"PhaseOrderingNumber\": 1, \"SkipUpgrade\": false}}"
        }
      ]
    }
  ]
}

المقاييس المخصصة موجودة في message حقل ComponentStatus/CustomMetrics/succeeded الحالة الفرعية.

استكشاف الأخطاء وإصلاحات المقاييس المخصصة

إذا لم يتم الإبلاغ عن المقاييس المخصصة بشكل صحيح، تحقق من ما يلي:

  1. تحقق من حالة تمديد الطلب:
az vmss get-instance-view \
  --resource-group <resource-group-name> \
  --name <vmss-name> \
  --instance-id <instance-id> \
  --query "extensions[?name=='ApplicationHealthExtension'].statuses"
  1. تحقق من استجابة نقطة النهاية الصحية التالية:
# Get the public IP of an instance
PUBLIC_IP=$(az vmss list-instance-public-ips \
  --resource-group <resource-group-name> \
  --name <vmss-name> \
  --query "[0].ipAddress" \
  --output tsv)

# Test the health endpoint
curl -v http://$PUBLIC_IP:<port>/<request-path>
  1. تحقق من صحة صيغة الرد:

يجب أن تعيد نقطة نهاية صحة التطبيق استجابة JSON بهذا التنسيق بالضبط:

{
  "ApplicationHealthState": "Healthy",
  "customMetrics": "{\"rollingUpgrade\": {\"PhaseOrderingNumber\": 0, \"SkipUpgrade\": false}}"
}

هام

  • يجب أن customMetrics تكون القيمة سلسلة JSON (مزدوجة التسلسل)، وليست كائن JSON
  • يجب أن يكون الوضع ApplicationHealthState مضبوطا على "صحي" ليتم تضمين الحالة في الترقية المتدحرجة
  • تقرأ المقاييس المخصصة فقط في بداية الترقية المتدحرجة؛ التغييرات أثناء الترقية لن تؤثر على الترقية الحالية

الخطوات التالية

تعرف على كيفية إجراء ترقيات يدوية على مجموعات مقياس الجهاز الظاهري.