HAProxy Beginner's Tutorial

Haproxy Beginner S Tutorial



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

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

কেন HAProxy ব্যবহার করবেন

HAProxy-এর ইনস্টলেশন এবং কনফিগারেশন সম্পর্কে শেখার আগে, আপনাকে বুঝতে হবে কেন আমাদের এটির প্রয়োজন, এটি যে বৈশিষ্ট্যগুলি অফার করে তার সৌজন্যে। নিম্নলিখিত HAProxy এর প্রাথমিক বৈশিষ্ট্যগুলি হল:







  1. লোড ব্যালেন্সিং- HAProxy-এর সাহায্যে, আপনি একটি একক সার্ভারকে ওভারলোডিং এড়াতে বিভিন্ন সার্ভারে ট্রাফিককে আরামদায়কভাবে বিতরণ করতে পারেন। এইভাবে, আপনার অ্যাপ্লিকেশন কোনও ডাউনটাইম সমস্যার মুখোমুখি হবে না এবং আপনি দ্রুত প্রতিক্রিয়াশীলতা, নির্ভরযোগ্যতা এবং প্রাপ্যতা অর্জন করতে পারবেন।
  2. লগিং এবং মনিটরিং - সমস্যা সমাধানে সহায়তা করার জন্য আপনি আপনার সার্ভারের জন্য বিশদ পর্যবেক্ষণ লগ পাবেন। এছাড়াও, HAProxy-এর একটি পরিসংখ্যান পৃষ্ঠা রয়েছে যেখানে আপনি আপনার লোড ব্যালেন্সারের জন্য রিয়েল-টাইম কর্মক্ষমতা বিশ্লেষণ পেতে পারেন।
  3. স্বাস্থ্য পরীক্ষা- এমনকি আপনার সার্ভারগুলিকে তাদের স্থিতি নির্ধারণের জন্য একটি স্বাস্থ্য পরীক্ষা প্রয়োজন। HAProxy আপনার সার্ভারের নির্ভরযোগ্যতা বাড়ানোর জন্য তার অবস্থা জানতে ঘন ঘন স্বাস্থ্য পরীক্ষা চালায়। যদি একটি অস্বাস্থ্যকর সার্ভার সনাক্ত করা হয়, এটি অন্য সার্ভারে ট্র্যাফিক পুনরায় রুট করে।
  4. বিপরীত প্রক্সি - নিরাপত্তা বাড়ানোর একটি উপায় হল অভ্যন্তরীণ কাঠামো লুকিয়ে রাখা। সৌভাগ্যবশত, HAProxy আপনাকে ক্লায়েন্টদের কাছ থেকে ট্রাফিক গ্রহণ করতে দেয় এবং তাদের উপযুক্ত সার্ভারে রুট করতে দেয়। এইভাবে, আপনার অভ্যন্তরীণ কাঠামো হ্যাকারের চোখ থেকে লুকানো হয়।
  5. ACLs (অ্যাক্সেস কন্ট্রোল লিস্ট) - HAProxy-এর সাহায্যে, আপনি পথ, শিরোনাম এবং IP ঠিকানার মতো বিভিন্ন মানদণ্ড ব্যবহার করে কীভাবে ট্রাফিক রাউটিং ঘটতে হবে তা নির্ধারণ করতে পারেন। সুতরাং, আপনার ট্র্যাফিকের জন্য একটি কাস্টম রাউটিং যুক্তি সংজ্ঞায়িত করা সহজ হয়ে যায়।
  6. SSL সমাপ্তি - ডিফল্টরূপে, ব্যাকএন্ড সার্ভার দ্বারা SSL/TLS অফলোড করা হয় যা কর্মক্ষমতা হ্রাস করে। যাইহোক, HAProxy-এর সাথে, SSL/TLS সমাপ্তি লোড ব্যালেন্সারে ঘটে, ব্যাকএন্ড সার্ভারে টাস্ক অফলোড করে।

