অ্যাডভান্সড ট্রাফিক ম্যানেজমেন্ট (এনভয়) কোডল্যাবের সাথে এক্সটার্নাল HTTPs LB

১. ভূমিকা

অ্যাডভান্সড ট্র্যাফিক ম্যানেজমেন্ট সহ এক্সটার্নাল HTTPs LB (এনভয়) কোডল্যাবে আপনাকে স্বাগতম!

অ্যাডভান্সড ট্র্যাফিক ম্যানেজমেন্ট সহ HTTP(S) এক্সটার্নাল লোড ব্যালান্সারের সর্বশেষ সংস্করণে আমাদের বিদ্যমান ক্লাসিক গ্লোবাল এক্সটার্নাল HTTP(S) লোড ব্যালান্সারের সমস্ত বৈশিষ্ট্য রয়েছে, তবে এর সাথে যুক্ত হয়েছে অ্যাডভান্সড ট্র্যাফিক ম্যানেজমেন্ট সক্ষমতার এক ক্রমবর্ধমান তালিকা। এই সক্ষমতাগুলোর মধ্যে কিছু আমাদের লোড ব্যালান্সারগুলোতে নতুন, এবং কিছু বিদ্যমান সক্ষমতাগুলোকে আরও উন্নত করে। এই সক্ষমতাগুলোর একটি আংশিক তালিকা নিচে দেওয়া হলো:

  • ওজনযুক্ত ট্র্যাফিক বিভাজন
  • প্রতিবিম্বনের অনুরোধ
  • আউটলায়ার সনাক্তকরণ
  • পুনরায় চেষ্টার অনুরোধ
  • ফল্ট ইনজেকশন
  • অতিরিক্ত ব্যাকএন্ড সেশন অ্যাফিনিটি বিকল্পগুলি
  • অতিরিক্ত হেডার রূপান্তর বিকল্প
  • ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS)
  • নতুন লোড ব্যালেন্সিং অ্যালগরিদম

আপনি যা শিখবেন

  • কীভাবে একটি ম্যানেজড ইনস্ট্যান্স গ্রুপ এবং এর সাথে সম্পর্কিত ভিপিসি ও ফায়ারওয়াল নিয়মাবলী সেট আপ করবেন
  • নতুন লোড ব্যালান্সারের উন্নত ট্র্যাফিক ম্যানেজমেন্ট ফিচারগুলো কীভাবে ব্যবহার করবেন
  • উন্নত ট্র্যাফিক ব্যবস্থাপনা বৈশিষ্ট্যগুলো উদ্দেশ্য অনুযায়ী কাজ করছে কিনা, তা কীভাবে যাচাই করবেন।

আপনার যা যা লাগবে

  • বেসিক নেটওয়ার্কিং এবং HTTP সম্পর্কে জ্ঞান
  • ইউনিক্স/লিনাক্স কমান্ড লাইনের প্রাথমিক জ্ঞান

কোডল্যাব টপোলজি এবং ব্যবহারের ক্ষেত্র

dd8bd5e8e1341878.png

চিত্র ১ - HTTP লোড ব্যালেন্সার রাউটিং টপোলজি

এই কোড ল্যাবে আপনি ইস্ট, ওয়েস্ট এবং সেন্ট্রাল-এ তিনটি ম্যানেজড ইনস্ট্যান্স গ্রুপ সেট আপ করবেন। আপনি একটি গ্লোবাল এক্সটার্নাল https লোড ব্যালেন্সার তৈরি করবেন। এই লোড ব্যালেন্সারটি এনভয়-ভিত্তিক লোড ব্যালেন্সারের অ্যাডভান্সড ক্যাপাবিলিটির তালিকা থেকে বিভিন্ন ফিচার ব্যবহার করবে। ডেপ্লয় করার পর, আপনি কিছু সিমুলেটেড লোড তৈরি করবেন এবং আপনার সেট করা কনফিগারেশনগুলো সঠিকভাবে কাজ করছে কিনা তা যাচাই করবেন।

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

7ffe5cbb04455448.png

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে। আপনাকে কিছুই ইনস্টল করতে হবে না।

