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 با استفاده از تعادل بار وزنی.
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.
2. پیکربندی را شروع کنید
Codelab به یک پروژه واحد نیاز دارد.
در این آموزش، شما یک گروه نمونه با سه نمونه VM ایجاد می کنید و برای هر نمونه وزن تعیین می کنید. شما یک بررسی سلامت HTTP ایجاد میکنید تا وزنهای نمونه پشتیبان را گزارش کنید. متعادل کننده بار شبکه وزنی در سرویس پشتیبان با خط مشی متعادل کننده بار محلی به عنوان WEIGHTED_MAGLEV فعال است.
قبل از شروع
- نمای کلی تعادل بار شبکه خارجی مبتنی بر خدمات Backend را بخوانید.
- Google Cloud CLI را نصب کنید. برای یک نمای کلی از ابزار، به نمای کلی gcloud CLI مراجعه کنید. می توانید دستورات مربوط به تعادل بار را در مرجع API و gcloud CLI پیدا کنید. اگر قبلاً Google Cloud CLI را اجرا نکردهاید، ابتدا gcloud init را برای احراز هویت اجرا کنید.
- API محاسباتی را فعال کنید.
gcloud services enable compute.googleapis.com
توجه: نمی توانید از کنسول Google Cloud برای پیکربندی خط مشی متعادل کننده بار محلی و تعیین وزن به نمونه های VM استفاده کنید. به جای آن از Google Cloud CLI استفاده کنید.
شبکه VPC، زیرشبکه ها و قوانین فایروال را ایجاد کنید
ایجاد یک شبکه VPC، زیرشبکه و ورودی به قوانین فایروال اجازه می دهد تا به VM های پشتیبان بار متعادل کننده شما متصل شوند.
- یک شبکه 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
: نام زیرشبکه ای که باید ایجاد شود.
- یک قانون فایروال اجازه ورود ایجاد کنید تا بستههای ارسال شده به پورتهای 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 ایجاد کنید و وزن را تعیین کنید:
- سه نمونه پشتیبان 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
اجرا کنید:
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 حاوی وزن ماشین مجازی پشتیبان ارائه می دهید."
- برای ایجاد بررسی سلامت HTTP، دستور
gcloud compute health-checks create
اجرا کنید:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
برای ایجاد، نام بررسی سلامت HTTP را جایگزین HTTP_HEALTH_CHECK_NAME
کنید.
یک سرویس پشتیبان ایجاد کنید
مثال زیر دستورالعملهایی را برای ایجاد یک سرویس پشتیبان خارجی منطقهای ارائه میدهد که برای استفاده از متعادلسازی بار وزنی پیکربندی شده است.
- با بررسی سلامت HTTP یک سرویس پشتیبان ایجاد کنید و خط مشی متعادل کننده بار محلی را روی WEIGHTED_MAGLEV تنظیم کنید.
- برای ایجاد سرویس backend، دستور
gcloud compute backend-services create
اجرا کنید:
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
کنید.
- گروه نمونه را به سرویس Backend اضافه کنید.
- برای افزودن گروه نمونه، دستور
gcloud compute backend-services add-backend
اجرا کنید:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- یک آدرس IP خارجی منطقه ای برای متعادل کننده بار رزرو کنید.
- برای رزرو یک یا چند آدرس IP، دستور
gcloud compute addresses create
اجرا کنید:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
برای ایجاد، نام آدرس IP را جایگزین ADDRESS_NAME
کنید. برای مشاهده نتیجه از دستور compute addresses describe
استفاده کنید. به آدرس IP خارجی ثابت رزرو شده (' IP_ADDRESS'
) توجه کنید.
gcloud compute addresses describe ADDRESS_NAME
- با استفاده از آدرس IP خارجی منطقه ای رزرو شده "IP_ADDRESS" یک قانون حمل و نقل ایجاد کنید. قانون فورواردینگ را به سرویس Backend متصل کنید.
- برای ایجاد قانون حمل و نقل، دستور
gcloud compute forwarding-rules create
اجرا کنید:
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
اجرا کنید:
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