অভ্যন্তরীণ TCP/UDP লোড ব্যালেন্সারের জন্য ক্লাউড ডিএনএস রাউটিং নীতি এবং স্বাস্থ্য পরীক্ষা ব্যবহার করে মাল্টি-রিজিয়ন ফেইলওভার

১. ভূমিকা

সর্বশেষ হালনাগাদ: ২০২২-০৯-২২

ডিএনএস রাউটিং পলিসি কী?

ক্লাউড ডিএনএস রাউটিং পলিসি ব্যবহারকারীদের ওয়েট, ভৌগোলিক অবস্থান বা হেলথ চেকের মতো নির্দিষ্ট মানদণ্ডের ওপর ভিত্তি করে ডিএনএস-ভিত্তিক ট্র্যাফিক স্টিয়ারিং কনফিগার করার সুযোগ দেয়।

ক্লাউড ডিএনএস নিম্নলিখিত রাউটিং নীতিগুলি সমর্থন করে:

  • ভারযুক্ত রাউন্ড রবিন রাউটিং নীতি
  • ভূ-অবস্থান রাউটিং নীতি
  • জিওফেন্সড রাউটিং নীতি
  • ফেইলওভার রাউটিং নীতি

এই ল্যাবে আপনি ফেইলওভার রাউটিং পলিসি কনফিগার ও পরীক্ষা করবেন।

ফেইলওভার রাউটিং নীতি

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

স্বাস্থ্য পরীক্ষা

ডিএনএস রাউটিং পলিসি নেটিভ ইন্টারনাল লোড ব্যালান্সার ইউনিফাইড হেলথ চেক (UHC)-এর উপর নির্ভর করবে। একটি ইন্টারনাল লোড ব্যালান্সারকে স্বাস্থ্যকর বলে মনে করা হয় যদি এর ২০% (বা তার বেশি) ব্যাকএন্ড স্বাস্থ্যকর থাকে। ইন্টারনাল TCP/UDP এবং ইন্টারনাল HTTP(S) লোড ব্যালান্সারের জন্য হেলথ চেক ভিন্ন ভিন্ন তথ্য প্রদান করে। একটি ইন্টারনাল HTTP(S) লোড ব্যালান্সারের জন্য, UHC সমস্ত এনভয় প্রক্সির স্বাস্থ্যগত অবস্থা প্রদান করে, কিন্তু একটি ইন্টারনাল TCP/UDP লোড ব্যালান্সারের জন্য, ক্লাউড ডিএনএস প্রতিটি ব্যাকএন্ড ইনস্ট্যান্স থেকে সরাসরি স্বাস্থ্য সংকেত পায়। হেলথ চেকের বিস্তারিত বিবরণ এখানে পাওয়া যাবে।

আপনি যা তৈরি করবেন

এই কোডল্যাবে, আপনি দুটি অঞ্চলে চলমান একটি ওয়েবসাইট তৈরি করবেন এবং এর সাথে একটি ফেইলওভার ডিএনএস রাউটিং পলিসি যুক্ত করবেন। সেটআপটিতে থাকবে:

সক্রিয় সম্পদ -

  • অঞ্চল_১-এ L4 অভ্যন্তরীণ লোড ব্যালেন্সার
  • REGION_1-এ অ্যাপাচি ওয়েব সার্ভার চালিত একটি ভিএম

ব্যাকআপ রিসোর্স -

  • অঞ্চল_২-এ L4 অভ্যন্তরীণ লোড ব্যালেন্সার
  • REGION_2-এ অ্যাপাচি ওয়েব সার্ভার চালিত একটি ভিএম

বিন্যাসটি নিচে দেখানো হলো -

d0a91d3d3698f544.png

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

  • কীভাবে একটি ফেইলওভার রাউটিং পলিসি তৈরি করবেন
  • ডিএনএস ফেইলওভার ট্রিগার করুন
  • ব্যাকআপ সেটে কীভাবে অল্প অল্প করে ট্র্যাফিক পাঠানো যায়

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

  • DNS সম্পর্কে প্রাথমিক জ্ঞান
  • গুগল কম্পিউট ইঞ্জিন সম্পর্কে প্রাথমিক জ্ঞান
  • L4 ইন্টারনাল লোড ব্যালেন্সার সম্পর্কে প্রাথমিক জ্ঞান

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

৩. গুগল ক্লাউড এসডিকে সংস্করণ