শুরু করার আগে

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রজেক্ট আইডি সেট আপ করা আছে।

gcloud config list project

gcloud config set project [আপনার-প্রকল্পের-নাম]

প্রজেক্ট_আইডি=[আপনার-প্রজেক্টের-নাম]

ইকো $প্রজেক্ট_আইডি

এপিআই সক্ষম করুন

সমস্ত প্রয়োজনীয় পরিষেবা সক্রিয় করুন

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

৩. ভিপিসি নেটওয়ার্ক তৈরি করুন

একটি VPC নেটওয়ার্ক তৈরি করুন

ক্লাউড শেল থেকে

gcloud compute networks create httplbs --subnet-mode=auto

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME: httplbs
SUBNET_MODE: AUTO
BGP_ROUTING_MODE: REGIONAL
IPV4_RANGE:
GATEWAY_IPV4:

VPC ফায়ারওয়াল নিয়ম তৈরি করুন

VPC তৈরি করার পর, এখন আপনাকে ফায়ারওয়াল নিয়ম তৈরি করতে হবে। এই ফায়ারওয়াল নিয়মটি সমস্ত IP-কে টেস্ট অ্যাপ্লিকেশনের ওয়েবসাইটের এক্সটার্নাল IP-তে http ট্র্যাফিকের জন্য পোর্ট ৮০-তে অ্যাক্সেস করার অনুমতি দিতে ব্যবহৃত হবে।

ক্লাউড শেল থেকে

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: httplb-allow-http-rule
NETWORK: httplbs
DIRECTION: INGRESS
PRIORITY: 700
ALLOW: tcp:80
DENY:
DISABLED: False

৪. পরিচালিত ইনস্ট্যান্স গ্রুপগুলি সেট আপ করুন

আপনাকে ম্যানেজড ইনস্ট্যান্স গ্রুপ সেট আপ করতে হবে, যেগুলোতে HTTP লোড ব্যালেন্সার দ্বারা ব্যবহৃত ব্যাকএন্ড রিসোর্সের প্যাটার্ন অন্তর্ভুক্ত থাকবে। প্রথমে আমরা ইনস্ট্যান্স টেমপ্লেট তৈরি করব, যা প্রতিটি অঞ্চলের জন্য তৈরি হতে যাওয়া ভিএম-গুলোর কনফিগারেশন নির্ধারণ করবে। এরপর, প্রতিটি অঞ্চলের একটি ব্যাকএন্ডের জন্য, আমরা একটি ম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করব যা একটি ইনস্ট্যান্স টেমপ্লেটকে রেফারেন্স করবে।

ম্যানেজড ইনস্ট্যান্স গ্রুপগুলো জোনাল বা রিজিওনাল হতে পারে। এই ল্যাব অনুশীলনের জন্য আমরা তিনটি রিজিওনাল ম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করব: একটি us-east1-এ, একটি us-west1-এ এবং একটি us-central1-এ।

এই অংশে আপনি আগে থেকে তৈরি একটি স্টার্টআপ স্ক্রিপ্ট দেখতে পাবেন, যা ইনস্ট্যান্স তৈরির সময় ব্যবহৃত হবে। এই স্টার্টআপ স্ক্রিপ্টটি ওয়েব সার্ভারের সক্ষমতা ইনস্টল ও সক্রিয় করে, যা আমরা একটি ওয়েব অ্যাপ্লিকেশন সিমুলেট করতে ব্যবহার করব। আপনি নির্দ্বিধায় এই স্ক্রিপ্টটি অন্বেষণ করতে পারেন।

পূর্ব, পশ্চিম এবং কেন্দ্রীয় ইনস্ট্যান্স টেমপ্লেট তৈরি করুন

প্রথম ধাপ হলো us-east-1 ইনস্ট্যান্স টেমপ্লেটটি তৈরি করা।

ক্লাউড শেল থেকে

gcloud compute instance-templates create us-east1-template \
   --region=us-east1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --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'

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-east1-template].
NAME: us-east1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:02:37.511-08:00

