১. ভূমিকা
প্রাইভেট সার্ভিস কানেক্ট (PSC) নিরাপদে এবং ব্যক্তিগতভাবে পরিষেবা গ্রহণের প্রক্রিয়াকে সহজ করে। এই মডেলটি পরিষেবা গ্রহণকারীদেরকে বিভিন্ন প্রতিষ্ঠানের মধ্যে পরিষেবা প্রদানকারীদের সাথে ব্যক্তিগতভাবে সংযোগ স্থাপনের সুযোগ দিয়ে নেটওয়ার্ক আর্কিটেকচারকে ব্যাপকভাবে সরল করে তোলে এবং ভার্চুয়াল প্রাইভেট ক্লাউড পিয়ারিং-এর প্রয়োজনীয়তা দূর করে। চিত্র ১-এ VPC পিয়ারিং এবং PSC-এর বৈশিষ্ট্যগুলো দেখানো হয়েছে।
চিত্র ১। 
একজন পরিষেবা গ্রাহক হিসেবে, এটি আপনাকে পরিষেবাগুলিতে আপনার প্রাইভেট আইপি কীভাবে বরাদ্দ করবেন তা বেছে নেওয়ার সুবিধা দেয় এবং একই সাথে প্রডিউসার ভিপিসি-র জন্য সাবনেট রেঞ্জ পরিচালনার বোঝা দূর করে। এখন আপনি একটি সার্ভিস কানেক্ট ব্যবহার করে আপনার ভিপিসি থেকে নির্বাচিত ভার্চুয়াল আইপি সহজেই সেই পরিষেবাতে বরাদ্দ করতে পারেন।
এই কোডল্যাবে, আপনি একটি বিশদ প্রাইভেট সার্ভিস কানেক্ট আর্কিটেকচার তৈরি করবেন যা MongoDB অ্যাটলাসের সাথে PSC গ্লোবাল অ্যাক্সেসের ব্যবহার প্রদর্শন করে।
গ্লোবাল অ্যাক্সেস ক্লায়েন্টদের আঞ্চলিক সীমানা পেরিয়ে প্রাইভেট সার্ভিস কানেক্ট (PSC)-এর সাথে সংযোগ স্থাপন করতে দেয়। একাধিক অঞ্চলে হোস্ট করা ম্যানেজড সার্ভিসগুলোতে উচ্চ-প্রাপ্যতা (high-availability) তৈরি করার জন্য অথবা ক্লায়েন্টদের এমন কোনো পরিষেবা অ্যাক্সেস করার সুযোগ দেওয়ার জন্য এটি উপযোগী, যা তাদের নিজেদের অঞ্চলে অবস্থিত নয়।
২. বৈশ্বিক প্রবেশাধিকার সক্ষম করা
গ্লোবাল অ্যাক্সেস একটি ঐচ্ছিক বৈশিষ্ট্য যা কনজিউমার-সাইড ফরওয়ার্ডিং রুলে কনফিগার করা হয়। নিম্নলিখিত কমান্ডটি দেখায় এটি কীভাবে কনফিগার করা হয়:
gcloud beta compute forwarding-rules create psc-west \
--region=us-west1 \
--network=consumer-vpc \
--address=psc-west-address \
--target-service-attachment=projects/.../serviceAttachments/sa-west \
--allow-psc-global-access
-
--allow-psc-global-accessফ্ল্যাগটি একটি প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্টে গ্লোবাল অ্যাক্সেস সক্ষম করে। - গ্লোবাল অ্যাক্সেস ক্লায়েন্টকে প্রাইভেট সার্ভিস কানেক্ট ফরওয়ার্ডিং রুল থেকে ভিন্ন অঞ্চলে থাকার অনুমতি দেয়, কিন্তু ফরওয়ার্ডিং রুলটিকে অবশ্যই সেই সার্ভিস অ্যাটাচমেন্টের সাথে একই অঞ্চলে থাকতে হবে যার সাথে এটি সংযুক্ত।
- গ্লোবাল অ্যাক্সেস সক্রিয় করার জন্য প্রডিউসারের সার্ভিস অ্যাটাচমেন্টে কোনো কনফিগারেশনের প্রয়োজন নেই। এটি সম্পূর্ণরূপে কনজিউমার-সাইডের একটি অপশন।
বিদ্যমান এন্ডপয়েন্টগুলির জন্য গ্লোবাল অ্যাক্সেস যেকোনো সময় চালু বা বন্ধ করা যেতে পারে। একটি বিদ্যমান এন্ডপয়েন্টে গ্লোবাল অ্যাক্সেস সক্রিয় করার সময় সক্রিয় সংযোগগুলির জন্য কোনও ট্র্যাফিক বিঘ্ন ঘটে না। নিম্নলিখিত কমান্ডের মাধ্যমে একটি বিদ্যমান ফরওয়ার্ডিং-রুলে গ্লোবাল অ্যাক্সেস সক্রিয় করা হয়:
gcloud beta compute forwarding-rules update psc-west --allow-psc-global-access
বৈশ্বিক প্রবেশাধিকার অক্ষম করা
--no-allow-psc-global-access ফ্ল্যাগ ব্যবহার করে বিদ্যমান ফরওয়ার্ডিং নিয়মগুলিতেও গ্লোবাল অ্যাক্সেস নিষ্ক্রিয় করা যেতে পারে। মনে রাখবেন যে এই কমান্ডটি চালানোর পরে যেকোনো সক্রিয় আন্তঃআঞ্চলিক ট্র্যাফিক বন্ধ করে দেওয়া হবে।
gcloud beta compute forwarding-rules update psc-west --no-allow-psc-global-access
৩. আপনি যা তৈরি করবেন
- একটি মাল্টি-রিজিওন MongoDB অ্যাটলাস ক্লাস্টার (টপোলজি চিত্র ২-এ বর্ণিত) তৈরি করা হবে, যেখানে us-west1 অঞ্চলে একটি নোড এবং us-west2 অঞ্চলে দুটি নোড থাকবে।
- us-west1 এবং us-west2-তে অবস্থিত MongoDB ক্লাস্টারগুলো অ্যাক্সেস করার জন্য একটি কনজিউমার VPC এবং সংশ্লিষ্ট VM।
- us-west1 এবং us-west2 অঞ্চলে যথাক্রমে একটি VPC এবং দুটি সাবনেট, যেখানে প্রতিটি সাবনেটে কমপক্ষে ৬৪টি খালি আইপি অ্যাড্রেস থাকবে (সাবনেটগুলো /26 এবং তার নিচের ফরম্যাট দিয়ে তৈরি করুন)।
কনজিউমার ভিপিসি-র vm1-এ MongoDB ক্লায়েন্ট ইনস্টল করা হবে। যখন us-west1-এর প্রাইমারি নোডটি বিকল হয়ে যাবে, তখন ক্লায়েন্টটি us-west2-এর নতুন প্রাইমারি নোডের মাধ্যমে ডেটা রিড/রাইট করতে পারবে।
চিত্র ২। 
আপনি যা শিখবেন
- দুটি অঞ্চলে কীভাবে একটি VPC এবং সাবনেট তৈরি ও স্থাপন করবেন
- কীভাবে একটি মাল্টি-রিজিওন MongoDB অ্যাটলাস ক্লাস্টার স্থাপন করবেন
- কীভাবে একটি ব্যক্তিগত এন্ডপয়েন্ট তৈরি করবেন
- MongoDB-এর সাথে কীভাবে সংযোগ করবেন
- মাল্টিরিজিওন MongoDB ফেইলওভার কীভাবে সম্পাদন এবং যাচাই করবেন
আপনার যা যা লাগবে
- গুগল ক্লাউড প্রজেক্ট
- প্রতিটি অঞ্চলের জন্য একটি /26 সাবনেট সরবরাহ করুন।
- M10 বা তার চেয়ে উচ্চতর ক্লাস্টার টিয়ার সহ একটি MongoDB ক্লাস্টার তৈরি করার জন্য প্রজেক্ট ওনার অথবা অর্গানাইজেশন ওনারের MongoDB Atlas-এ অ্যাক্সেস থাকতে হবে। (PoV চালানোর জন্য বিনামূল্যে ক্রেডিট পেতে অনুগ্রহ করে GETATLAS ব্যবহার করুন)
৪. শুরু করার আগে
কোডল্যাব সমর্থন করার জন্য প্রকল্পটি আপডেট করুন।
এই কোডল্যাবটি ক্লাউড শেলে gcloud কনফিগারেশন বাস্তবায়নে সাহায্য করার জন্য $variables ব্যবহার করে।
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
৫. গ্রাহক সেটআপ
কনজিউমার ভিপিসি তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom
কনজিউমার সাবনেট তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks subnets create vm-subnet --project=$projectname --range=10.10.10.0/29 --network=consumer-vpc --region=us-west1
ক্লাউড শেলের ভিতরে, us-west1-এর জন্য কনজিউমার এন্ডপয়েন্ট তৈরি করুন:
gcloud compute networks subnets create psc-endpoint-us-west1 --project=$projectname --range=192.168.10.0/26 --network=consumer-vpc --region=us-west1
ক্লাউড শেলের ভিতরে, us-west2-এর জন্য কনজিউমার এন্ডপয়েন্ট তৈরি করুন:
gcloud compute networks subnets create psc-endpoint-us-west2 --project=$projectname --range=172.16.10.0/26 --network=consumer-vpc --region=us-west2
ক্লাউড রাউটার এবং NAT কনফিগারেশন
কোডল্যাবে সফটওয়্যার প্যাকেজ ইনস্টলেশনের জন্য ক্লাউড ন্যাট (Cloud NAT) ব্যবহার করা হয়, কারণ ভিএম ইনস্ট্যান্সগুলোর কোনো এক্সটার্নাল আইপি অ্যাড্রেস নেই।
ক্লাউড শেলের ভিতরে ক্লাউড রাউটারটি তৈরি করুন।
gcloud compute routers create consumer-cr --network consumer-vpc --region us-west1
ক্লাউড শেলের ভিতরে NAT গেটওয়ে তৈরি করুন।
gcloud compute routers nats create consumer-nat --router=consumer-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-west1
ইনস্ট্যান্স vm1 কনফিগারেশন
পরবর্তী অংশে, আপনি vm1 নামের Compute Engine ইনস্ট্যান্সটি তৈরি করবেন।
ক্লাউড শেলের ভিতরে, vm1 ইনস্ট্যান্সটি তৈরি করুন।
gcloud compute instances create vm1 \
--project=$projectname \
--zone=us-west1-a \
--machine-type=e2-micro \
--network-interface=subnet=vm-subnet,no-address \
--maintenance-policy=MIGRATE \
--provisioning-model=STANDARD \
--create-disk=auto-delete=yes,boot=yes,device-name=vm1,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20230213,mode=rw,size=10,type=projects/$projectname/zones/us-west1-a/diskTypes/pd-balanced
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump -y
sudo apt-get install dnsutils -y"
আপনার VM ইনস্ট্যান্সগুলিতে IAP-কে সংযোগ করার অনুমতি দিতে, এমন একটি ফায়ারওয়াল নিয়ম তৈরি করুন যা:
- এটি সেই সমস্ত VM ইনস্ট্যান্সের ক্ষেত্রে প্রযোজ্য, যেগুলোকে আপনি IAP ব্যবহার করে অ্যাক্সেসযোগ্য করতে চান।
- 35.235.240.0/20 আইপি রেঞ্জ থেকে ইনগ্রেস ট্র্যাফিকের অনুমতি দেয়। এই রেঞ্জে সেই সমস্ত আইপি অ্যাড্রেস রয়েছে যা IAP টিসিপি ফরওয়ার্ডিংয়ের জন্য ব্যবহার করে।
ক্লাউড শেলের ভিতরে IAP ফায়ারওয়াল নিয়মটি তৈরি করুন।
gcloud compute firewall-rules create ssh-iap-consumer-vpc \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
৬. মাল্টি-রিজিওন MongoDB অ্যাটলাস ক্লাস্টার তৈরি করুন
- PSC সেটআপ শুরু করার আগে আমাদের একটি অ্যাটলাস ক্লাস্টার তৈরি করতে হবে। আপনি নিচের দুটি উপায়ের যেকোনো একটি ব্যবহার করে MongoDB অ্যাটলাসে সাবস্ক্রাইব করতে পারেন:
- আপনার যদি একটি গুগল ক্লাউড অ্যাকাউন্ট থাকে, তবে গুগল ক্লাউড মার্কেটপ্লেসের মাধ্যমে তা করতে পারেন। আপনার সাবস্ক্রিপশন সেট আপ করার জন্য ডকুমেন্টেশন দেখুন।
- অ্যাটলাস নিবন্ধন পৃষ্ঠার মাধ্যমে।
- অ্যাটলাসে সাবস্ক্রাইব করার পর, নিচে দেখানো Build a Database বাটনে ক্লিক করুন।

