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

1. ভূমিকা

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

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

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

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

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

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

dd8bd5e8e1341878.png

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না এবং আপনি যে কোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রজেক্ট জুড়ে প্রোজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়), তাই আপনি যদি এটি পছন্দ না করেন তবে অন্য একটি এলোমেলো তৈরি করুন, অথবা, আপনি নিজের চেষ্টা করে দেখতে পারেন এটি উপলব্ধ কিনা। তারপর প্রকল্প তৈরি হওয়ার পরে এটি "হিমায়িত" হয়।
  • একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন, কোডল্যাবের শেষে পাওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

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

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

আপনি শুরু করার আগে

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

gcloud কনফিগার তালিকা প্রকল্প

gcloud কনফিগারেশন সেট প্রকল্প [আপনার-প্রকল্প-নাম]

PROJECT_ID=[আপনার-প্রকল্প-নাম]

প্রতিধ্বনি $PROJECT_ID

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

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

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

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

একটি 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 তৈরি করার পরে, এখন আপনি একটি ফায়ারওয়াল নিয়ম তৈরি করবেন। ফায়ারওয়াল নিয়মটি সকল আইপিকে http ট্র্যাফিকের জন্য পোর্ট 80-এ পরীক্ষার অ্যাপ্লিকেশনের ওয়েবসাইটের বাহ্যিক আইপি অ্যাক্সেস করার অনুমতি দেওয়ার জন্য ব্যবহার করা হবে।

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

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

4. ম্যানেজড ইনস্ট্যান্স গ্রুপ সেট আপ করুন

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

ম্যানেজড ইনস্ট্যান্স গ্রুপগুলি আঞ্চলিক বা আঞ্চলিক হতে পারে। এই ল্যাব অনুশীলনের জন্য আমরা তিনটি আঞ্চলিক ম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করব, একটি 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-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'

আউটপুট

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-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'

আউটপুট

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-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'

আউটপুট

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 দৃষ্টান্তগুলিতে নেভিগেট করুন। নিশ্চিত করুন যে আপনার নতুন দৃষ্টান্তগুলি (যেমন us-east1-mig-xxx) তাদের উদাহরণ গোষ্ঠীর সংজ্ঞা অনুসারে তৈরি করা হয়েছে।

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

অথবা, আপনার ব্রাউজারে, http://<IP_Address>-এ নেভিগেট করুন

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

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

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

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

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 যোগ করুন

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

ব্যাকএন্ড পরিষেবাতে East 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

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

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

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

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

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

আপনার মেশিনে একটি .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

আপনার মেশিন থেকে নথি আমদানি করে URL মানচিত্র তৈরি করুন। মনে রাখবেন আপনি .yaml ফাইলটি কোথায় সংরক্ষণ করবেন তার উপর নির্ভর করে উৎস পথটি ভিন্ন হবে।

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

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

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

লোড ব্যালেন্সার তৈরির চূড়ান্ত ধাপ হল ফ্রন্টএন্ড তৈরি করা। এটি আপনার তৈরি করা লোড ব্যালেন্সার URL ম্যাপে আপনার আগে সংরক্ষিত IP ঠিকানাটিকে ম্যাপ করবে।

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

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

পরবর্তীতে আপনাকে একটি বিশ্বব্যাপী ফরওয়ার্ডিং নিয়ম তৈরি করতে হবে যা HTTP প্রক্সিতে আগে সংরক্ষিত IP ঠিকানাকে ম্যাপ করবে।

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

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

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

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

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

VM-এ SSH করার জন্য যে আমরা আপনার কাছ থেকে ট্রাফিক তৈরি করব প্রথমে একটি ফায়ারওয়াল নিয়ম তৈরি করতে হবে যা VM-এ 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

সিজ-ভিএম তৈরি করুন

এখন আপনি সিজ-ভিএম তৈরি করবেন যা আপনি লোড তৈরি করতে ব্যবহার করবেন

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

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

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

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

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

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...

লোড বিতরণ পরীক্ষা করুন

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

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

f4d6803db44be253.png

আপনি এই এমআইজিতে রিয়েল টাইমে ট্রাফিক বিভাজন দেখতে সক্ষম হবেন। আপনি একটি 50/50 রাউন্ড রবিন স্প্লিট কনফিগার করার পর থেকে ট্রাফিক সমানভাবে বিভক্ত হয়েছে৷

আপনার তৈরি করা ট্রাফিক মিররিং নীতিটি কাজ করছে কিনা তা পরীক্ষা করার জন্য আপনাকে সেন্ট্রাল-ব্যাকেন্ড-পরিষেবা পরিচালিত উদাহরণ গ্রুপের ব্যবহার পরীক্ষা করতে হবে। এটি করার জন্য, কম্পিউট, কম্পিউট ইঞ্জিন, ইনস্ট্যান্স গ্রুপে নেভিগেট করুন এবং us-central1-mig নির্বাচন করুন। এরপরে, পর্যবেক্ষণ ট্যাবে নেভিগেট করুন।

cf25e44d511529e7.png

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

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

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

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

আপনি পরিষ্কার করার আগে আপনি দ্রুত যাচাই করতে পারেন যে উপযুক্ত প্রতিক্রিয়া শিরোনামটি HTTP লোড ব্যালেন্সার দ্বারা পাঠানো হচ্ছে। আপনি বিষয়বস্তু মান সহ হেডার পরীক্ষা পাঠাতে এটি কনফিগার করেছেন। ক্লাউড শেল থেকে কার্ল কমান্ড চালানো প্রত্যাশিত প্রতিক্রিয়া দেবে।

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

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

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

এখন যেহেতু আমরা ল্যাব পরিবেশের সাথে শেষ করেছি, এটিকে ভেঙে ফেলার সময় এসেছে। পরীক্ষা পরিবেশ মুছে ফেলার জন্য নিম্নলিখিত কমান্ড চালান.

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

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 

8. অভিনন্দন!

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

আমরা কভার করেছি কি

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

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

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