পরবর্তী ধাপ হলো us-west-1 ইনস্ট্যান্স টেমপ্লেটটি তৈরি করা।

ক্লাউড শেল থেকে

gcloud compute instance-templates create us-west1-template \
   --region=us-west1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --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'

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-west1-template].
NAME: us-west1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:08.577-08:00

পরবর্তী ধাপ হলো us-central-1 ইনস্ট্যান্স টেমপ্লেটটি তৈরি করা।

ক্লাউড শেল থেকে

gcloud compute instance-templates create us-central1-template \
   --region=us-central1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --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'

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-central1-template].
NAME: us-central1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:44.179-08:00

আপনি এখন নিম্নলিখিত gcloud কমান্ডের মাধ্যমে যাচাই করতে পারেন যে আমাদের ইনস্ট্যান্স টেমপ্লেটগুলি সফলভাবে তৈরি হয়েছে:

ক্লাউড শেল থেকে

gcloud compute instance-templates list

আউটপুট

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
us-central1-template   n1-standard-1         2021-11-09T09:25:37.263-08:00
us-east1-template      n1-standard-1         2021-11-09T09:24:35.275-08:00
us-west1-template      n1-standard-1         2021-11-09T09:25:08.016-08:00

পূর্ব, পশ্চিম এবং কেন্দ্রীয় পরিচালিত ইনস্ট্যান্স গ্রুপ তৈরি করুন

এখন আমাদের পূর্বে তৈরি করা ইনস্ট্যান্স টেমপ্লেটগুলো থেকে একটি ম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করতে হবে।

ক্লাউড শেল থেকে

gcloud compute instance-groups managed create us-east1-mig \
--base-instance-name=us-east1-mig \
--size=1 \
--template=us-east1-template \
--zone=us-east1-b 

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-mig].
NAME: us-east1-mig
LOCATION: us-east1-b
SCOPE: zone
BASE_INSTANCE_NAME: us-east1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-east1-template
AUTOSCALED: no

ক্লাউড শেল থেকে

gcloud compute instance-groups managed create us-west1-mig \
--base-instance-name=us-west1-mig \
--size=1 \
--template=us-west1-template \
--zone=us-west1-a  

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroupManagers/us-west1-mig].
NAME: us-west1-mig
LOCATION: us-west1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-west1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-west1-template
AUTOSCALED: no

ক্লাউড শেল থেকে

gcloud compute instance-groups managed create us-central1-mig \
--base-instance-name=us-central1-mig \
--size=1 \
--template=us-central1-template \
--zone=us-central1-a 

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-central1-a/instanceGroupManagers/us-central1-mig].
NAME: us-central1-mig
LOCATION: us-central1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-central1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-central1-template
AUTOSCALED: no

নিম্নলিখিত gcloud কমান্ডের মাধ্যমে আমরা যাচাই করতে পারি যে আমাদের ইনস্ট্যান্স গ্রুপগুলি সফলভাবে তৈরি হয়েছে:

ক্লাউড শেল থেকে

gcloud compute instance-groups list

আউটপুট

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-central1-mig       us-central1   zone    httplbs          Yes      1
us-west1-mig          us-west1      zone    httplbs          Yes      1
us-east1-mig          us-east1      zone    httplbs          Yes      1

ওয়েব সার্ভারের কার্যকারিতা যাচাই করুন

প্রতিটি ইনস্ট্যান্স একটি অ্যাপাচি ওয়েব-সার্ভার চালানোর জন্য কনফিগার করা আছে, যার সাথে একটি সাধারণ পিএইচপি স্ক্রিপ্ট যুক্ত থাকে যা রেন্ডার করে:

c87ca81d3125ac61.png

আপনার ওয়েব সার্ভারগুলো সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে, Compute Engine -> VM instances-এ যান। আপনার নতুন ইনস্ট্যান্সগুলো (যেমন us-east1-mig-xxx) তাদের ইনস্ট্যান্স গ্রুপ সংজ্ঞা অনুযায়ী তৈরি হয়েছে কিনা তা নিশ্চিত করুন।