- নতুন ক্লাস্টার তৈরি করুন → ডেডিকেটেড

- ক্লাউড প্রদানকারী ও অঞ্চল → গুগল ক্লাউড
- মাল্টি-ক্লাউড, মাল্টি-রিজিওন এবং ওয়ার্কলোড আইসোলেশন → নির্বাচিত (নীল টিক চিহ্ন)

- নির্বাচনযোগ্য নোড → us-west1 (১টি নোড), us-west2 (২টি নোড)

- ক্লাস্টার টিয়ার → M10, অন্যান্য সমস্ত সেটিংস ডিফল্ট রাখুন।

- ক্লাস্টারের নাম → psc-mongodb-uswest1-uswest2

- নির্বাচন করুন → ক্লাস্টার তৈরি করুন

- ডাটাবেস তৈরি করতে ৭-১০ মিনিট সময় লাগে।

স্থাপন করার পর ক্লাস্টারের দৃশ্য

৭. us-west1 এর জন্য ব্যক্তিগত এন্ডপয়েন্ট তৈরি
- আপনার অ্যাটলাস অ্যাকাউন্টে লগ-অন করুন এবং আপনার প্রজেক্টে যান।
যেকোনো ডেটাবেসে পঠন/লিখন অ্যাক্সেস দেওয়ার জন্য একটি নতুন ব্যবহারকারী তৈরি করুন।
সিকিউরিটি → ডেটাবেস অ্যাক্সেস থেকে নতুন ডেটাবেস ব্যবহারকারী যোগ করুন নির্বাচন করুন। নিচে একটি উদাহরণ দেওয়া হলো, ইউজারনেম এবং পাসওয়ার্ড কোডল্যাব অনুযায়ী কনফিগার করা হয়েছে। যেকোনো ডেটাবেসে রিড এবং রাইট করার জন্য বিল্ট-ইন রোল নির্বাচন করা নিশ্চিত করুন।