এই প্রতিবেদন লেখার সময়, 401.0.0 হলো গুগল ক্লাউড এসডিকে-র সর্বশেষ সংস্করণ। এই ল্যাবের সমস্ত কমান্ড গুগল ক্লাউড এসডিকে-র সর্বশেষ সংস্করণ ব্যবহার করে পরীক্ষা করা হয়েছে। সামনে এগোনোর আগে, অনুগ্রহ করে নিশ্চিত হয়ে নিন যে ক্লাউড শেল এসডিকে-র সর্বশেষ সংস্করণ ব্যবহার করছে।

এসডিকে সংস্করণ পরীক্ষা করা হচ্ছে

SDK ভার্সন চেক করতে gcloud version কমান্ডটি ব্যবহার করুন। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালান।

আদেশ

gcloud version | grep "Google Cloud SDK"

আউটপুট উদাহরণ

Google Cloud SDK 401.0.0

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

  1. যদি SDK ভার্সন 401.0.0 বা তার বেশি হয়, তাহলে পরবর্তী বিভাগে চলে যান।
  2. যদি SDK ভার্সন 401.0.0 এর চেয়ে কম হয়, তাহলে SDK আপডেট করার জন্য নিচে দেওয়া কমান্ডটি চালান।

ঐচ্ছিক কমান্ড

sudo apt-get update && sudo apt-get install google-cloud-sdk

৪. শুরু করার আগে

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

প্রজেক্ট আইডি সেট আপ করুন

ক্লাউড শেলের ভিতরে, আপনার প্রজেক্ট আইডি সেট করা আছে কিনা তা নিশ্চিত করুন। যদি আপনার ক্লাউড শেল প্রম্পটটি নীচের আউটপুটের মতো দেখায় এবং আপনি প্রজেক্ট আইডি পরিবর্তন করার পরিকল্পনা না করেন, তাহলে আপনি পরবর্তী ধাপে (এনভায়রনমেন্ট ভেরিয়েবল সেট করুন) যেতে পারেন।

USER@cloudshell:~ (PROJECT_ID)$

আপনি যদি এখনও প্রজেক্ট আইডি পরিবর্তন করতে চান, তাহলে নিচে দেওয়া কমান্ডটি ব্যবহার করুন, ক্লাউড শেল প্রম্পট (PROJECT_ID) থেকে (YOUR-PROJECT-ID) তে পরিবর্তিত হবে।

ঐচ্ছিক কমান্ড

gcloud config set project [YOUR-PROJECT-ID]

আউটপুট উদাহরণ

Updated property [core/project].
USER@cloudshell:~ (YOUR-PROJECT-ID)$

পরিবেশ ভেরিয়েবল সেট করুন

পরিবেশ ভেরিয়েবল সেট করুন

আমরা এনভায়রনমেন্ট ভেরিয়েবল সেট করার জন্য export কমান্ড ব্যবহার করব। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালান।

কমান্ড

export REGION_1=us-west1
export REGION_1_ZONE=us-west1-a
export REGION_2=us-east4
export REGION_2_ZONE=us-east4-a

যাচাই করুন

এখন যেহেতু এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করা হয়ে গেছে, চলুন echo কমান্ড ব্যবহার করে তা যাচাই করে দেখি। প্রতিটি কমান্ডের আউটপুট সেই মানটিই হওয়া উচিত যা আমরা উপরে export কমান্ড ব্যবহার করে কনফিগার করেছি। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালান।

কমান্ড

echo $REGION_1
echo $REGION_1_ZONE
echo $REGION_2
echo $REGION_2_ZONE

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

Compute এবং DNS API সক্রিয় করতে gcloud services enable কমান্ডটি ব্যবহার করুন। Cloud Shell-এ নিম্নলিখিত কমান্ডগুলি চালান।

Compute API সক্রিয় করুন

আদেশ

gcloud services enable compute.googleapis.com

DNS API সক্রিয় করুন

আদেশ

gcloud services enable dns.googleapis.com

যাচাই করুন

এখন যেহেতু সার্ভিসগুলো চালু করা হয়েছে, চলুন gcloud services list কমান্ড ব্যবহার করে চালু থাকা সমস্ত API-এর তালিকা দেখে যাচাই করে নিই।

আদেশ

gcloud services list | grep -E 'compute|dns'

আউটপুট উদাহরণ

NAME: compute.googleapis.com
NAME: dns.googleapis.com

