কীভাবে লিনাক্সে এইচটিটিপি লোড ব্যালান্সার হিসাবে এনগিনেক্স ব্যবহার করবেন


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

অতিরিক্ত ভারসাম্যহীনতার মাধ্যমে লোড ব্যালেন্সিংয়ের অ্যাপ্লিকেশন প্রাপ্যতা বৃদ্ধি, নির্ভরযোগ্যতা এবং স্কেলাবিলিটি (ট্র্যাফিক বৃদ্ধি পেলে আরও বেশি সার্ভার যুক্ত করা যেতে পারে) সহ বেশ কয়েকটি সুবিধা রয়েছে। এটি উন্নত অ্যাপ্লিকেশন কর্মক্ষমতা এবং অন্যান্য অনেক সুবিধা নিয়ে আসে about

প্রস্তাবিত পড়ুন: এনগিনেক্স ওয়েব সার্ভারের সুরক্ষা, কঠোরতা এবং উন্নতি করার চূড়ান্ত গাইড

প্রতিটি ক্ষেত্রে নির্বাচিত সার্ভার থেকে যথাযথ ক্লায়েন্টকে প্রতিক্রিয়া ফিরিয়ে দেওয়ার ক্ষেত্রে, এনগিনেক্স একটি দক্ষ এইচটিটিপি লোড ব্যালেন্সার হিসাবে স্থাপন করা যেতে পারে যা প্রতিটি নেটওয়ার্কের মধ্যে অ্যাপ্লিকেশন সার্ভারের মধ্যে অন্তর্ভুক্ত নেটওয়ার্ক ট্র্যাফিক এবং কাজের চাপ বিতরণ করতে পারে in

Nginx দ্বারা সমর্থিত লোড ব্যালেন্সিং পদ্ধতিগুলি হ'ল:

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

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

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

পরীক্ষার উদ্দেশ্যে, প্রতিটি অ্যাপ্লিকেশন উদাহরণটি লেবেলযুক্ত (ইউজার ইন্টারফেসে) চালিত সার্ভারটি চিহ্নিত করতে।

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

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

A Record   		@   		192.168.58.7

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

192.168.58.7  	tecmintapp.lan

লিনাক্সে এনগিনেক্স লোড ব্যালান্সিং সেটআপ করা হচ্ছে

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

$ sudo apt install nginx   [On Debian/Ubuntu]
$ sudo yum install nginx   [On CentOS/RHEL]   

এর পরে /etc/nginx/conf.d/loadbalancer.conf নামে একটি সার্ভার ব্লক ফাইল তৈরি করুন (আপনার পছন্দের একটি নাম দিন)।

$ sudo vi /etc/nginx/conf.d/loadbalancer.conf

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

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

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

সর্বনিম্ন সংযোগ ব্যবস্থা নিয়োগের জন্য, নিম্নলিখিত কনফিগারেশনটি ব্যবহার করুন

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

এবং ip_hash সেশনের দৃistence়তা প্রক্রিয়া সক্ষম করতে, ব্যবহার করুন:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

আপনি সার্ভার ওজন ব্যবহার করে লোড ব্যালেন্সিং সিদ্ধান্তকেও প্রভাবিত করতে পারেন। নিম্নলিখিত কনফিগারেশন ব্যবহার করে, ক্লায়েন্টদের কাছ থেকে ছয়টি অনুরোধ থাকলে, অ্যাপ্লিকেশন সার্ভারটি 192.168.58.5- কে 4 টি অনুরোধ বরাদ্দ করা হবে এবং 2 192.168.58.8 এ যাবে।

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

ফাইলটি সংরক্ষণ করুন এবং এটি প্রস্থান করুন। তারপরে নীচের কমান্ডটি চালিয়ে সাম্প্রতিক পরিবর্তনগুলি যুক্ত করার পরে Nginx কনফিগারেশন কাঠামোটি সঠিক কিনা তা নিশ্চিত করুন।

$ sudo nginx -t

কনফিগারেশন ঠিক থাকলে, পরিবর্তনগুলি প্রয়োগ করতে Nginx পরিষেবাটি পুনরায় চালু করুন এবং সক্ষম করুন।

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

লিনাক্সে এনগিনেক্স লোড ব্যালান্সিং পরীক্ষা করা

Nginx লোড ভারসাম্য পরীক্ষা করতে একটি ওয়েব ব্রাউজার খুলুন এবং নেভিগেট করতে নিম্নলিখিত ঠিকানাটি ব্যবহার করুন।

http://tecmintapp.lan

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

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