- সিকিউরিটি → নেটওয়ার্ক অ্যাক্সেস-এর অধীনে, আইপি অ্যাক্সেস লিস্টে কোনো এন্ট্রির প্রয়োজন নেই।
MongoDB Atlas-এ প্রাইভেট এন্ডপয়েন্ট প্রস্তুত করুন
- নির্বাচন করুন, নেটওয়ার্ক অ্যাক্সেস → প্রাইভেট এন্ডপয়েন্টস → ডেডিকেটেড ক্লাস্টার → প্রাইভেট এন্ডপয়েন্ট যোগ করুন

ক্লাউড প্রদানকারী
- গুগল ক্লাউড নির্বাচন করুন, তারপর পরবর্তী

পরিষেবা সংযুক্তি
- অঞ্চলটি নির্বাচন করুন, us-west1, তারপর পরবর্তী ধাপে যান।

এন্ডপয়েন্ট
- একটি ব্যক্তিগত সার্ভিস কানেক্ট এন্ডপয়েন্ট তৈরি করতে নিম্নলিখিত তথ্য প্রদান করুন:
- গুগল ক্লাউড প্রজেক্ট আইডি: বিস্তারিত জানতে 'নির্দেশাবলী দেখুন' নির্বাচন করুন।
- VPC নাম: কনজিউমার-ভিপিসি
- সাবনেটের নাম: psc-endpoint-us-west1
- ব্যক্তিগত পরিষেবা সংযোগ এন্ডপয়েন্ট প্রিফিক্স: psc-endpoint-us-west1

