البرنامج التعليمي - الأجهزة الظاهرية لموازنة التحميل لتوافر مرتفع

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات المقاييس المرنة

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

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

يستخدم هذا البرنامج التعليمي CLI داخل Azure Cloud Shell، والذي يتم تحديثه باستمرار إلى أحدث إصدار. لفتح Cloud Shell، حدد Try it من الجزء العلوي لأي مقطع تعليمة برمجية.

إذا اخترت تثبيت CLI واستخدامه محليًا، فإن هذا البرنامج التعليمي يتطلب تشغيل الإصدار 2.0.30 من Azure CLI أو إصدار لاحق. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

نظرة عامة حول موازن تحميل Azure

موازن تحميل Azure هو موازن تحميل الطبقة-4 (TCP, UDP) الذي يوفر إتاحة عالية عن طريق توزيع حركة البيانات الواردة بين الأجهزة الظاهرية الصحية. يراقب برنامج اختبار صحة موازن التحميل منفذًا على كل جهاز ظاهري ويوزع حركة البيانات فقط على جهاز ظاهري قيد التشغيل.

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

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

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

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

إنشاء موازن تحميل Azure

يوضح هذا القسم بالتفصيل كيفية إنشاء كل مكون من مكونات موازن التحميل وتكوينه. قبل أن تتمكن من إنشاء موازن التحميل، قم بإنشاء مجموعة موارد باستخدام az group create. ينشئ المثال التالي مجموعة موارد باسم myResourceGroupLoadBalancer في الموقع eastus:

az group create --name myResourceGroupLoadBalancer --location eastus

إنشاء عنوان IP عام

للوصول إلى التطبيق الخاص بك على الإنترنت، تحتاج إلى عنوان IP عام لموازن التحميل. أنشئ عنوان IP عامًا باستخدام إنشاء عنوان IP عام لشبكة az. يُنشئ المثال التالي عنوان IP عامًا مُسمَّى myPublicIP في مجموعة موارد myResourceGroupLoadBalancer:

az network public-ip create \
    --resource-group myResourceGroupLoadBalancer \
    --name myPublicIP

إنشاء موازنة التحميل

أنشئ موازن تحميل عامًا باستخدام az network lb create. يُنشئ المثال التالي موازن تحميل مُسمَّى myLoadBalancerويعيِّن عنوان myPublicIP لتكوين IP الأمامية:

az network lb create \
    --resource-group myResourceGroupLoadBalancer \
    --name myLoadBalancer \
    --frontend-ip-name myFrontEndPool \
    --backend-pool-name myBackEndPool \
    --public-ip-address myPublicIP

إنشاء فحوصات السلامة

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

يُنشئ المثال التالي برنامج اختبار TCP. يمكنك أيضًا إنشاء اختبارات HTTP مُخصّصة لمزيد من الفحوصات الصحية الدقيقة. عند استخدام برنامج اختبار HTTP مخصص، يجب إنشاء صفحة التحقق من الصحة، مثل healthcheck.js. يجب أن يقوم برنامج الاختبار بإرجاع استجابة HTTP 200 OK إلى موازن التحميل لإبقاء المضيف في حالة دوران.

لإنشاء اختبار صحة TCP، يمكنك استخدام az network lb probe create. ينشئ المثال التالي برنامج اختبار صحة يُسمَّى myHealthProbe:

az network lb probe create \
    --resource-group myResourceGroupLoadBalancer \
    --lb-name myLoadBalancer \
    --name myHealthProbe \
    --protocol tcp \
    --port 80

إنشاء قاعدة موازن التحميل

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

إنشاء قاعدة موازن تحميل باستخدام az network lb rule create. ينشئ المثال التالي قاعدة باسم myLoadBalancerRule تستخدم اختبار صحة myHealthProbe، وتوازن حركة البيانات من منفذ 80:

az network lb rule create \
    --resource-group myResourceGroupLoadBalancer \
    --lb-name myLoadBalancer \
    --name myLoadBalancerRule \
    --protocol tcp \
    --frontend-port 80 \
    --backend-port 80 \
    --frontend-ip-name myFrontEndPool \
    --backend-pool-name myBackEndPool \
    --probe-name myHealthProbe

تكوين الشبكة الظاهرية

قبل أن تقوم بنشر الأجهزة الظاهرية ونشر موازن التحميل الخاص بك، أنشئ موارد شبكة الاتصال الظاهرية الداعمة. لمزيد من المعلومات حول الشبكات الظاهرية، راجع البرنامج التعليمي إدارة شبكات Azure الظاهرية.

