1. مقدمة
مرحبًا بك في الدرس التطبيقي حول الترميز بشأن التحسينات المتقدّمة لموازنة الحمل.
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية ضبط خيارات موازنة الحمل المتقدّمة لجهاز موازنة الحمل للتطبيقات الخارجية العالمية. قبل البدء، يُنصح بالاطّلاع أولاً على المستند حول موازنة الحمل على السحابة الإلكترونية ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

الشكل 1: سير عمل اختيار نقطة نهاية وجهة باستخدام "جهاز موازنة الحمل للتطبيقات الخارجية" العالمي
بنية الدرس التطبيقي حول الترميز وحالات الاستخدام

الشكل 2 طوبولوجيا التوجيه في "موازنة الحمل عبر بروتوكول HTTP"
خلال هذا الدرس التطبيقي، ستعمل على إعداد مجموعتَين من المثيلات المُدارة. ستنشئ جهاز موازنة حمل HTTPS خارجيًا شاملاً. سيستخدم جهاز موازنة الحمل عدة ميزات من قائمة الإمكانات المتقدّمة التي يتيحها جهاز موازنة الحمل المستند إلى Envoy. بعد نشرها، ستنشئ بعض عمليات التحميل المحاكية وتتأكّد من أنّ الإعدادات التي ضبطتها تعمل بشكلٍ مناسب.
ما ستتعلمه
- كيفية ضبط ServiceLbPolicy لتحسين جهاز موازنة الحمل
المتطلبات
- معرفة موازنة الحمل الخارجية لبروتوكول HTTPS الجزء الأول من هذا الدرس التطبيقي حول الترميز يشبه إلى حد كبير الدرس التطبيقي حول الترميز بشأن استخدام الجهاز الخارجي المخصص لموازنة الحِمل عبر HTTPS مع خدمة "الإدارة المتقدمة لحركة البيانات" (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
في هذا الدرس التطبيقي حول الترميز، سنعمل على تعديل حالة الأجهزة الافتراضية. لذلك، سننشئ أيضًا قواعد جدار الحماية للسماح ببروتوكول SSH.
من 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) وفقًا لتعريفات مجموعات المثيلات.
الآن، أرسِل طلب ويب في المتصفّح للتأكّد من أنّ خادم الويب يعمل (قد يستغرق ذلك دقيقة واحدة للبدء). في صفحة "أجهزة VM الافتراضية" ضِمن 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
إضافة واجهات MIG إلى "خدمات الخلفية"
بعد إنشاء خدمات الخلفية، يجب الآن إضافة "مجموعات الأجهزة الافتراضية المُدارة" التي أنشأناها سابقًا إلى كل خدمة من خدمات الخلفية.
من 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) للوصول إلى الجهاز الافتراضي (VM) الذي أنشأته. بعد إنشائه، انقر على 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
ربط سياسة Service LB بالخدمة الخلفية
سنرفق الآن السياسة الجديدة بخدمة الخلفية الحالية المذكورة أعلاه.
من Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. Tweak Backend Health
في هذه المرحلة، تم تطبيق سياسة موازنة التحميل الجديدة للخدمة على خدمة الخلفية. لذا، يمكنك الانتقال إلى عملية التنظيف مباشرةً. ولكن كجزء من درس تطبيقي حول الترميز، سنُجري أيضًا بعض التعديلات الإضافية على الإصدار العلني لنوضّح لك طريقة عمل السياسة الجديدة.
ستؤدي ميزة "استنزاف السعة التلقائي" إلى إزالة مجموعة مثيلات مُدارة (MIG) في الخلفية تلقائيًا من موازن التحميل عندما ينخفض العدد الإجمالي للخلفيات السليمة عن حدّ معيّن (25%). لاختبار هذه الميزة، سنستخدم بروتوكول النقل الآمن (SSH) للوصول إلى الأجهزة الافتراضية في us-east1-b-mig وسنجعلها غير سليمة. باستخدام الحدّ الأدنى البالغ% 25، عليك استخدام بروتوكول النقل الآمن (SSH) في أربع من الأجهزة الافتراضية وإيقاف خادم Apache.
لإجراء ذلك، اختَر أربعة أجهزة افتراضية وادخل إلى بروتوكول النقل الآمن (SSH) من خلال النقر على بروتوكول النقل الآمن (SSH) لتشغيل نافذة طرفية والاتصال. بعد ذلك، شغِّل الأمر التالي.
sudo apachectl stop
في هذه المرحلة، سيتم تفعيل ميزة استنزاف السعة التلقائي ولن تتلقّى المنطقة us-east1-b-mig طلبات جديدة.
9- التأكّد من أنّ ميزة "استنزاف السعة التلقائي" تعمل
إعادة تشغيل Siege
للتحقّق من الميزة الجديدة، سنعيد استخدام الجهاز الظاهري Siege مرة أخرى. لنبدأ بتسجيل الدخول إلى الجهاز الظاهري (VM) الذي أنشأته في الخطوة السابقة باستخدام 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 لإيقاف عملية التشغيل.
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. تهانينا!
تهانينا على إكمال هذا الدرس العملي.
المواضيع التي تناولناها
- إنشاء جهاز موازنة حمل خارجي للتطبيقات باستخدام سياسة موازنة الحمل للخدمة
- اضبط خدمة الخلفية باستخدام ميزة "استنزاف السعة التلقائي".
الخطوات التالية
- جرِّب ميزات أخرى توفّرها سياسة موازنة التحميل للخدمة.