HAProxy ইনস্টল করা হচ্ছে

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



আপনি যদি উবুন্টু বা ডেবিয়ান সিস্টেম চালাচ্ছেন, HAProxy APT প্যাকেজ ম্যানেজার থেকে ইনস্টল করা যেতে পারে। নিম্নলিখিত কমান্ড চালান:



$ sudo apt আপডেট
$ sudo apt haproxy ইনস্টল করুন

একইভাবে, আপনি যদি RHEL-ভিত্তিক সিস্টেম বা CentOS ব্যবহার করেন, HAProxy 'yum' প্যাকেজ ম্যানেজার থেকে পাওয়া যায়। নিম্নলিখিত কমান্ড চালান:





$ sudo yum আপডেট
$ sudo yum হ্যাপ্রক্সি ইনস্টল করুন

আমাদের ক্ষেত্রে, আমরা উবুন্টু ব্যবহার করছি। সুতরাং, আমাদের নিম্নরূপ আমাদের আদেশ রয়েছে:



তারপরে আমরা HAProxy সফলভাবে ইনস্টল করতে পেরেছি তা নিশ্চিত করতে আমরা এর সংস্করণটি পরীক্ষা করতে পারি।

$ haproxy -- সংস্করণ

কিভাবে HAProxy কনফিগার করবেন

HAProxy ইনস্টল করার সাথে, আপনি এখন এটির কনফিগার ফাইল খুলতে পারেন ( / etc/haproxy/haproxy.cfg) এবং আপনার লোড ব্যালেন্সারের জন্য আপনি যে সেটিংস ব্যবহার করতে চান তা সংজ্ঞায়িত করুন।

ন্যানো বা ভিমের মতো সম্পাদক ব্যবহার করে কনফিগার ফাইলটি খুলুন।

$ sudo nano /etc/haproxy/haproxy.cfg

আপনি নিম্নলিখিতটির মতো একটি কনফিগার ফাইল পাবেন:

কনফিগার ফাইল থেকে, আপনি লক্ষ্য করবেন যে এটি দুটি প্রধান বিভাগের সাথে আসে:

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

এখানে একটি 'ডিফল্ট' বিভাগের একটি উদাহরণ রয়েছে:

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

আপনার লোড ব্যালেন্সার প্রত্যাশিত হিসাবে কাজ করার জন্য আরও তিনটি বিভাগ রয়েছে যা আপনার সংজ্ঞায়িত করা উচিত।

  1. সামনের অংশ - এই বিভাগে আইপি ঠিকানা রয়েছে যা আপনি চান আপনার ক্লায়েন্টরা সংযোগ স্থাপনের জন্য ব্যবহার করুক।
  2. ব্যাকএন্ড - এটি সার্ভার পুলগুলি দেখায় যা ফ্রন্টএন্ড বিভাগে সংজ্ঞায়িত হিসাবে অনুরোধগুলি পরিচালনা করে।
  3. শুনুন - আপনি যখন একটি নির্দিষ্ট সার্ভার গ্রুপকে রুট করতে চান তখন এটি ধারাবাহিকভাবে ব্যবহৃত হয়। এই বিভাগটি ফ্রন্টএন্ড এবং ব্যাকএন্ডের কাজগুলিকে একত্রিত করে।

আসুন একটি উদাহরণ দেওয়া যাক

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

ধাপ 1: ডিফল্ট বিভাগ কনফিগার করা

'ডিফল্ট' বিভাগে, আমরা নোড জুড়ে শেয়ার করা মান সেট করি। আমাদের ক্ষেত্রে, আমরা মোডটিকে HTTP-তে সেট করি এবং ক্লায়েন্ট এবং সার্ভারের জন্য সময়সীমা সেট করি। আপনি আপনার প্রয়োজন অনুসারে সময় সামঞ্জস্য করতে পারেন।