এন্ডপয়েন্ট সেট আপ করুন
পরবর্তী অংশে একটি শেল স্ক্রিপ্ট তৈরি হবে, যা setup_psc.sh নামে স্থানীয়ভাবে সংরক্ষণ করতে হবে। সংরক্ষণ করার পর, psc-কে গ্লোবাল অ্যাক্সেস দেওয়ার জন্য শেল স্ক্রিপ্টটি সম্পাদনা করুন। আপনি এই কাজটি গুগল ক্লাউড প্রজেক্টের ক্লাউড শেল-এর মধ্যে করতে পারেন।
- উদাহরণ শেল স্ক্রিপ্ট, আপনার আউটপুটে ভিন্ন মান থাকবে।

- MongoBD কনসোল থেকে শেল স্ক্রিপ্টটি কপি করে Google Cloud Shell টার্মিনালে সংরক্ষণ করুন এবং স্ক্রিপ্টটি setup_psc.sh নামে সেভ করা নিশ্চিত করুন।
আপডেটের আগের উদাহরণ:
#!/bin/bash
gcloud config set project yourprojectname
for i in {0..49}
do
gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done
for i in {0..49}
do
if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
exit 1;
fi
done
for i in {0..49}
do
gcloud compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i
done
if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
exit 2;
fi
gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json
গ্লোবাল অ্যাক্সেস সমর্থন করার জন্য শেল স্ক্রিপ্টটি আপডেট করুন।
নিচের সিনট্যাক্স ব্যবহার করে ন্যানো (nano) অথবা ভিআই (vi) এডিটরের সাহায্যে শেল স্ক্রিপ্টটি শনাক্ত ও আপডেট করুন:
gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
আপডেটের পরের উদাহরণ:
#!/bin/bash
gcloud config set project yourprojectname
for i in {0..49}
do
gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done
for i in {0..49}
do
if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
exit 1;
fi
done
for i in {0..49}
do
gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done
if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
exit 2;
fi
gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json
শেল স্ক্রিপ্টটি চালান
setup_psc.sh স্ক্রিপ্টটি খুঁজে বের করে চালান। এটি সম্পন্ন হলে atlasEndpoints-psc-endpoint-us-west1.json নামের একটি ফাইল তৈরি হবে। এই json ফাইলটিতে ডেপ্লয়মেন্টের পরবর্তী ধাপের জন্য প্রয়োজনীয় আইপি অ্যাড্রেস এবং প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট নেম-এর একটি তালিকা রয়েছে।
ক্লাউড শেলের ভিতরে নিম্নলিখিতগুলি সম্পাদন করুন:
sh setup_psc.sh
স্ক্রিপ্টটি সম্পন্ন হলে, ক্লাউড শেল এডিটর ব্যবহার করে atlasEndpoints-psc-endpoint-us-west1.json ফাইলটি আপনার লোকাল মেশিনে ডাউনলোড করুন।


JSON ফাইলটি আপলোড করুন
পূর্বে সংরক্ষিত atlasEndpoints-psc-endpoint-us-west1.json ফাইলটি আপলোড করুন।