এখন, ওয়েব সার্ভারটি চালু আছে কিনা তা নিশ্চিত করতে আপনার ব্রাউজারে এটিতে একটি ওয়েব রিকোয়েস্ট পাঠান (এটি চালু হতে এক মিনিট সময় লাগতে পারে)। Compute Engine-এর অধীনে VM instances পৃষ্ঠায়, আপনার ইনস্ট্যান্স গ্রুপ দ্বারা তৈরি একটি ইনস্ট্যান্স নির্বাচন করুন এবং এর External (পাবলিক) IP-তে ক্লিক করুন।

অথবা, আপনার ব্রাউজারে http://<IP_Address> এ যান।

৫. লোড ব্যালেন্সার সেট আপ করুন।

স্বাস্থ্য পরীক্ষা তৈরি করুন

প্রথমে আমাদের পরিষেবাগুলি সফলভাবে চালু আছে কিনা তা নিশ্চিত করার জন্য একটি প্রাথমিক স্বাস্থ্য পরীক্ষা তৈরি করতে হবে। আমরা একটি প্রাথমিক স্বাস্থ্য পরীক্ষা তৈরি করব, তবে আরও অনেক উন্নত কাস্টমাইজেশনের সুযোগ রয়েছে।

ক্লাউড শেল থেকে

gcloud compute health-checks create http http-basic-check \
    --port 80

সংরক্ষিত বাহ্যিক আইপি ঠিকানা

এই ধাপের জন্য আপনাকে একটি বিশ্বব্যাপী উপলব্ধ স্ট্যাটিক আইপি অ্যাড্রেস রিজার্ভ করতে হবে, যা পরবর্তীতে লোড ব্যালান্সারের সাথে সংযুক্ত করা হবে।

ক্লাউড শেল থেকে

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

সংরক্ষিত আইপি অ্যাড্রেসটি অবশ্যই লিখে রাখুন।

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

ব্যাকএন্ড পরিষেবা তৈরি করুন

এখন আমাদের আগে তৈরি করা প্রতিটি ম্যানেজড ইনস্ট্যান্স গ্রুপের জন্য একটি করে ব্যাকএন্ড সার্ভিস তৈরি করতে হবে। ইস্ট, ওয়েস্ট এবং সেন্ট্রালের জন্য একটি করে।

ইস্ট ম্যানেজড ইনস্ট্যান্স গ্রুপের জন্য একটি ব্যাকএন্ড সার্ভিস তৈরি করা হচ্ছে।

ক্লাউড শেল থেকে

gcloud compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

ওয়েস্ট ম্যানেজড ইনস্ট্যান্স গ্রুপের জন্য একটি ব্যাকএন্ড সার্ভিস তৈরি করা হচ্ছে।

ক্লাউড শেল থেকে

gcloud compute backend-services create west-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

কেন্দ্রীয় পরিচালিত ইনস্ট্যান্স গ্রুপের জন্য একটি ব্যাকএন্ড পরিষেবা তৈরি করা হচ্ছে।

ক্লাউড শেল থেকে

gcloud compute backend-services create central-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

ব্যাকএন্ড পরিষেবাগুলিতে MIG যোগ করুন

এখন যেহেতু আমরা প্রতিটি অ্যাপ্লিকেশন ক্লাস্টারের জন্য সংশ্লিষ্ট ব্যাকএন্ড সার্ভিসগুলো তৈরি করে ফেলেছি, তাই আমাদের পূর্বে তৈরি করা ম্যানেজড ইনস্ট্যান্স গ্রুপগুলোকে প্রতিটি ব্যাকএন্ড সার্ভিসে যুক্ত করতে হবে।

ব্যাকএন্ড সার্ভিসে ইস্ট এমআইজি যোগ করুন।

ক্লাউড শেল থেকে

gcloud compute backend-services add-backend east-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-east1-mig \
    --instance-group-zone=us-east1-b \
    --global

ব্যাকএন্ড সার্ভিসে ওয়েস্ট মিগকে যুক্ত করুন।

ক্লাউড শেল থেকে

gcloud compute backend-services add-backend west-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-west1-mig \
    --instance-group-zone=us-west1-a \
    --global