মনে রাখবেন যে এই সমস্ত সম্পাদনাগুলি '/etc/haproxy/haproxy.cfg'-এ অবস্থিত HAProxy কনফিগারেশনে রয়েছে৷ ডিফল্ট বিভাগ কনফিগার হয়ে গেলে, ফ্রন্টএন্ডটি সংজ্ঞায়িত করা যাক।

ধাপ 2: ফ্রন্টএন্ড বিভাগ কনফিগার করা

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

আপনাকে অবশ্যই 'বাইন্ড' কীওয়ার্ড যোগ করতে হবে যা নির্দিষ্ট পোর্টে আইপি ঠিকানার শ্রোতা হিসেবে কাজ করে। আইপি ঠিকানা এবং আপনি যে পোর্টটি সংজ্ঞায়িত করেছেন তা হল লোড ব্যালেন্সার আগত অনুরোধগুলি গ্রহণ করতে ব্যবহার করে।

আপনার কনফিগারেশন ফাইলে পূর্ববর্তী লাইনগুলি যোগ করার পরে, আমাদের অবশ্যই নিম্নলিখিত কমান্ডের সাথে 'haproxy.service' পুনরায় চালু করতে হবে:

$ sudo systemctl রিস্টার্ট হ্যাপ্রক্সি

এই মুহুর্তে, আমরা 'curl' কমান্ড ব্যবহার করে আমাদের ওয়েবসাইটে অনুরোধ পাঠানোর চেষ্টা করতে পারি। কমান্ডটি চালান এবং লক্ষ্য আইপি ঠিকানা যোগ করুন।

$ curl

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

ধাপ 3: ব্যাকএন্ড কনফিগার করা

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

আমরা আগে যে 503 ত্রুটি পেয়েছি তা হল অনুরোধগুলি পরিচালনা করার জন্য আমাদের কাছে কোনও ব্যাকএন্ড ছিল না। অনুরোধগুলি পরিচালনা করতে 'default_backend' সংজ্ঞায়িত করে শুরু করা যাক। আপনি ফ্রন্টএন্ড বিভাগে এটি সংজ্ঞায়িত করুন। আমরা এই ক্ষেত্রে এটির নাম দিয়েছি 'linux_backend'।

এর পরে, একটি ব্যাকএন্ড বিভাগ তৈরি করুন যার নাম ফ্রন্টএন্ড বিভাগে সংজ্ঞায়িত করা হয়েছে। তারপরে আপনাকে অবশ্যই 'সার্ভার' কীওয়ার্ডটি ব্যবহার করতে হবে এবং তারপরে আপনার সার্ভারের নাম এবং তার আইপি ঠিকানাটি ব্যবহার করতে হবে। নিম্নলিখিত চিত্রটি দেখায় যে আমরা IP 127.0.0.1 এবং পোর্ট 8001 ব্যবহার করে 'linuxhint1' সার্ভারকে সংজ্ঞায়িত করেছি:

আপনার কাছে ব্যাকএন্ড সার্ভারের একটি পুল থাকতে পারে, তবে আমরা এই ক্ষেত্রে শুধুমাত্র একটি সংজ্ঞায়িত করেছি। নিশ্চিত করুন যে আপনি ফাইলটি সংরক্ষণ করেছেন। আমাদের আবার HAProxy পরিষেবা পুনরায় চালু করতে হবে।

তৈরি করা HAProxy লোড ব্যালেন্সার পরীক্ষা করার জন্য, আমরা Python3 ব্যবহার করে একটি ওয়েব সার্ভার তৈরি করি যাতে আমরা নির্দিষ্ট করা IP ঠিকানা ব্যবহার করে ব্যাকএন্ড পোর্টগুলি আবদ্ধ করি। আমরা নিম্নরূপ কমান্ড চালাই:

$ python3 -m http.server 8001 --bind 127.0.0.1

