موازنه بار شبکه با وزن هر نمونه

1. مقدمه

می‌توانید یک متعادل‌کننده بار شبکه را برای توزیع ترافیک در بین نمونه‌های باطنی بار متعادل‌کننده بر اساس وزن‌های گزارش‌شده توسط بررسی سلامت HTTP با استفاده از متعادل‌سازی بار وزنی، پیکربندی کنید.

تعادل بار وزنی مستلزم این است که هر دو مورد زیر را پیکربندی کنید:

  • شما باید سیاست متعادل کننده بار محلی (localityLbPolicy) سرویس پشتیبان را روی WEIGHTED_MAGLEV تنظیم کنید.
  • باید سرویس باطن را با بررسی سلامت HTTP/HTTP2/HTTPS پیکربندی کنید. پاسخ‌های بررسی سلامت HTTP باید حاوی یک فیلد هدر پاسخ HTTP سفارشی X-Load-Balancing-Endpoint-Weight باشد تا وزن‌هایی را با مقادیر صحیح از 0 تا 1000 در نمایش اعشاری برای هر نمونه پشتیبان مشخص کند.

اگر از همان گروه نمونه به‌عنوان پشتیبان برای متعادل‌کننده‌های بار شبکه مبتنی بر سرویس پشتیبان چندگانه با استفاده از متعادل‌سازی بار وزنی استفاده می‌کنید، توصیه می‌شود برای هر بررسی سلامت سرویس باطن از یک مسیر درخواست منحصربه‌فرد استفاده کنید. برای اطلاعات بیشتر، معیارهای موفقیت برای بررسی‌های سلامت HTTP، HTTPS و HTTP/2 را ببینید.

بررسی سلامت HTTP باید یک پاسخ HTTP 200 (OK) را برای بررسی‌های سلامتی ارسال کند و نمونه پشتیبان سالم در نظر گرفته شود. در شرایطی که تمام نمونه‌های پشتیبان بررسی‌های سلامتی خود را انجام می‌دهند و X-Load-Balancing-Endpoint-Weight را با وزن صفر برمی‌گردانند، متعادل‌کننده بار اتصالات جدید را بین باطن‌های سالم توزیع می‌کند و آنها را با وزن برابر رفتار می‌کند. متعادل کننده بار همچنین می تواند اتصالات جدید را بین باطن های ناسالم توزیع کند. برای اطلاعات بیشتر، به توزیع ترافیک مراجعه کنید.

برای مثال‌هایی از متعادل‌سازی بار وزنی، به انتخاب Backend و ردیابی اتصال مراجعه کنید.

تعادل بار وزنی را می توان در سناریوهای زیر استفاده کرد:

  • اگر برخی از اتصالات داده های بیشتری را نسبت به سایرین پردازش کنند، یا برخی از اتصالات بیشتر از سایرین عمر کنند، ممکن است توزیع بار پشتیبان ناهموار شود. با علامت دادن وزن کمتر در هر نمونه، یک نمونه با بار بالا می تواند سهم خود را از اتصالات جدید کاهش دهد، در حالی که به سرویس های اتصالات موجود ادامه می دهد.
  • اگر یک Backend بیش از حد بارگذاری شود و تخصیص اتصالات بیشتر ممکن است اتصالات موجود را قطع کند، چنین Backendهایی وزن صفر را به خود اختصاص می دهند. با علامت دادن وزن صفر، یک نمونه پشتیبان سرویس اتصالات جدید را متوقف می کند، اما به سرویس های موجود ادامه می دهد.
  • اگر یک Backend قبل از تعمیر و نگهداری اتصالات موجود را تخلیه کند، وزن صفر را به خود اختصاص می دهد. با علامت دادن وزن صفر، نمونه پشتیبان سرویس اتصالات جدید را متوقف می کند، اما به سرویس های موجود ادامه می دهد.

چیزی که یاد خواهید گرفت

  • نحوه پیکربندی یک متعادل کننده بار شبکه برای توزیع ترافیک در نمونه های باطنی بار متعادل کننده بر اساس وزن های گزارش شده توسط بررسی سلامت HTTP با استفاده از تعادل بار وزنی.

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

2. پیکربندی را شروع کنید

Codelab به یک پروژه واحد نیاز دارد.