৫. ভিপিসি নেটওয়ার্ক, সাবনেট এবং ফায়ারওয়াল নিয়ম তৈরি করুন

এই অংশে আমরা ভিপিসি নেটওয়ার্ক, দুটি সাবনেট (প্রতিটি অঞ্চলে একটি করে) এবং প্রয়োজনীয় ফায়ারওয়াল নিয়মাবলী তৈরি করব।

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

VPC নেটওয়ার্ক তৈরি করতে gcloud compute networks create কমান্ডটি ব্যবহার করুন। আমরা সাবনেট মোডটি কাস্টম হিসেবে সেট করছি, কারণ পরবর্তী ধাপে আমরা আমাদের নিজস্ব সাবনেট তৈরি করব। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালান।

আদেশ

gcloud compute networks create my-vpc --subnet-mode custom

সাবনেট তৈরি করুন

REGION_1 এবং REGION_2-তে দুটি সাবনেট তৈরি করতে gcloud compute networks subnets create কমান্ডটি ব্যবহার করুন। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলি চালান।

অঞ্চল_১ সাবনেট

আদেশ

gcloud compute networks subnets create ${REGION_1}-subnet \
--network my-vpc \
--range 10.1.0.0/24 \
--region $REGION_1

অঞ্চল_২ সাবনেট

আদেশ

gcloud compute networks subnets create ${REGION_2}-subnet \
--network my-vpc \
--range 10.2.0.0/24 \
--region $REGION_2

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

আপনাকে VPC সাবনেটগুলো এবং লোড ব্যালেন্সার হেলথ চেক আইপি রেঞ্জগুলো থেকে পোর্ট ৮০-তে ট্র্যাফিকের অনুমতি দিতে হবে।

এর পাশাপাশি, ক্লায়েন্ট ভিএমগুলোতে SSH ট্র্যাফিক অনুমোদনের জন্য আপনাকে ফায়ারওয়াল নিয়মও তৈরি করতে হবে।

ফায়ারওয়াল নিয়ম তৈরি করতে gcloud compute firewall-rules create কমান্ডটি ব্যবহার করুন। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলি চালান।

পোর্ট ৮০-তে ট্র্যাফিকের অনুমতি দিন

আদেশ

gcloud compute firewall-rules create allow-http-lb-hc \
--allow tcp:80 --network my-vpc \
--source-ranges 10.1.0.0/24,10.2.0.0/24,35.191.0.0/16,130.211.0.0/22 \
--target-tags=allow-http

ক্লায়েন্ট ভিএম-এ SSH ট্র্যাফিকের অনুমতি দিন

আদেশ

gcloud compute firewall-rules create allow-ssh \
--allow tcp:22 --network my-vpc \
--source-ranges 0.0.0.0/0 \
--target-tags=allow-ssh

৬. ক্লাউড NAT তৈরি করুন

প্রাইভেট ভিএমগুলো যাতে ইন্টারনেট থেকে প্যাকেজ ডাউনলোড ও ইনস্টল করতে পারে, তার জন্য আপনার উভয় অঞ্চলে ক্লাউড ন্যাট গেটওয়ে প্রয়োজন।

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

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

ক্লাউড রাউটার তৈরি করুন

us-west1 এবং us-east4 অঞ্চলে ক্লাউড রাউটার তৈরি করতে gcloud compute routers create কমান্ডটি ব্যবহার করুন। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলি চালান।

অঞ্চল_১ ক্লাউড রাউটার

কমান্ড

gcloud compute routers create "${REGION_1}-cloudrouter" \
--region $REGION_1 --network=my-vpc --asn=65501

অঞ্চল_২ ক্লাউড রাউটার

কমান্ড

gcloud compute routers create "${REGION_2}-cloudrouter" \
--region $REGION_2 --network=my-vpc --asn=65501

NAT গেটওয়ে তৈরি করুন

us-west1 এবং us-east4 অঞ্চলে NAT গেটওয়ে তৈরি করতে gcloud compute routers nat create কমান্ডটি ব্যবহার করুন। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলি চালান।

অঞ্চল_১ NAT গেটওয়ে

কমান্ড

gcloud compute routers nats create "${REGION_1}-nat-gw" \
--router="${REGION_1}-cloudrouter" \
--router-region=$REGION_1 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

অঞ্চল_২ NAT গেটওয়ে

কমান্ড