ব্যাকএন্ড সার্ভিসে সেন্ট্রাল এমআইজি যোগ করুন।

ক্লাউড শেল থেকে

gcloud compute backend-services add-backend central-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-central1-mig \
    --instance-group-zone=us-central1-a \
    --global

ইউআরএল ম্যাপ তৈরি করুন

এই ল্যাবের উন্নত ট্র্যাফিক ম্যানেজমেন্ট ফিচারগুলো ইউআরএল ম্যাপে থাকবে। আমাদের একটি .yaml ফাইল তৈরি করতে হবে, যেখানে কনফিগারেশন থাকবে। .yaml ফাইলের মধ্যে আমরা /roundrobbin-এর উপর একটি প্রিফিক্স ম্যাচ তৈরি করেছি, ফলে শুধুমাত্র /roundrobbin-এর সাথে মিলে যাওয়া ট্র্যাফিকই এই কনফিগারেশন দ্বারা প্রভাবিত হবে। আমরা নির্দিষ্ট করে দিয়েছি যে ৫০% ট্র্যাফিক east-backend-service-এ এবং বাকি ৫০% west-backend-service-এ যাবে। এছাড়াও আমরা একটি রেসপন্স হেডার ভ্যালু:{test} যোগ করেছি, যা সমস্ত রেসপন্সে উপস্থিত থাকবে। সবশেষে, আমরা যোগ করেছি যে সমস্ত ট্র্যাফিক central-backend-service-এ মিরর করা হবে। শুধুমাত্র পরীক্ষার উদ্দেশ্যে ট্র্যাফিকটি ডুপ্লিকেট করে এখানে পাঠানো হয়।

উদাহরণটি আপনার কম্পিউটারে একটি .yaml ফাইল হিসেবে সংরক্ষণ করুন।

defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
kind: compute #urlMap
name: web-map-http
hostRules:
- hosts:
  - '*'
  pathMatcher: matcher1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
  name: matcher1
  routeRules:
  - matchRules:
    - prefixMatch: /roundrobbin
    priority: 2
    headerAction:
        responseHeadersToAdd:
          - headerName: test
            headerValue: value
            replace: True
    routeAction:
        weightedBackendServices:
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
          weight: 50
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/west-backend-service
          weight: 50
        retryPolicy:
            retryConditions: ['502', '504']
            numRetries: 3
            perTryTimeout:
                seconds: 1
                nanos: 50
        requestMirrorPolicy:
          backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/central-backend-service

আপনার মেশিন থেকে ডকুমেন্টটি ইম্পোর্ট করে ইউআরএল ম্যাপ তৈরি করুন। মনে রাখবেন, আপনি .yaml ফাইলটি কোথায় সেভ করছেন তার উপর নির্ভর করে সোর্স পাথ ভিন্ন হবে।

ক্লাউড শেল থেকে

gcloud compute url-maps import web-map-http \
   --source /Users/[USERNAME]/Documents/Codelab/lbconfig.yaml \
   --global

HTTP ফ্রন্টএন্ড তৈরি করুন

লোড ব্যালেন্সার তৈরির চূড়ান্ত ধাপ হলো ফ্রন্টএন্ড তৈরি করা। এটি আপনার পূর্বে সংরক্ষিত আইপি অ্যাড্রেসটিকে আপনার তৈরি করা লোড ব্যালেন্সার ইউআরএল ম্যাপের সাথে সংযুক্ত করবে।

ক্লাউড শেল থেকে

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

এরপরে আপনাকে একটি গ্লোবাল ফরওয়ার্ডিং রুল তৈরি করতে হবে, যা পূর্বে সংরক্ষিত আইপি অ্যাড্রেসটিকে এইচটিটিপি প্রক্সির সাথে ম্যাপ করবে।

ক্লাউড শেল থেকে

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

৬. উন্নত ট্র্যাফিক বৈশিষ্ট্যগুলি কাজ করছে কিনা তা যাচাই করুন।