নিশ্চিত করুন যে আপনি মানগুলিকে আপনার IP ঠিকানা এবং যে পোর্টটি বাঁধতে চান তার সাথে মেলে। লক্ষ্য করুন কিভাবে ওয়েব সার্ভার তৈরি হয় এবং যেকোনো আগত অনুরোধের জন্য শোনে।

অন্য টার্মিনালে, সার্ভারে একটি অনুরোধ পাঠাতে 'curl' কমান্ডটি ব্যবহার করি।

$ curl

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

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

এইভাবে আপনি আপনার ওয়েবসাইট বা অ্যাপ্লিকেশনের জন্য একটি সাধারণ HAProxy সেট করতে পারেন।

নিয়ম নিয়ে কাজ করা

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

আগের মত একই ধাপ অনুসরণ করে, আসুন আমাদের ডিফল্ট বিভাগটিকে অক্ষত রাখি এবং ফ্রন্টএন্ড বিভাগে বিভিন্ন আইপি ঠিকানা সংজ্ঞায়িত করি। আমরা একই IP ঠিকানা বাঁধাই কিন্তু বিভিন্ন পোর্ট থেকে সংযোগ গ্রহণ করি।

তাছাড়া, আমাদের 'ডিফল্ট_ব্যাকএন্ড' এবং আরেকটি 'ব্যবহার_ব্যাকেন্ড' রয়েছে যা সার্ভারের একটি ভিন্ন পুল যা আমরা যে পোর্ট থেকে অনুরোধগুলি আসছে তার উপর নির্ভর করে ব্যবহার করব। নিম্নলিখিত কনফিগারেশনে, পোর্ট 81 এর মাধ্যমে সমস্ত অনুরোধ 'Linux2_backend'-এর সার্ভার দ্বারা পরিচালিত হয়। অন্য যেকোনো অনুরোধ 'default_backend' দ্বারা পরিচালিত হয়।

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

দ্রুত HAProxy পরিষেবা পুনরায় চালু করুন।

আসুন Python3 ব্যবহার করে ওয়েব সার্ভার তৈরি করি এবং পোর্ট 8002-এ অনুরোধগুলি আবদ্ধ করি যা বিকল্প ব্যাকএন্ড সার্ভার।

এটিতে অনুরোধ পাঠানোর সময়, বিকল্প সার্ভারে অনুরোধ পাঠানোর জন্য লোড ব্যালেন্সারকে ট্রিগার করতে আমরা পোর্টটিকে 81 হিসাবে নির্দিষ্ট করি যা ডিফল্ট নয়।

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

আপনার লোড ব্যালেন্সার কীভাবে অনুরোধগুলি গ্রহণ করবে এবং পরিচালনা করবে তা নির্দেশ করার জন্য আপনি নিয়মগুলি সংজ্ঞায়িত করতে পারেন।

উপসংহার

HAProxy হল TCP/HTTP অ্যাপ্লিকেশনের জন্য লোড ব্যালেন্স করার জন্য একটি আদর্শ সমাধান। একবার ইনস্টল হয়ে গেলে, আপনার লোড ব্যালেন্সার কীভাবে কাজ করবে তা নির্দেশ করার জন্য আপনি ডিফল্ট, ফ্রন্টএন্ড এবং ব্যাকএন্ড বিভাগগুলি সংজ্ঞায়িত করতে আরামে কনফিগারেশন ফাইলটি সম্পাদনা করতে পারেন। এই পোস্টটি HAProxy-এর জন্য একটি শিক্ষানবিস গাইড। এটি HAProxy এবং এর বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে শুরু হয়েছিল। এর পরে, এটি কীভাবে HAProxy কনফিগার করতে হয় তা বোঝার জন্য খনন করে এবং কীভাবে লোড ব্যালেন্সার হিসাবে HAProxy ব্যবহার করতে হয় তার একটি উদাহরণ দিয়ে উপসংহারে পৌঁছেছে।