gcloud compute routers nats create "${REGION_2}-nat-gw" \
--router="${REGION_2}-cloudrouter" \
--router-region=$REGION_2 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

৭. কম্পিউট ইঞ্জিন ভিএম তৈরি করুন

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

ওয়েব সার্ভার ভিএম তৈরি করুন

ওয়েব সার্ভারগুলো তৈরি করতে gcloud compute instances create কমান্ডটি ব্যবহার করুন। আমাদের দুটি ওয়েব সার্ভার তৈরি করতে হবে, একটি REGION_1-এ এবং অন্যটি REGION_2-এ। আমরা ওয়েব সার্ভারগুলোতে অ্যাপাচি (Apache) ইনস্টল ও কনফিগার করার জন্য স্টার্টআপ স্ক্রিপ্ট ব্যবহার করছি।

অঞ্চল_১ ওয়েব সার্ভার

ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।

আদেশ

gcloud compute instances create "${REGION_1}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-http \
--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'

অঞ্চল_২ ওয়েব সার্ভার

ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।

আদেশ

gcloud compute instances create "${REGION_2}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_2_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_2}-subnet,no-address \
--tags=allow-http \
--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'

অব্যবস্থাপিত ইনস্ট্যান্স গ্রুপ তৈরি করুন

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

অব্যবস্থাপিত ইনস্ট্যান্স গ্রুপগুলি তৈরি করুন

gcloud compute instance-groups unmanaged create কমান্ডটি ব্যবহার করে `us-west1` ওয়েব সার্ভারের জন্য এবং `us-east4` ওয়েব সার্ভারের জন্য দুটি আনম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করুন।

অঞ্চল_১ ইনস্ট্যান্স গ্রুপ

কমান্ড

gcloud compute instance-groups unmanaged create \
"${REGION_1}-instance-group" --zone=$REGION_1_ZONE

অঞ্চল_২ ইনস্ট্যান্স গ্রুপ

কমান্ড

gcloud compute instance-groups unmanaged create \
"${REGION_2}-instance-group" --zone=$REGION_2_ZONE

ইনস্ট্যান্স গ্রুপে ভিএম যোগ করুন

আমরা এইমাত্র যে ইনস্ট্যান্স গ্রুপগুলো তৈরি করেছি, সেগুলোতে ইনস্ট্যান্সগুলো যোগ করতে gcloud compute instance-groups unmanaged add-instances কমান্ডটি ব্যবহার করুন। REGION_1 ওয়েব সার্ভারটিকে REGION_1 ইনস্ট্যান্স গ্রুপে এবং REGION_2 ওয়েব সার্ভারটিকে REGION_2 ইনস্ট্যান্স গ্রুপে যোগ করুন।

অঞ্চল_১ ইনস্ট্যান্স গ্রুপ

কমান্ড

gcloud compute instance-groups unmanaged add-instances \
"${REGION_1}-instance-group" --instances $REGION_1-instance \
--zone=$REGION_1_ZONE

অঞ্চল_২ ইনস্ট্যান্স গ্রুপ

কমান্ড

gcloud compute instance-groups unmanaged add-instances \
"${REGION_2}-instance-group" --instances $REGION_2-instance \
--zone=$REGION_2_ZONE

একটি ক্লায়েন্ট ভিএম তৈরি করুন

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

আদেশ

gcloud compute instances create client-instance --image-family=debian-11 \
--image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-ssh \
--metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install dnsutils -y'

৮. L4 অভ্যন্তরীণ লোড ব্যালেন্সার তৈরি করুন

L4 ILB তৈরি করার জন্য, আমাদের একটি হেলথ চেক, একটি ব্যাকএন্ড সার্ভিস এবং একটি ফরওয়ার্ডিং রুল তৈরি করতে হবে।

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

হেলথ চেক তৈরি করতে gcloud compute health-checks create কমান্ডটি ব্যবহার করুন। আমরা একটি বেসিক http হেলথ চেক তৈরি করছি এবং টার্গেট পোর্ট হলো পোর্ট ৮০। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালান।

আদেশ

gcloud compute health-checks create http http-hc --port 80

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

ব্যাকএন্ড সার্ভিস তৈরি করতে gcloud compute backend-services create কমান্ডটি ব্যবহার করুন। ব্যাকএন্ড সার্ভিসগুলো তৈরি হয়ে গেলে, আমরা gcloud compute backend-services add-backend কমান্ডটি ব্যবহার করে আনম্যানেজড ইনস্ট্যান্স গ্রুপগুলোকে ব্যাকএন্ড সার্ভিসগুলোতে যুক্ত করব। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালান।

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