বাস্তবায়িত ট্র্যাফিক স্প্লিটিং ফিচারটি কাজ করছে কিনা তা যাচাই করার জন্য, আপনাকে কিছু লোড তৈরি করতে হবে। এর জন্য আমরা লোড সিমুলেট করতে একটি নতুন ভিএম (VM) তৈরি করব।

SSH ফায়ারওয়াল নিয়ম তৈরি করুন

যে ভিএম (VM) থেকে আমরা ট্র্যাফিক তৈরি করব, সেটিতে SSH করার জন্য আপনাকে প্রথমে একটি ফায়ারওয়াল নিয়ম তৈরি করতে হবে, যা ভিএম-টিতে SSH ট্র্যাফিকের অনুমতি দেবে।

ক্লাউড শেল থেকে

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

আউটপুট

NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

Siege-vm তৈরি করুন

এখন আপনি siege-vm তৈরি করবেন যা আপনি লোড তৈরি করতে ব্যবহার করবেন।

ক্লাউড শেল থেকে

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east4-c \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

আউটপুট

NAME     ZONE        MACHINE_TYPE INTERNAL_IP  EXTERNAL_IP    STATUS
siege-vm us-east4-c  e2-medium    10.150.0.3   34.85.218.119  RUNNING

এরপর আপনি আপনার তৈরি করা ভিএম-এ SSH করতে পারবেন। এটি তৈরি হয়ে গেলে, একটি টার্মিনাল চালু করতে এবং সংযোগ করতে SSH-এ ক্লিক করুন।

সংযুক্ত হয়ে গেলে, লোড তৈরি করতে নিম্নলিখিত কমান্ডটি চালান। এক্সটার্নাল http লোড ব্যালান্সারের জন্য পূর্বে সংরক্ষিত আইপি অ্যাড্রেসটি ব্যবহার করুন।

ক্লাউড শেল থেকে

siege -c 250 http://[$lb-ipv4-2]/roundrobbin

আউটপুট

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file
[alert] Zip encoding disabled; siege requires zlib support to enable it: No such file or directory
** SIEGE 4.0.2
** Preparing 250 concurrent users for battle.
The server is now under siege...

লোড বন্টন পরীক্ষা করুন

এখন যেহেতু সিজ (Siege) চলছে, তাই পূর্ব এবং পশ্চিম পরিচালিত ইনস্ট্যান্স গ্রুপগুলিতে ট্র্যাফিক সমানভাবে বণ্টিত হচ্ছে কিনা তা পরীক্ষা করার সময় এসেছে। এছাড়াও, আপনি পরীক্ষা করে দেখতে পারেন যে ট্র্যাফিক মিররিং কাজ করছে এবং ট্র্যাফিক কেন্দ্রীয় পরিচালিত ইনস্ট্যান্স গ্রুপে পাঠানো হচ্ছে কিনা।

ক্লাউড কনসোলে, নেভিগেশন মেনুতে, নেটওয়ার্ক সার্ভিসেস > লোড ব্যালেন্সিং-এ ক্লিক করুন। web-map-http লোড ব্যালেন্সারটি নির্বাচন করুন। মনিটরিং ট্যাবে যান এবং আপনি নিচের চার্টটি দেখতে পাবেন।

f4d6803db44be253.png

আপনি এই MIG-তে ট্র্যাফিক রিয়েল টাইমে বিভক্ত হতে দেখতে পাবেন। যেহেতু আপনি একটি ৫০/৫০ রাউন্ড রবিন স্প্লিট কনফিগার করেছেন, তাই ট্র্যাফিক সমানভাবে বিভক্ত হয়।

আপনার তৈরি করা ট্র্যাফিক মিররিং পলিসিটি কাজ করছে কিনা তা পরীক্ষা করতে, আপনাকে central-backend-service ম্যানেজড ইনস্ট্যান্স গ্রুপের ব্যবহার পরীক্ষা করতে হবে। এটি করার জন্য, compute, compute engine, instance groups-এ যান এবং us-central1-mig নির্বাচন করুন। এরপর, monitoring ট্যাবে যান।

cf25e44d511529e7.png

আপনি চার্টগুলিতে দেখতে পাবেন যা প্রমাণ করে যে ট্র্যাফিক এই পরিচালিত ইনস্ট্যান্স গ্রুপে প্রতিফলিত হয়েছে।