در این آموزش، شما یک گروه نمونه با سه نمونه VM ایجاد می کنید و برای هر نمونه وزن تعیین می کنید. شما یک بررسی سلامت HTTP ایجاد می‌کنید تا وزن‌های نمونه پشتیبان را گزارش کنید. متعادل کننده بار شبکه وزنی در سرویس پشتیبان با خط مشی متعادل کننده بار محلی به عنوان WEIGHTED_MAGLEV فعال است.

قبل از شروع

gcloud services enable compute.googleapis.com

توجه: نمی توانید از کنسول Google Cloud برای پیکربندی خط مشی متعادل کننده بار محلی و تعیین وزن به نمونه های VM استفاده کنید. به جای آن از Google Cloud CLI استفاده کنید.

شبکه VPC، زیرشبکه ها و قوانین فایروال را ایجاد کنید

ایجاد یک شبکه VPC، زیرشبکه و ورودی به قوانین فایروال اجازه می دهد تا به VM های پشتیبان بار متعادل کننده شما متصل شوند.

  1. یک شبکه VPC و زیرشبکه ایجاد کنید. الف برای ایجاد شبکه VPC، دستور gcloud compute networks create اجرا کنید :
gcloud compute networks create NETWORK_NAME --subnet-mode custom

ب در این مثال، محدوده آدرس IPv4 اولیه زیرشبکه 10.10.0.0/24 است.

برای ایجاد زیرشبکه، دستور gcloud compute networks subnets create اجرا کنید:

gcloud compute networks subnets create SUBNET_NAME \
  --network=NETWORK_NAME \
  --range=10.10.0.0/24 \
  --region=us-central1

موارد زیر را جایگزین کنید:

  • NETWORK_NAME : نام شبکه VPC برای ایجاد.
  • SUBNET_NAME : نام زیرشبکه ای که باید ایجاد شود.
  1. یک قانون فایروال اجازه ورود ایجاد کنید تا بسته‌های ارسال شده به پورت‌های TCP مقصد 80 و 443 به ماشین‌های مجازی پشتیبان تحویل داده شوند. در این مثال، قانون فایروال اجازه اتصال از هر آدرس IP منبع را می دهد. قانون فایروال برای ماشین های مجازی با تگ شبکه network network-lb-tag اعمال می شود. برای ایجاد قانون فایروال، دستور gcloud compute firewall-rules create را اجرا کنید:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
   --direction=INGRESS \
   --priority=1000 \
   --network=NETWORK_NAME \
   --action=ALLOW \
   --rules=tcp:80,tcp:443 \
   --source-ranges=0.0.0.0/0 \
   --target-tags=network-lb-tag

برای ایجاد، نام قانون فایروال را جایگزین FIREWALL_RULE_NAME کنید.

نمونه های VM ایجاد کنید و وزن ها را تعیین کنید

سه نمونه VM ایجاد کنید و وزن را تعیین کنید:

  1. سه نمونه پشتیبان VM را پیکربندی کنید تا وزن‌های هدر X-Load-Balancing-Endpoint-Weight را با پاسخ‌های HTTP برگردانند. برای این آموزش، شما یک نمونه پشتیبان را برای گزارش وزن صفر، یک نمونه پشتیبان دوم برای گزارش وزن 100، و یک نمونه پشتیبان سوم را برای گزارش وزن 900 پیکربندی می‌کنید. برای ایجاد نمونه‌ها، gcloud compute instances create اجرا کنید. دستور:
gcloud compute instances create instance-0 \
  --zone=us-central1-a \
  --tags=network-lb-tag \
  --image-family=debian-10 \
  --image-project=debian-cloud \
  --subnet=
SUBNET_NAME
\
  --metadata=load-balancing-weight=0,startup-script='#! /bin/bash
  apt-get update
  apt-get install apache2 -y
  ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
  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
  lb_weight="$(curl -H "Metadata-Flavor:Google" \
  http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
  echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
  tee /etc/apache2/conf-enabled/headers.conf
  systemctl restart apache2'
gcloud compute instances create instance-100 \
  --zone=us-central1-a \
  --tags=network-lb-tag \
  --image-family=debian-10 \
  --image-project=debian-cloud \
  --subnet=SUBNET_NAME \
  --metadata=load-balancing-weight=100,startup-script='#! /bin/bash
  apt-get update
  apt-get install apache2 -y
  ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
  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
  lb_weight="$(curl -H "Metadata-Flavor:Google" \
  http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
  echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
  tee /etc/apache2/conf-enabled/headers.conf
  systemctl restart apache2'