কমান্ড

gcloud compute backend-services create $REGION_1-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_1
gcloud compute backend-services create $REGION_2-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_2

ব্যাকএন্ড যোগ করুন

আদেশ

gcloud compute backend-services add-backend $REGION_1-backend-service \
--instance-group=$REGION_1-instance-group \
--region=$REGION_1 \
--instance-group-zone=$REGION_1_ZONE
gcloud compute backend-services add-backend $REGION_2-backend-service \
--instance-group=$REGION_2-instance-group \
--region=$REGION_2 \
--instance-group-zone=$REGION_2_ZONE

ফরওয়ার্ডিং নিয়ম তৈরি করুন

উভয় অঞ্চলে ফরওয়ার্ডিং নিয়ম তৈরি করতে gcloud compute forwarding-rules create কমান্ডটি ব্যবহার করুন। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলি চালান।

অঞ্চল_১ ফরওয়ার্ডিং নিয়ম

কমান্ড

gcloud compute forwarding-rules create $REGION_1-ilb \
    --region=$REGION_1 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_1-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_1-backend-service \
    --backend-service-region=$REGION_1 \
    --allow-global-access

অঞ্চল_২ ফরওয়ার্ডিং নিয়ম

gcloud compute forwarding-rules create $REGION_2-ilb \
    --region=$REGION_2 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_2-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_2-backend-service \
    --backend-service-region=$REGION_2 \
    --allow-global-access

৯. ডিএনএস কনফিগার করুন

এই অংশে, আমরা ফেইলওভার রাউটিং পলিসি সহ একটি প্রাইভেট জোন এবং একটি ডিএনএস রেকর্ড সেট তৈরি করব।

একটি ব্যক্তিগত ডিএনএস জোন তৈরি করুন

example.com-এর জন্য একটি প্রাইভেট জোন তৈরি করতে gcloud dns managed-zones create কমান্ডটি ব্যবহার করুন। আমরা এই জোনটি ফেইলওভার রাউটিং পলিসি সহ একটি রিসোর্স রেকর্ড সেট তৈরি করতে ব্যবহার করব। ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।

কমান্ড

gcloud dns managed-zones create example-com \
--dns-name example.com. --description="My private zone" \
--visibility=private --networks my-vpc 

ফেইলওভার রাউটিং পলিসি সহ একটি ডিএনএস রেকর্ড তৈরি করুন

ফেলওভার রাউটিং পলিসি সহ একটি ডিএনএস রেকর্ড তৈরি করতে gcloud dns record-sets create কমান্ডটি ব্যবহার করুন। প্রাথমিক টার্গেট হলো REGION_1-এর লোড ব্যালেন্সার। ক্লাউড ডিএনএস শুধুমাত্র জিও-ভিত্তিক ব্যাকআপ টার্গেট সমর্থন করে, ব্যাকআপ সেটটি হলো একটি জিওলোকেশন পলিসি যেখানে REGION_1 এবং REGION_2 উভয়ের জন্যই টার্গেট হিসেবে REGION_2 লোড ব্যালেন্সার রয়েছে। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালান।

আদেশ

gcloud dns record-sets create failover.example.com --ttl 5 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com \
--enable-health-checking

আউটপুট উদাহরণ

NAME: failover.example.com.
TYPE: A
TTL: 5
DATA: Primary: "10.1.0.4, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-west1, regionalL4ilb" Backup: us-west1: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb";us-east4: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb"

১০. ডিএনএস রেজোলিউশন পরীক্ষা করুন

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

আদেশ

gcloud compute forwarding-rules list --filter="name:($REGION_1-ilb $REGION_2-ilb)"

আউটপুট উদাহরণ

এই উদাহরণে, us-west1-ilb আইপি অ্যাড্রেস হলো 10.1.0.4 এবং us-east4-ilb আইপি অ্যাড্রেস হলো 10.2.0.3

NAME: us-west1-ilb
REGION: us-west1
IP_ADDRESS: 10.1.0.4
IP_PROTOCOL: TCP
TARGET: us-west1/backendServices/us-west1-backend-service

NAME: us-east4-ilb
REGION: us-east4
IP_ADDRESS: 10.2.0.3
IP_PROTOCOL: TCP
TARGET: us-east4/backendServices/us-east4-backend-service