إنشاء موارد الشبكة

أنشئ شبكة ظاهرية باستخدام az network vnet create. ينشئ المثال التالي شبكة اتصال ظاهرية باسم myVnet مع شبكة فرعية باسم mySubnet:

az network vnet create \
    --resource-group myResourceGroupLoadBalancer \
    --name myVnet \
    --subnet-name mySubnet

لإضافة مجموعة أمان شبكة، استخدم az network nsg create. يُنشئ المثال التالي مجموعة أمان شبكة باسم myNetworkSecurityGroup:

az network nsg create \
    --resource-group myResourceGroupLoadBalancer \
    --name myNetworkSecurityGroup

أنشئ قاعدة مجموعة أمان شبكة باستخدام az network nsg rule create. يُنشئ المثال التالي قاعدة مجموعة أمان شبكة باسم myNetworkSecurityGroupRule:

az network nsg rule create \
    --resource-group myResourceGroupLoadBalancer \
    --nsg-name myNetworkSecurityGroup \
    --name myNetworkSecurityGroupRule \
    --priority 1001 \
    --protocol tcp \
    --destination-port-range 80

يتم إنشاء بطاقات واجهة الشبكة الظاهرية باستخدام az network nic create. ينشئ المثال التالي ثلاث بطاقات واجهة الشبكة الظاهرية. (بطاقة واجهة شبكة ظاهرية واحدة لكل جهاز ظاهري تقوم بإنشائه للتطبيق الخاص بك في الخطوات التالية). يمكنك إنشاء بطاقات واجهة شبكة ظاهرية إضافية وأجهزة ظاهرية في أي وقت وإضافتها إلى موازن التحميل:

for i in `seq 1 3`; do
    az network nic create \
        --resource-group myResourceGroupLoadBalancer \
        --name myNic$i \
        --vnet-name myVnet \
        --subnet mySubnet \
        --network-security-group myNetworkSecurityGroup \
        --lb-name myLoadBalancer \
        --lb-address-pools myBackEndPool
done

عند إنشاء كافة بطاقات واجهة الشبكة الظاهرية الثلاث، تابع إلى الخطوة التالية

أنشئ الأجهزة الظاهرية

إنشاء تكوين cloud-init

في البرنامج التعليمي السابق حول كيفية تخصيص جهاز Linux الظاهري على التمهيد الأول، تعلمت كيفية أتمتة تخصيص جهاز ظاهري باستخدام cloud-init. يمكنك استخدام نفس ملف التكوين cloud-init لتثبيت NGINX وتشغيل تطبيق Node.js "مرحبًا بالعالم" بسيط في الخطوة التالية. لرؤية موازن التحميل في العمل، في نهاية البرنامج التعليمي يمكنك الوصول إلى هذا التطبيق البسيط في مستعرض الويب.

في shell الحالي، أنشئ ملفًا باسم cloud-init.txt والصِق التكوين التالي. على سبيل المثال، قم بإنشاء الملف في Cloud Shell وليس على جهازك المحلي. أدخِل sensible-editor cloud-init.txt لإنشاء الملف وراجع قائمة بالمحررين المتاحين. تأكد من نسخ ملف cloud-init بالكامل بشكل صحيح، خاصة السطر الأول:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
  - path: /home/azureuser/myapp/index.js
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

أنشئ الأجهزة الظاهرية

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

إنشاء مجموعة التوفر باستخدام az vm availability-set create. ينشئ المثال التالي مجموعة توفر باسم myAvailabilitySet:

az vm availability-set create \
    --resource-group myResourceGroupLoadBalancer \
    --name myAvailabilitySet

يمكنك الآن إنشاء الجهاز الظاهري باستخدام az vm create. يُنشئ المثال التالي ثلاثة أجهزة ظاهرية ويقوم بإنشاء مفاتيح SSH إذا لم تكن موجودة مسبقًا:

for i in `seq 1 3`; do
    az vm create \
        --resource-group myResourceGroupLoadBalancer \
        --name myVM$i \
        --availability-set myAvailabilitySet \
        --nics myNic$i \
        --image UbuntuLTS \
        --admin-username azureuser \
        --generate-ssh-keys \
        --custom-data cloud-init.txt \
        --no-wait
done