অবরোধ বন্ধ করুন

এখন যেহেতু আপনি প্রমাণ করেছেন যে উন্নত ট্র্যাফিক বিভাজন কাজ করছে, তাই অবরোধটি বন্ধ করার সময় এসেছে। এটি করার জন্য, siege-vm- এর SSH টার্মিনালে ফিরে যান এবং চলমান অবরোধটি বন্ধ করতে CTRL+C চাপুন।

পাঠানো হচ্ছে এমন প্রতিক্রিয়া হেডার যাচাই করুন

পরিষ্কার করার আগে আপনি দ্রুত যাচাই করে নিতে পারেন যে http লোড ব্যালেন্সার দ্বারা যথাযথ রেসপন্স হেডার পাঠানো হচ্ছে কিনা। আপনি এটিকে `contents` ভ্যালু সহ `test` হেডারটি পাঠানোর জন্য কনফিগার করেছিলেন। ক্লাউড শেল থেকে `curl` কমান্ডটি চালালে প্রত্যাশিত রেসপন্স পাওয়া যাবে।

ক্লাউড শেল থেকে

curl -svo /dev/null http://lb-ipv4-2/roundrobbin

আউটপুট

*   Trying lb-ipv4-2..
* TCP_NODELAY set
* Connected to  lb-ipv4-2 ( lb-ipv4-2) port 80 (#0)
> GET /roundrobbin HTTP/1.1
> Host:  lb-ipv4-2
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< date: Wed, 10 Nov 2021 17:05:27 GMT
< server: envoy
< Content-Length: 273
< content-type: text/html; charset=iso-8859-1
< via: 1.1 google
< test: value
<
{ [273 bytes data]
* Connection #0 to host 34.149.2.26 left intact
* Closing connection 0

৭. ল্যাব পরিষ্কার করা

ল্যাব পরিবেশের কাজ শেষ হয়ে যাওয়ায়, এখন এটিকে ভেঙে ফেলার সময় হয়েছে। টেস্ট এনভায়রনমেন্টটি ডিলিট করতে অনুগ্রহ করে নিম্নলিখিত কমান্ডগুলো চালান।

ক্লাউড শেল থেকে

gcloud compute instances delete siege-vm --zone=us-east4-c

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 backend-services delete west-backend-service --global
gcloud compute backend-services delete central-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud compute instance-groups managed delete us-east1-mig --zone us-east1-b
gcloud compute instance-groups managed delete us-west1-mig --zone us-west1-a
gcloud compute instance-groups managed delete us-central1-mig --zone us-central1-a

gcloud compute instance-templates delete "us-east1-template" 
gcloud compute instance-templates delete "us-west1-template" 
gcloud compute instance-templates delete "us-central1-template" 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

৮. অভিনন্দন!

আপনি অ্যাডভান্সড ট্র্যাফিক ম্যানেজমেন্ট (এনভয়) সহ এক্সটার্নাল HTTPs LB কোডল্যাবটি সম্পন্ন করেছেন!

আমরা যা আলোচনা করেছি

  • কীভাবে একটি ম্যানেজড ইনস্ট্যান্স গ্রুপ এবং এর সাথে সম্পর্কিত ভিপিসি ও ফায়ারওয়াল নিয়মাবলী সেট আপ করবেন
  • নতুন লোড ব্যালান্সারের উন্নত ট্র্যাফিক ম্যানেজমেন্ট ফিচারগুলো কীভাবে ব্যবহার করবেন
  • উন্নত ট্র্যাফিক ব্যবস্থাপনা বৈশিষ্ট্যগুলো উদ্দেশ্য অনুযায়ী কাজ করছে কিনা, তা কীভাবে যাচাই করবেন।

পরবর্তী পদক্ষেপ

  • ইউআরএল রিরাইটিং, CORS হেডার যোগ করা এবং আরও অনেক কিছুর মতো অন্যান্য উন্নত রাউটিং বৈশিষ্ট্যগুলি ব্যবহার করে দেখুন ( লিঙ্ক )