এখন আমরা ক্লায়েন্ট-ইনস্ট্যান্সে লগ ইন করে ডিএনএস রেজোলিউশন পরীক্ষা করব। ওয়েব কনসোলে, "Compute Engine | VM Instances"-এ যান।

5c824940bf414501.png

কনসোল থেকে ক্লায়েন্ট-ইনস্ট্যান্সে লগইন করতে SSH বাটনে ক্লিক করুন।

b916eb32c60a4156.png

এখন যেহেতু আমরা ক্লায়েন্ট ভিএম-এ আছি, dig কমান্ড ব্যবহার করে ` failover.example.com ডোমেইন নামটি রিজলভ করুন।

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

আদেশ

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

যেহেতু DNS রেকর্ডে TTL ৫ সেকেন্ডে সেট করা আছে, তাই একটি ৬ সেকেন্ডের স্লিপ টাইমার যোগ করা হয়েছে। এই স্লিপ টাইমারটি নিশ্চিত করবে যে আপনি প্রতিটি DNS অনুরোধের জন্য একটি আনক্যাশড DNS প্রতিক্রিয়া পাবেন। এই কমান্ডটি কার্যকর হতে প্রায় এক মিনিট সময় লাগবে।

আউটপুটে আপনি রিসোর্স রেকর্ডের প্রাইমারি সেটে লোড ব্যালান্সারের আইপি অ্যাড্রেসটি দেখতে পাবেন। আমাদের সেটআপে এটি হবে us-west1 রিজিয়নের লোড ব্যালান্সারের আইপি।

১১. ফেইলওভার পরীক্ষা করুন

আমরা REGION_1 VM থেকে নেটওয়ার্ক ট্যাগটি সরিয়ে দিয়ে একটি ফেইলওভার সিমুলেট করব। এর ফলে পোর্ট ৮০-তে অ্যাক্সেস ব্লক হয়ে যাবে এবং ফলস্বরূপ, হেলথ চেকগুলো ফেইল করতে শুরু করবে।

নেটওয়ার্ক ট্যাগটি সরান

ভিএম থেকে নেটওয়ার্ক ট্যাগটি সরাতে gcloud compute instances remove-tags কমান্ডটি ব্যবহার করুন। ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।

আদেশ

gcloud compute instances remove-tags $REGION_1-instance \
--zone=$REGION_1_ZONE --tags=allow-http

স্বাস্থ্য পরীক্ষাটি ১০ সেকেন্ডের মধ্যে ব্যর্থ হবে। ডিএনএস রেজোলিউশন পরীক্ষাটি আবার চালান।

ডিএনএস রেজোলিউশন

ক্লায়েন্ট-ইনস্ট্যান্স থেকে নিম্নলিখিত কমান্ডটি চালান।

আদেশ

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

আউটপুটে আপনি রিসোর্স রেকর্ডের ব্যাকআপ সেটে লোড ব্যালান্সারের আইপি অ্যাড্রেসটি দেখতে পাবেন। আমাদের সেটআপে এটি হবে us-east4 অঞ্চলের লোড ব্যালান্সারের আইপি।

১২. পরীক্ষামূলক ট্র্যাফিক ধীরে ধীরে বাড়ছে

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

এটি পরীক্ষা করার জন্য, চলুন REGION_1 ওয়েব সার্ভারে নেটওয়ার্ক ট্যাগটি আবার যোগ করি।

নেটওয়ার্ক ট্যাগ যোগ করুন

প্রাইমারি রিজিয়ন ভিএম-এ http ট্র্যাফিকের অনুমতি দেওয়ার জন্য ওয়েব সার্ভার ভিএম-এ ট্যাগটি পুনরায় যুক্ত করুন। ক্লাউড শেল-এ নিম্নলিখিত কমান্ডটি চালান।

আদেশ

gcloud compute instances add-tags $REGION_1-instance \
--zone $REGION_1_ZONE --tags allow-http

স্বাস্থ্য পরীক্ষাগুলো ১০ সেকেন্ডে সম্পন্ন হবে।

যাচাই করুন যে ডিএনএস রেজোলিউশন প্রাইমারি লোড ব্যালান্সারকে নির্দেশ করছে। আমাদের সেটআপে এটি হবে us-west1 অঞ্চলের লোড ব্যালান্সারের আইপি অ্যাড্রেস।

ক্লায়েন্ট-ইনস্ট্যান্স থেকে নিম্নলিখিত কমান্ডটি চালান।

আদেশ

dig +short failover.example.com

ডিএনএস রেকর্ড আপডেট করুন

এখন, আমরা failover.example.com এর DNS রেকর্ডটি এমনভাবে পরিবর্তন করব যাতে প্রাইমারি সেট সুস্থ থাকলেও ৩০% ট্র্যাফিক ব্যাকআপ সেটে চলে যায়। ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।

আদেশ

gcloud dns record-sets update failover.example.com --ttl 30 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com --enable-health-checking \
--backup-data-trickle-ratio=0.3

ডিএনএস রেজোলিউশন

ক্লায়েন্ট ভিএম থেকে নিম্নলিখিত কমান্ডটি চালান। আপনি লক্ষ্য করবেন যে, failover.example.com ডিএনএস রেকর্ডটি প্রায় ৭০% ক্ষেত্রে প্রাইমারি লোড ব্যালেন্সার আইপি-তে এবং প্রায় ৩০% ক্ষেত্রে ব্যাকআপ লোড ব্যালেন্সার আইপি-তে রিজলভ হবে।

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

১৩. পরিষ্কার করার পদক্ষেপ

এই ল্যাবে ব্যবহৃত রিসোর্সগুলো পরিষ্কার করার জন্য, ক্লাউডশেল থেকে নিম্নলিখিত কমান্ডগুলো চালান।

gcloud dns record-sets delete failover.example.com --type=A \
--zone=example-com --quiet

gcloud dns managed-zones delete example-com --quiet

gcloud compute forwarding-rules delete $REGION_1-ilb \
--region=$REGION_1 --quiet

gcloud compute forwarding-rules delete $REGION_2-ilb \
--region=$REGION_2 --quiet

gcloud compute backend-services delete $REGION_1-backend-service \
--region=$REGION_1 --quiet

gcloud compute backend-services delete $REGION_2-backend-service \
--region=$REGION_2 --quiet

gcloud compute health-checks delete http-hc --quiet

gcloud compute instances delete client-instance --zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_1-instance-group \
--zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_2-instance-group \
--zone=$REGION_2_ZONE --quiet

gcloud compute instances delete $REGION_1-instance \
--zone=$REGION_1_ZONE --quiet

gcloud compute instances delete $REGION_2-instance \
--zone=$REGION_2_ZONE --quiet

gcloud compute routers nats delete $REGION_1-nat-gw \
--router=$REGION_1-cloudrouter --region=$REGION_1 --quiet

gcloud compute routers nats delete $REGION_2-nat-gw \
--router=$REGION_2-cloudrouter --region=$REGION_2 --quiet

gcloud compute routers delete $REGION_1-cloudrouter \
--region=$REGION_1 --quiet

gcloud compute routers delete $REGION_2-cloudrouter \
--region=$REGION_2 --quiet

gcloud compute firewall-rules delete allow-ssh allow-http-lb-hc --quiet

gcloud compute networks subnets delete $REGION_1-subnet \
--region=$REGION_1 --quiet

gcloud compute networks subnets delete $REGION_2-subnet \
--region=$REGION_2 --quiet

gcloud compute networks delete my-vpc --quiet

১৪. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে ক্লাউড ডিএনএস ফেইলওভার রাউটিং পলিসি স্থাপন ও পরীক্ষা করেছেন।

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

  • ক্লাউড ডিএনএস ফেইলওভার রাউটিং পলিসি কীভাবে কনফিগার করবেন
  • ডিএনএস ফেইলওভার পরীক্ষা করুন
  • ব্যাকআপ সেটে কীভাবে ধীরে ধীরে ট্র্যাফিক পাঠানো যায়

এরপর কী?

  • অ্যাক্টিভ এবং ব্যাকআপ সেটের জন্য একাধিক আইপি সেট আপ করার চেষ্টা করুন।
  • আপনার আনম্যানেজড ইনস্ট্যান্স গ্রুপগুলিতে একাধিক ব্যাকএন্ড ভিএম যোগ করার চেষ্টা করুন।
  • ব্যাকআপ সেটের জিওলোকেশন পলিসির জন্য বিভিন্ন অঞ্চলে একাধিক লোড ব্যালেন্সার সেট আপ করার চেষ্টা করুন।

আরও জানুন

https://cloud.google.com/dns/docs/zones/manage-routing-policies