তৈরি নির্বাচন করুন
প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্টগুলি যাচাই করুন
MongoDB UI-তে, আপনার প্রজেক্টে যান এবং তারপরে Security → Network access → Private endpoint-এ যান। ডেডিকেটেড ক্লাস্টার ট্যাবটি নির্বাচন করলে, এন্ডপয়েন্টটি অ্যাভেইলেবল হতে ১০ মিনিট সময় লাগবে।
উপলব্ধ অবস্থা

গুগল ক্লাউড কনসোলে, নেটওয়ার্ক সার্ভিসেস → প্রাইভেট সার্ভিসেস কানেক্ট-এ যান, এবং কানেক্টেড এন্ডপয়েন্ট ট্যাবটি নির্বাচন করুন যা পেন্ডিং → অ্যাকসেপ্টেড অবস্থায় রূপান্তরিত হওয়া কনজিউমার এন্ডপয়েন্টগুলো প্রদর্শন করে, উদাহরণ নিচে দেওয়া হলো:

৮. us-west2 এর জন্য ব্যক্তিগত এন্ডপয়েন্ট তৈরি
- আপনার অ্যাটলাস অ্যাকাউন্টে লগ-অন করুন এবং আপনার প্রজেক্টে যান।
MongoDB Atlas-এ প্রাইভেট এন্ডপয়েন্ট প্রস্তুত করুন
- নির্বাচন করুন, নেটওয়ার্ক অ্যাক্সেস → প্রাইভেট এন্ডপয়েন্টস → ডেডিকেটেড ক্লাস্টার → প্রাইভেট এন্ডপয়েন্ট যোগ করুন

ক্লাউড প্রদানকারী
- গুগল ক্লাউড নির্বাচন করুন, তারপর পরবর্তী

পরিষেবা সংযুক্তি
- অঞ্চলটি নির্বাচন করুন, us-west2, তারপর পরবর্তী ধাপে যান।

এন্ডপয়েন্ট
- একটি ব্যক্তিগত সার্ভিস কানেক্ট এন্ডপয়েন্ট তৈরি করতে নিম্নলিখিত তথ্য প্রদান করুন:
- গুগল ক্লাউড প্রজেক্ট আইডি: বিস্তারিত জানতে 'নির্দেশাবলী দেখুন' নির্বাচন করুন।
- VPC নাম: কনজিউমার-ভিপিসি
- সাবনেটের নাম: psc-endpoint-us-west2
- ব্যক্তিগত পরিষেবা সংযোগ এন্ডপয়েন্ট প্রিফিক্স: psc-endpoint-us-west2

এন্ডপয়েন্ট সেট আপ করুন
পরবর্তী অংশে একটি শেল স্ক্রিপ্ট তৈরি হবে, যা setup_psc.sh নামে স্থানীয়ভাবে সংরক্ষণ করতে হবে। সংরক্ষণ করার পর, psc-কে গ্লোবাল অ্যাক্সেস দেওয়ার জন্য শেল স্ক্রিপ্টটি সম্পাদনা করুন। আপনি এই কাজটি গুগল ক্লাউড প্রজেক্টের ক্লাউড শেল-এর মধ্যে করতে পারেন।
- উদাহরণ শেল স্ক্রিপ্ট, আপনার আউটপুটে ভিন্ন মান থাকবে।

- MongoBD কনসোল থেকে শেল স্ক্রিপ্টটি কপি করে Google Cloud Shell টার্মিনালে সংরক্ষণ করুন এবং স্ক্রিপ্টটি setup_psc.sh নামে সেভ করা নিশ্চিত করুন।
আপডেটের আগের উদাহরণ:
#!/bin/bash
gcloud config set project yourprojectname
for i in {0..49}
do
gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done
for i in {0..49}
do
if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
exit 1;
fi
done
for i in {0..49}
do
gcloud compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i
done
if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
exit 2;
fi
gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json
গ্লোবাল অ্যাক্সেস সমর্থন করার জন্য শেল স্ক্রিপ্টটি আপডেট করুন।
নিচের সিনট্যাক্স ব্যবহার করে ন্যানো (nano) অথবা ভিআই (vi) এডিটরের সাহায্যে শেল স্ক্রিপ্টটি শনাক্ত ও আপডেট করুন:
gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done
আপডেটের পরের উদাহরণ:
#!/bin/bash
gcloud config set project yourprojectname
for i in {0..49}
do
gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done
for i in {0..49}
do
if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
exit 1;
fi
done
for i in {0..49}
do
gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done
if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
exit 2;
fi
gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json
শেল স্ক্রিপ্টটি চালান
setup_psc.sh স্ক্রিপ্টটি চালান, এটি সম্পন্ন হলে atlasEndpoints-psc-endpoint-us-west2.json নামের একটি ফাইল তৈরি হবে। এই json ফাইলটিতে ডিপ্লয়মেন্টের পরবর্তী ধাপের জন্য প্রয়োজনীয় আইপি অ্যাড্রেস এবং প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট নেম-এর একটি তালিকা রয়েছে।
ক্লাউড শেলের ভিতরে নিম্নলিখিতগুলি সম্পাদন করুন:
sh setup_psc.sh
স্ক্রিপ্টটি সম্পন্ন হলে, ক্লাউড শেল এডিটর ব্যবহার করে atlasEndpoints-psc-endpoint-us-west2.json ফাইলটি আপনার লোকাল মেশিনে ডাউনলোড করুন।