gcloud compute instances create instance-900 \
  --zone=us-central1-a \
  --tags=network-lb-tag \
  --image-family=debian-10 \
  --image-project=debian-cloud \
  --subnet=
SUBNET_NAME
\
  --metadata=load-balancing-weight=900,startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
    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
    lb_weight="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
    echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
    tee /etc/apache2/conf-enabled/headers.conf
    systemctl restart apache2'

یک گروه نمونه ایجاد کنید

در این آموزش، دستورالعمل‌هایی برای ایجاد یک گروه نمونه مدیریت‌نشده شامل هر سه نمونه VM ( instance-0, instance-100, and instance-900 ) ارائه می‌دهید.

gcloud compute instance-groups unmanaged create
INSTANCE_GROUP --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \
  --zone=us-central1-a \
  --instances=instance-0,instance-100,instance-900

INSTANCE_GROUP با نام گروه نمونه برای ایجاد جایگزین کنید.

یک بررسی سلامت HTTP ایجاد کنید

در این آموزش، شما دستورالعمل هایی را برای ایجاد یک بررسی سلامت HTTP برای خواندن پاسخ HTTP حاوی وزن ماشین مجازی پشتیبان ارائه می دهید."

gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
  --region=us-central1

برای ایجاد، نام بررسی سلامت HTTP را جایگزین HTTP_HEALTH_CHECK_NAME کنید.

یک سرویس پشتیبان ایجاد کنید

مثال زیر دستورالعمل‌هایی را برای ایجاد یک سرویس پشتیبان خارجی منطقه‌ای ارائه می‌دهد که برای استفاده از متعادل‌سازی بار وزنی پیکربندی شده است.

  1. با بررسی سلامت HTTP یک سرویس پشتیبان ایجاد کنید و خط مشی متعادل کننده بار محلی را روی WEIGHTED_MAGLEV تنظیم کنید.
gcloud compute backend-services create BACKEND_SERVICE_NAME \
  --load-balancing-scheme=external \
  --protocol=tcp \
  --region=us-central1 \
  --health-checks=HTTP_HEALTH_CHECK_NAME \
  --health-checks-region=us-central1 \
  --locality-lb-policy=WEIGHTED_MAGLEV
  • برای ایجاد، نام سرویس پشتیبان را جایگزین BACKEND_SERVICE_NAME کنید.
  1. گروه نمونه را به سرویس Backend اضافه کنید.
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
  --instance-group=INSTANCE_GROUP \
  --instance-group-zone=us-central1-a \
  --region=us-central1
  1. یک آدرس IP خارجی منطقه ای برای متعادل کننده بار رزرو کنید.
gcloud compute addresses create ADDRESS_NAME \
 --region us-central1

برای ایجاد، نام آدرس IP را جایگزین ADDRESS_NAME کنید. برای مشاهده نتیجه از دستور compute addresses describe استفاده کنید. به آدرس IP خارجی ثابت رزرو شده (' IP_ADDRESS' ) توجه کنید.

gcloud compute addresses describe ADDRESS_NAME
  1. با استفاده از آدرس IP خارجی منطقه ای رزرو شده "IP_ADDRESS" یک قانون حمل و نقل ایجاد کنید. قانون فورواردینگ را به سرویس Backend متصل کنید.
gcloud compute forwarding-rules create FORWARDING_RULE \
  --region=us-central1 \
  --ports=80 \
  --address=IP_ADDRESS \
  --backend-service=BACKEND_SERVICE_NAME
  • موارد زیر را جایگزین کنید: FORWARDING_RULE : نام قانون حمل و نقل برای ایجاد. IP_ADDRESS: آدرس IP برای تخصیص به نمونه. از آدرس IP خارجی استاتیک رزرو شده استفاده کنید، نه از نام آدرس.

با استفاده از API سرویس باطن، وزن‌های باطن را تأیید کنید

بررسی کنید که وزن های پشتیبان به درستی به بررسی سلامت HTTP گزارش شده است.

gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \
  --region=us-central1

خروجی باید مانند زیر باشد:

backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name}
status:
  healthStatus:
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0
    ipAddress: 10.10.0.5
    port: 80
    weight: '0'
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100
    ipAddress: 10.10.0.6
    port: 80
    weight: '100'
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900
    ipAddress: 10.10.0.7
    port: 80
    weight: '900'
  kind: compute#backendServiceGroupHealth