هناك مهام في الخلفية يستمر تشغيلها بعد أن يعيدك Azure CLI إلى المطالبة. المعلمة --no-wait لا تنتظر كافة المهام لتكتمل. قد يستغرق الأمر بضع دقائق أخرى قبل أن تتمكن من الوصول إلى التطبيق. يكتشف برنامج اختبار الصحة لموازن التحميل تلقائيًا متى يتم تشغيل التطبيق على كل جهاز ظاهري. بمجرد تشغيل التطبيق، تبدأ قاعدة موازن التحميل في توزيع حركة البيانات.

موازن التحميل التجريبي

احصل على عنوان IP العام الخاص بموازن التحميل لديك باستخدام az network public-ip show. في المثال التالي يتم الحصول على عنوان IP لـ myPublicIP الذي تم إنشاؤه مسبقًا:

az network public-ip show \
    --resource-group myResourceGroupLoadBalancer \
    --name myPublicIP \
    --query [ipAddress] \
    --output tsv

يمكنك بعد ذلك إدخال عنوان IP العام في مستعرض ويب. تذكَّر - يستغرق الأمر بضع دقائق حتى تكون الأجهزة الظاهرية جاهزة قبل أن يبدأ موازن التحميل في توزيع حركة البيانات عليها. يتم عرض التطبيق، بما في ذلك اسم مضيف الجهاز الظاهري الذي وزع موازن التحميل حركة البيانات إليه كما هو الحال في المثال التالي:

تشغيل تطبيق Node.js

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

إضافة الأجهزة الظاهرية وإزالتها

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

إزالة جهاز ظاهري من موازن التحميل

يمكنك إزالة جهاز ظاهري من تجمع عنوان الخلفية باستخدام az network nic ip-config address-pool remove. يُزيل المثال التالي بطاقة واجهة الشبكة الظاهرية لـ myVM2 من myLoadBalancer:

az network nic ip-config address-pool remove \
    --resource-group myResourceGroupLoadBalancer \
    --nic-name myNic2 \
    --ip-config-name ipConfig1 \
    --lb-name myLoadBalancer \
    --address-pool myBackEndPool 

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

لعرض قائمة بالأجهزة الظاهرية مع بطاقات واجهة الشبكة الظاهرية المتصلة بموازن التحميل، استخدم az network lb address-pool show. الاستعلام عن مُعرف بطاقة واجهة الشبكة الظاهرية وتصفيتها كما يلي:

az network lb address-pool show \
    --resource-group myResourceGroupLoadBalancer \
    --lb-name myLoadBalancer \
    --name myBackEndPool \
    --query backendIpConfigurations \
    --output tsv | cut -f5

الإخراج مشابه للمثال التالي، الذي يظهر أن NIC الظاهرية للجهاز الظاهري 2 لم تَعُد جزءًا من تجمع عنوان الخلفية:

/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic1/ipConfigurations/ipconfig1
/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic3/ipConfigurations/ipconfig1

إضافة جهاز ظاهري إلى موازن التحميل

بعد إجراء صيانة الجهاز الظاهري، أو إذا كنت بحاجة إلى توسيع السعة، يمكنك إضافة جهاز ظاهري إلى تجمع عنوان الخلفية باستخدام az network nic ip-config address-pool add. يضيف المثال التالي NIC الظاهرية لـ myVM2 إلى myLoadBalancer:

az network nic ip-config address-pool add \
    --resource-group myResourceGroupLoadBalancer \
    --nic-name myNic2 \
    --ip-config-name ipConfig1 \
    --lb-name myLoadBalancer \
    --address-pool myBackEndPool

للتحقق من أن NIC الظاهري متصل بتجمع عنوان الخلفية، استخدم azaz network lb address-pool show مرة أخرى من الخطوة السابقة.

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

في هذا البرنامج التعليمي، أنشأت موازن تحميل وأجهزة ظاهرية مرفقة به. تعلمت كيفية القيام بالتالي:

  • إنشاء موازن تحميل Azure
  • إنشاء برنامج اختبار صحة موازن التحميل
  • إنشاء قواعد حركة بيانات موازن التحميل
  • استخدام cloud-init لتثبيت تطبيق Node.js الأساسي
  • إنشاء أجهزة ظاهرية وإرفاقها لموازن التحميل
  • عرض موازن التحميل في العمل
  • إضافة أجهزة ظاهرية وإزالتها من موازن التحميل

تقدم إلى البرنامج التعليمي التالي لمعرفة المزيد حول مكونات الشبكة الظاهرية Azure.