JSON ফাইলটি আপলোড করুন
পূর্বে সংরক্ষিত atlasEndpoints-psc-endpoint-us-west2.json ফাইলটি আপলোড করুন।


তৈরি নির্বাচন করুন
প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্টগুলি যাচাই করুন
MongoDB UI-তে, আপনার প্রজেক্টে যান এবং তারপরে Security → Network access → Private endpoint-এ যান। ডেডিকেটেড ক্লাস্টার ট্যাবটি নির্বাচন করলে, এন্ডপয়েন্টটি ১০ মিনিট পর অ্যাভেইলেবল হয়ে যাবে।
উপলব্ধ অবস্থা:

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

৯. ব্যক্তিগত এন্ডপয়েন্ট থেকে MongoDB অ্যাটলাসের সাথে সংযোগ করুন
প্রাইভেট সার্ভিস কানেকশনগুলো গৃহীত হয়ে গেলে MongoDB ক্লাস্টার আপডেট হতে অতিরিক্ত সময় (১০-১৫ মিনিট) প্রয়োজন হয়। MongoDB UI-তে ধূসর রূপরেখাটি ক্লাস্টার আপডেটকে নির্দেশ করে, ফলে প্রাইভেট এন্ডপয়েন্টে সংযোগ করা যায় না।

ডিপ্লয়মেন্টটি শনাক্ত করুন এবং কানেক্ট নির্বাচন করুন (লক্ষ্য করুন, ধূসর বাক্সটি আর উপস্থিত নেই)।

সংযোগের ধরণ বেছে নিন → ব্যক্তিগত এন্ডপয়েন্ট, একটি সংযোগ পদ্ধতি নির্বাচন করুন।

MongoDB শেল দিয়ে সংযোগ নির্বাচন করুন

‘আমার MongoDB Shell ইনস্টল করা নেই, Ubuntu 20.4’ নির্বাচন করুন এবং ধাপ ১ ও ধাপ ৩-এর বিষয়বস্তু একটি নোটপ্যাডে কপি করে নিন।

১০. মঙ্গোশ অ্যাপ্লিকেশন ইনস্টল করুন
ইনস্টলেশনের আগে, ধাপ ১ ও ৩-এ প্রাপ্ত পূর্বে কপি করা মানগুলোর উপর ভিত্তি করে আপনাকে একটি কমান্ড স্ট্রিং তৈরি করতে হবে। এরপরে, আপনি ক্লাউড শেল ব্যবহার করে vm1-এ ssh করবেন এবং তারপরে প্রাইমারি (us-west1) ডেটাবেসে mongosh অ্যাপ্লিকেশন ইনস্টল ও ভ্যালিডেশন করবেন। কনজিউমার-ভিপিসিতে vm1 তৈরি করার সময় উবুন্টু ২০.৪ ইমেজ ইনস্টল করা হয়েছিল।
সংযোগ পদ্ধতি বেছে নিন: ধাপ ১, ডাউনলোড URL কপি করুন

উদাহরণ কমান্ড স্ট্রিং, আপনার নিজস্ব মান দিয়ে প্রতিস্থাপন করুন:
https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb
সংযোগ পদ্ধতি নির্বাচন করুন, ধাপ ৩।

উদাহরণ কমান্ড স্ট্রিং, আপনার নিজস্ব মান দিয়ে প্রতিস্থাপন করুন:
mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab
vm1-এ লগ ইন করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
ক্লাউড শেলে IAP ব্যবহার করে vm1-এ লগ ইন করুন, টাইমআউট হলে পুনরায় চেষ্টা করুন।
gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap
অপারেটিং সিস্টেম থেকে ইনস্টলেশনটি সম্পন্ন করুন।
ক্লাউড শেল ওএস লগইন থেকে ইনস্টলেশনটি সম্পন্ন করুন, অতিরিক্ত বিবরণ উপলব্ধ আছে , নিচের সিনট্যাক্সটি আপনার নিজস্ব স্ট্রিং দিয়ে আপডেট করুন।
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
অপারেশনটির একটি প্রতিক্রিয়া জানানো উচিত।
OK
.
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update -y
wget https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb
sudo dpkg -i mongodb-mongosh_1.7.1_amd64.deb
MongoDB ডেপ্লয়মেন্টের সাথে সংযোগ করুন
ক্লাউড শেল ওএস-এ লগইন করার পর নিম্নলিখিতগুলি সম্পাদন করুন। ইউজারনেম এবং পাসওয়ার্ড হলো `codelab`।
mongosh
mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab
নীচে উদাহরণ দেওয়া হলো:

