1. مقدمة
مرحبًا بك في ورشة عمل رموز برمجية لتحسينات موازنة التحميل المتقدّمة.
في هذا الدليل التعليمي حول الرموز البرمجية، ستتعرّف على كيفية ضبط خيارات موازنة الحمل المتقدّمة لجهاز موازنة حمل التطبيقات الخارجي الشامل. قبل البدء، ننصحك بالاطّلاع على المستند حول موازنة الحمل في السحابة الإلكترونية أولاً ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).
الشكل 1: سير عمل اختيار نقطة نهاية وجهة باستخدام جهاز موازنة حمل التطبيقات الخارجية العامة.
طوبولوجيا مختبر الترميز وحالات الاستخدام
الشكل 2. طوبولوجيا توجيه "جهاز موازنة حمل HTTP"
خلال هذه الميزة الاختبارية للرموز، يمكنك إعداد مجموعتَين من المثيلات المُدارة. ستنشئ جهازًا خارجيًا لموازنة حمل https الخارجي. سيستخدم موازن الحمولة العديد من الميزات من قائمة الإمكانات المتقدّمة التي يتيحها موازن الحمولة المستنِد إلى Envoy. بعد النشر، سيتم إنشاء بعض عمليات التحميل التي تمت محاكاتها والتحقق من أنّ الإعدادات التي ضبطتها تعمل بشكل مناسب.
ما ستتعرّف عليه
- كيفية ضبط ServiceLbPolicy لتحسين أداء جهاز موازنة الحمل
المتطلبات
- المعرفة بموازنة حمل HTTPS الخارجي. يتشابه النصف الأول من هذا الدرس التطبيقي حول الترميز إلى حد كبير مع الدرس التطبيقي حول الترميز External HTTPs LB مع قسم "إدارة الزيارات المتقدمة" (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv). ننصحك بالاطّلاع على ذلك أولاً.
2. قبل البدء
في Cloud Shell، تأكَّد من إعداد معرّف مشروعك.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
تفعيل واجهات برمجة التطبيقات
تفعيل جميع الخدمات اللازمة
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3- إنشاء شبكة VPC
إنشاء شبكة VPC
من Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
إنشاء قواعد جدار حماية في VPC
بعد إنشاء شبكة VPC، عليك الآن إنشاء قاعدة جدار حماية. سيتم استخدام قاعدة جدار الحماية للسماح لجميع عناوين IP بالوصول إلى عنوان IP الخارجي لموقع الويب الخاص بالتطبيق التجريبي على المنفذ 80 لحركة مرور http.
من Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
الناتج
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
في هذا الدليل التعليمي حول رموز البرامج، سنضبط حالة الأجهزة الافتراضية. ولذلك سننشئ أيضًا قواعد جدار حماية للسماح ببروتوكول النقل الآمن.
من Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \ --network=httplbs \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
الناتج
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. إعداد مجموعات الأجهزة الافتراضية المُدارة
يجب إعداد "مجموعات مثيلات مُدارة" تتضمن أنماط موارد الخلفية التي يستخدمها "جهاز موازنة حمل HTTP". سننشئ أولاً نماذج للأجهزة المثبّتة التي تحدّد إعدادات الأجهزة الافتراضية التي سيتم إنشاؤها لكل منطقة. بعد ذلك، سننشئ مجموعة نُسخ مُدارة تشير إلى نموذج نُسخة في الخلفية لكل منطقة.
يمكن أن تكون مجموعات النُسخ المُدارة على مستوى منطقة أو منطقة جغرافية. في هذا التمرين، سننشئ مجموعات أجهزة مُدارة على مستوى منطقة معيّنة.
في هذا القسم، يمكنك الاطّلاع على نص برمجي تم إنشاؤه مسبقًا لبدء التشغيل، وسيتمّ الرجوع إليه عند إنشاء المثيل. يعمل نص التشغيل هذا على تثبيت إمكانات خادم الويب وتفعيلها، وسنستخدمها لمحاكاة تطبيق ويب. يمكنك الاطّلاع على هذا النص البرمجي.
إنشاء نماذج المثيلات
الخطوة الأولى هي إنشاء قالب مثيل.
من Cloud Shell
gcloud compute instance-templates create test-template \ --network=httplbs \ --tags=allow-ssh,http-server \ --image-family=debian-9 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
الناتج
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
يمكنك الآن التحقّق من إنشاء نماذج المثيلات بنجاح باستخدام الأمر gcloud التالي:
من Cloud Shell
gcloud compute instance-templates list
الناتج
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
إنشاء مجموعات المثيلات
علينا الآن إنشاء مجموعة نُسخ مثيل مُدارة من نماذج النُسخ المثيل التي أنشأناها سابقًا.
من Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
من Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
يمكننا التحقّق من إنشاء مجموعات النماذج بنجاح باستخدام الأمر gcloud التالي:
من Cloud Shell
gcloud compute instance-groups list
الناتج
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
التحقّق من وظائف خادم الويب
يتم تكوين كل مثيل لتشغيل خادم ويب Apache باستخدام نص برمجي بسيط بلغة PHP يعرض ما يلي:
تم عرض الصفحة من: us-east1-a-mig-ww2h
للتأكّد من عمل خوادم الويب بشكلٍ صحيح، انتقِل إلى Compute Engine -> حالات الأجهزة الافتراضية. تأكَّد من أنّه تم إنشاء المثيلات الجديدة (مثل us-east1-a-mig-xxx) وفقًا لتعريفات مجموعات المثيلات.
والآن، قدِّم طلب ويب إليه في متصفحك للتأكد من تشغيل خادم الويب (قد يستغرق بدء ذلك دقيقة واحدة). في صفحة مثيلات الأجهزة الافتراضية ضمن Compute Engine، اختَر المثيل الذي تم إنشاؤه من خلال مجموعة المثيلات التابعة لك وانقر على عنوان IP الخارجي (العام) الخاص به.
أو يمكنك الانتقال إلى http://<IP_Address> في المتصفّح.
5- إعداد "موازن الحمولة"
إنشاء ميزة "التحقّق من الصحة"
أولاً، يجب إجراء فحص أساسي للصحة للتأكّد من أنّ خدماتنا قيد التشغيل بنجاح. سننشئ فحصًا أساسيًا للصحة، وهناك العديد من عمليات التخصيص المتقدّمة المتاحة.
من Cloud Shell
gcloud compute health-checks create http http-basic-check \ --port 80
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
حجز عنوان IP الخارجي
في هذه الخطوة، عليك حجز عنوان IP ثابت متاح على مستوى العالم ليتم إرفاقه لاحقًا بجهاز "موازنة الحمل".
من Cloud Shell
gcloud compute addresses create lb-ipv4-2 \ --ip-version=IPV4 \ --global
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
احرص على تدوين عنوان IP الذي تم حجزُه.
gcloud compute addresses describe lb-ipv4-2 \ --format="get(address)" \ --global
إنشاء خدمات الخلفية
الآن علينا إنشاء خدمة خلفية لمجموعات النُسخ المُدارة التي أنشأناها سابقًا.
من Cloud Shell
gcloud compute backend-services create east-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
إضافة عمليات نقل البيانات في أثناء التشغيل إلى خدمات الخلفية
بعد أن أنشأنا خدمات الخلفية، علينا الآن إضافة "مجموعات الأجهزة الافتراضية المُدارة" التي أنشأناها سابقًا إلى كل خدمة خلفية.
من Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
من Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
يمكنك التحقّق من إضافة الخلفيات من خلال تنفيذ الأمر التالي.
من Cloud Shell
gcloud compute backend-services list
الناتج
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
إنشاء خريطة عناوين URL
سنقوم الآن بإنشاء خريطة عنوان URL.
gcloud compute url-maps create web-map-http \ --default-service=east-backend-service \ --global
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
إنشاء واجهة HTTP
الخطوة الأخيرة في إنشاء جهاز موازنة الحمل هي إنشاء الواجهة الأمامية. سيؤدي ذلك إلى ربط عنوان IP الذي حجزته سابقًا بخريطة عناوين URL لموازن الحمولة التي أنشأتها.
من Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \ --url-map=web-map-http
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
عليك بعد ذلك إنشاء قاعدة إعادة توجيه عمومية تربط عنوان IP المحجوز مسبقًا لخادم وكيل HTTP.
من Cloud Shell
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme EXTERNAL_MANAGED \ --address=lb-ipv4-2 \ --global \ --target-http-proxy=http-lb-proxy-adv \ --ports=80
في هذه المرحلة، يمكنك التأكّد من أنّ أداة توزيع الحمل تعمل باستخدام عنوان IP الذي سجّلته سابقًا.
6- التأكّد من عمل "موازن الحمولة"
للتأكّد من أنّ ميزة "توازن الحمولة" تعمل، عليك إنشاء بعض الأحمال. لإجراء ذلك، سننشئ جهازًا افتراضيًا جديدًا لمحاكاة الحمل.
إنشاء Siege-vm
ستنشئ الآن جهاز افتراضي siege-vm الذي ستستخدمه لإنشاء الحمل.
من Cloud Shell
gcloud compute instances create siege-vm \ --network=httplbs \ --zone=us-east1-a \ --machine-type=e2-medium \ --tags=allow-ssh,http-server \ --metadata=startup-script='sudo apt-get -y install siege'
الناتج
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
بعد ذلك، يمكنك استخدام بروتوكول SSH للوصول إلى الجهاز الظاهري الذي أنشأته. بعد إنشاء الحساب، انقر على SSH لتشغيل وحدة تحكّم طرفية والاتصال.
بعد الاتصال، نفِّذ الأمر التالي لإنشاء حمل. استخدِم عنوان IP الذي حجزته سابقًا لموازنة تحميل http الخارجية.
من Cloud Shell
siege -c 20 http://$lb-ipv4-2
الناتج
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
التحقّق من توزيع الحمل
الآن بعد أن أصبح Siege قيد التشغيل، حان الوقت للتحقّق من توزيع الزيارات بالتساوي على مجموعتَي النُسخ المُدارة.
Stop the Siege
الآن بعد أن أثبتت أنّ ميزة "تقسيم الزيارات" المتقدّمة تعمل على النحو المطلوب، حان الوقت لرفع الحصار. لإجراء ذلك، ارجع إلى محطة SSH الخاصة بأداة siege-vm واضغط على المفتاح CTRL+C لإيقاف الحصار.
7- ضبط سياسة "التحميل إلى الخدمة"
إنشاء سياسة "موازنة تحميل الخدمات"
بعد الانتهاء من الإعدادات الأساسية، سننشئ سياسة "توزيع الأحمال على الخدمات" وسنختبر الميزات المتقدّمة. على سبيل المثال، سنضبط الخدمة لاستخدام بعض الإعدادات المتقدّمة لموازنة التحميل. في هذا المثال، سننشئ سياسة لاستخدام ميزة خفض السعة تلقائيًا. لكن لا تتردد في تجربة ميزات أخرى.
من Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \ --auto-capacity-drain --location=global
يمكننا التحقّق من أنّه تم إنشاء سياستنا بنجاح باستخدام الأمر gcloud التالي:
من Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
الناتج
NAME http-policy
إرفاق سياسة "موازنة تحميل الخدمات" بخدمة الخلفية
سنُرفِق الآن السياسة الجديدة بخدمة الخلفية الحالية أعلاه.
من Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. تعديل سلامة الخلفية
في هذه المرحلة، تم تطبيق السياسة الجديدة المتعلّقة بمواد العرض على الواجهة الخلفية. وبالتالي، يمكنك من الناحية الفنية الانتقال إلى عملية التنظيف مباشرةً. وفي إطار هذا الدرس التطبيقي حول الترميز، سنُجري أيضًا بعض التعديلات الإضافية على الإنتاج لنوضّح لك طريقة عمل السياسة الجديدة.
ستزيل ميزة خفض السعة التلقائي وحدة MIG للخلفية من موازن الحمولة تلقائيًا عندما ينخفض إجمالي عدد الخلفيات الصالحة عن حدّ معيّن (25%). لاختبار هذه الميزة، سنستخدم بروتوكول النقل الآمن (SSH) للوصول إلى الأجهزة الافتراضية في us-east1-b-mig وسنجعلها غير صالحة. عند بلوغ الحدّ الأدنى البالغ% 25، ستحتاج إلى استخدام بروتوكول النقل الآمن (SSH) للوصول إلى أربعة من الأجهزة الافتراضية وإيقاف خادم Apache.
لإجراء ذلك، اختَر أربعة أجهزة افتراضية واستخدم بروتوكول النقل الآمن (SSH) للاتصال بها من خلال النقر على SSH لتشغيل محطة طرفية والاتصال. بعد ذلك، شغِّل الأمر التالي.
sudo apachectl stop
في هذه المرحلة، سيتم تفعيل ميزة خفض السعة التلقائي ولن تتلقّى المنطقة us-east1-b-mig طلبات جديدة.
9. التحقّق من عمل ميزة تصريف الطاقة التلقائية
إعادة بدء عملية الحظر
للتحقّق من الميزة الجديدة، سنعيد استخدام جهاز افتراضي للاختبار مرة أخرى. لنستخدم بروتوكول SSH للوصول إلى الجهاز الظاهري الذي أنشأته في الخطوة السابقة. بعد إنشائها، انقر على SSH لتشغيل محطة دفع والاتصال.
بعد الاتصال، نفِّذ الأمر التالي لإنشاء حمل. استخدِم عنوان IP الذي حجزته سابقًا لموازنة تحميل http الخارجية.
من Cloud Shell
siege -c 20 http://$lb-ipv4-2
الناتج
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
في هذه المرحلة، ستلاحظ أنّ جميع الطلبات يتم إرسالها إلى us-east1-a-mig.
Stop the Siege
الآن بعد أن أثبتت أنّ ميزة "تقسيم الزيارات" المتقدّمة تعمل على النحو المطلوب، حان الوقت لرفع الحصار. لإجراء ذلك، ارجع إلى وحدة تحكّم SSH في siege-vm واضغط على CTRL+C لإيقاف تشغيل siege.
10. خطوات إعادة الضبط
الآن وبعد أن انتهينا من بيئة المعمل، حان وقت التخلص منها. يُرجى تنفيذ الأوامر التالية لحذف البيئة التجريبية.
من Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. تهانينا!
تهانينا على إكمال ورشة رموز البرامج.
المواضيع التي تناولناها
- إنشاء جهاز موازنة حمل تطبيقات خارجي باستخدام سياسة موازنة الحمولة للخدمة
- اضبط خدمة الخلفية باستخدام ميزة استنزاف السعة التلقائية.
الخطوات التالية
- جرِّب الميزات الأخرى التي توفّرها سياسة service lb.