ডাটাবেসের বিরুদ্ধে কমান্ডগুলো চালান।
ক্লাউড শেল ওএস-এ লগইন করে নিম্নলিখিতগুলি সম্পাদন করুন।
show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne({"Name":"cosmo"})
১১. ফেইলওভার সক্রিয় MongoDB অঞ্চল, us-west1
ফেলওভার করার আগে, চলুন যাচাই করে নিই যে us-west1 প্রাইমারি এবং us-west2-এর দুটি সেকেন্ডারি নোড আছে।
ডাটাবেস → psc-mongodb-uswest1-uswest2 → ওভারভিউ-তে যান

পরবর্তী অংশে us-west1-এ অবস্থিত vm1-এ লগ ইন করুন, প্রাইমারি MongoDB ক্লাস্টার অঞ্চল us-west1-কে ফেইলওভার করুন এবং যাচাই করুন যে us-west2-এর MongoDB ক্লাস্টার থেকে ডাটাবেসটি এখনও অ্যাক্সেসযোগ্য আছে।
আপনি অ্যাটলাস UI থেকে প্রাইমারি এবং রিজিওনাল উভয় ফেইলওভারই পরীক্ষা করতে পারেন।
- অ্যাটলাস UI-তে লগ ইন করুন।
- আপনার ক্লাস্টারের নাম, psc-mongodb-uswest1-uswest2-এর পাশে থাকা [...]-এ ক্লিক করুন → টেস্ট আউটেজ।

- আঞ্চলিক বিভ্রাট নির্বাচন করুন → অঞ্চলসমূহ নির্বাচন করুন।

- প্রাথমিক অঞ্চল নির্বাচন করুন, us-west1→ আঞ্চলিক বিভ্রাট অনুকরণ করুন।

একবার নির্বাচিত হলে ক্লাস্টারটি ৩-৪ মিনিট পর বিভ্রাট সিমুলেশন প্রদর্শন করবে।
জানালা বন্ধ করুন


যাচাই করুন যে us-west1 ডাউন আছে এবং us-west2 এখন প্রাইমারি হিসেবে দায়িত্ব নিয়েছে।
ডাটাবেস → psc-mongodb-uswest1-uswest2 → ওভারভিউ-তে যান

নতুন প্রাইমারি, us-west2 দ্বারা ক্লাস্টারের সাথে সংযোগ যাচাই করুন।
us-west1-এ অবস্থিত vm1-এ লগ ইন করুন এবং প্রাইভেট সার্ভিস কানেক্ট গ্লোবাল অ্যাক্সেস যাচাই করে us-west2-এ থাকা mongodb অ্যাক্সেস করুন।
আপনার ক্লাউড শেল সেশন বন্ধ হয়ে গেলে নিম্নলিখিতগুলি করুন:
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
ক্লাউড শেলে IAP ব্যবহার করে vm1-এ লগ ইন করুন, টাইমআউট হলে পুনরায় চেষ্টা করুন।
gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap
MongoDB ডেপ্লয়মেন্টের সাথে সংযোগ করুন
ক্লাউড শেল ওএস-এ লগইন করে নিম্নলিখিতগুলি সম্পাদন করুন।
mongosh
mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab
নীচে উদাহরণ দেওয়া হলো:

ডাটাবেসের বিরুদ্ধে কমান্ডগুলো চালান।
ক্লাউড শেল ওএস-এ লগইন করে নিম্নলিখিতগুলি সম্পাদন করুন।
show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne()
exit

সফলতা: আপনি যাচাই করেছেন যে PSC গ্লোবাল অ্যাক্সেস উচ্চ প্রাপ্যতা নিশ্চিত করতে বা আঞ্চলিক বিভ্রাটের কারণে বিভিন্ন অঞ্চলের মধ্যে কনজিউমার এন্ডপয়েন্টের নির্বিঘ্ন সংযোগ স্থাপন করতে দেয়। কোডল্যাবে, us-west1-এ অবস্থিত প্রাইমারি নোডে MongoDB-এর আঞ্চলিক ফেইলওভার ঘটেছিল, যার ফলে us-west2 নামক সেকেন্ডারি অঞ্চলটি প্রাইমারির দায়িত্ব গ্রহণ করে। যদিও ক্লাস্টারটিতে একটি আঞ্চলিক বিভ্রাট ঘটেছিল, us-west1-এ অবস্থিত কনজিউমার vm1 সফলভাবে us-west2-এর নতুন প্রাইমারি ক্লাস্টারে পৌঁছাতে সক্ষম হয়েছিল।
১২. পরিচ্ছন্নতা
ক্লাউড কনসোল থেকে কনজিউমার এন্ডপয়েন্টগুলি মুছে ফেলুন
নেটওয়ার্ক পরিষেবা → ব্যক্তিগত পরিষেবা সংযোগ → সংযুক্ত এন্ডপয়েন্ট-এ যান
নন-ল্যাব কনজিউমার এন্ডপয়েন্টগুলোর সম্ভাব্য ডিলিট হওয়া এড়াতে psc-endpoint ফিল্টারটি ব্যবহার করুন। সমস্ত এন্ডপয়েন্ট নির্বাচন করুন → ডিলিট করুন।

কনজিউমার এন্ডপয়েন্টগুলোর সাথে যুক্ত স্ট্যাটিক ইন্টারনাল আইপি অ্যাড্রেসগুলো মুছে ফেলুন
VPC নেটওয়ার্ক → কনজিউমার-ভিপিসি → স্ট্যাটিক ইন্টারনাল আইপি অ্যাড্রেস-এ যান।
নন-ল্যাব কনজিউমার এন্ডপয়েন্টগুলোর সম্ভাব্য ডিলিট হওয়া এড়াতে এবং প্রতি পৃষ্ঠায় সারির সংখ্যা ১০০-তে বৃদ্ধি করতে psc-endpoint ফিল্টারটি ব্যবহার করুন। সমস্ত এন্ডপয়েন্ট নির্বাচন করুন → রিলিজ (RELEASE)।

ক্লাউড শেল থেকে কোডল্যাব কম্পোনেন্টগুলো ডিলিট করুন।
gcloud compute instances delete vm1 --zone=us-west1-a --quiet
gcloud compute networks subnets delete psc-endpoint-us-west1 vm-subnet --region=us-west1 --quiet
gcloud compute networks subnets delete psc-endpoint-us-west2 --region=us-west2 --quiet
gcloud compute firewall-rules delete ssh-iap-consumer --quiet
gcloud compute routers delete consumer-cr --region=us-west1 --quiet
gcloud compute networks delete consumer-vpc --quiet
অ্যাটলাস UI থেকে psc-mongodb-uswest1-uswest2 ক্লাস্টারটি শনাক্ত করুন → সিমুলেশন শেষ করুন

বিভ্রাট সিমুলেশন শেষ করুন নির্বাচন করুন —> প্রস্থান করুন

ক্লাস্টারটি এখন us-west1-কে পুনরায় প্রাইমারি হিসেবে সেট করছে, এই প্রক্রিয়াটি সম্পন্ন হতে ৩-৪ মিনিট সময় লাগবে। এটি সম্পন্ন হলে, ক্লাস্টারটি টার্মিনেট করুন এবং স্ট্যাটাস পরিবর্তন নির্দেশকারী ধূসর আউটলাইনটি লক্ষ্য করুন।


ক্লাস্টারের নাম প্রবেশ করান → সমাপ্ত করুন

us-west1 এবং us-west2 এর সাথে যুক্ত ব্যক্তিগত এন্ডপয়েন্টগুলো মুছে ফেলুন।
অ্যাটলাস UI থেকে Security → Network Access → Private Endpoint-এ যান এবং Terminate নির্বাচন করুন।

১৩. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে অঞ্চলজুড়ে MongoDB-তে গ্লোবাল অ্যাক্সেস সহ একটি প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট কনফিগার এবং ভ্যালিডেট করেছেন। আপনি সফলভাবে একটি কনজিউমার ভিপিসি, মাল্টি-রিজিওন MongoDB এবং কনজিউমার এন্ডপয়েন্ট তৈরি করেছেন। আঞ্চলিক ফেইলওভারের পর us-west1-এ অবস্থিত একটি ভিএম সফলভাবে us-west1 এবং us-west2 উভয়ের MongoDB-এর সাথে সংযুক্ত হয়েছে।
কসমোপাপের মতে কোডল্যাবগুলো অসাধারণ!!

এরপর কী?
এই কোডল্যাবগুলো দেখে নিন...
- GKE ব্যবহার করে প্রাইভেট সার্ভিস কানেক্টের মাধ্যমে সার্ভিস প্রকাশ ও গ্রহণ করা
- প্রাইভেট সার্ভিস কানেক্ট ব্যবহার করে পরিষেবাগুলি প্রকাশ এবং গ্রহণ করা
- প্রাইভেট সার্ভিস কানেক্ট এবং একটি অভ্যন্তরীণ টিসিপি প্রক্সি লোড ব্যালেন্সার ব্যবহার করে হাইব্রিড নেটওয়ার্কিংয়ের মাধ্যমে অন-প্রেম পরিষেবাগুলিতে সংযোগ করুন।
- স্বয়ংক্রিয় ডিএনএস কনফিগারেশন সহ প্রাইভেট সার্ভিস কানেক্ট ব্যবহার করা
আরও পড়ুন ও ভিডিও
- প্রাইভেট সার্ভিস কানেক্টের সংক্ষিপ্ত বিবরণ
- প্রাইভেট সার্ভিস কানেক্ট কী?
- সমর্থিত লোড ব্যালেন্সার প্রকার