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 کیا ہے اس کی وضاحت کی اور ان خصوصیات پر تبادلہ خیال کیا جو یہ آپ کو یہ سمجھنے میں مدد کرنے کے لیے پیش کرتا ہے کہ آپ کو اپنی درخواست کے لیے اس کی ضرورت کیوں ہے۔ اگلا مرحلہ یہ سمجھنا ہے کہ اسے اپنے سسٹم پر انسٹال کرکے کیسے شروع کیا جائے۔



اگر آپ Ubuntu یا Debian سسٹم چلا رہے ہیں تو HAProxy کو APT پیکیج مینیجر سے انسٹال کیا جا سکتا ہے۔ درج ذیل کمانڈ کو چلائیں:



$ sudo apt اپ ڈیٹ
$ sudo apt haproxy انسٹال کریں۔

اسی طرح، اگر آپ RHEL پر مبنی نظام یا CentOS استعمال کر رہے ہیں، تو HAProxy 'yum' پیکیج مینیجر سے دستیاب ہے۔ درج ذیل کمانڈز چلائیں:





$ sudo yum اپ ڈیٹ
$ sudo yum haproxy انسٹال کریں۔

ہمارے معاملے میں، ہم Ubuntu استعمال کر رہے ہیں۔ اس طرح، ہمارے پاس مندرجہ ذیل حکم ہے:



اس کے بعد ہم یہ معلوم کرنے کے لیے اس کے ورژن کو چیک کر سکتے ہیں کہ ہم نے HAProxy کو کامیابی کے ساتھ انسٹال کر لیا ہے۔

$ haproxy --version

HAProxy کو کیسے ترتیب دیا جائے۔

HAProxy انسٹال ہونے کے ساتھ، اب آپ اس کی تشکیل فائل کو کھول سکتے ہیں ( / etc/haproxy/haproxy.cfg) اور ان ترتیبات کی وضاحت کریں جو آپ اپنے لوڈ بیلنس کے لیے استعمال کرنا چاہتے ہیں۔

نینو یا ویم جیسے ایڈیٹر کا استعمال کرتے ہوئے تشکیل فائل کو کھولیں۔

$sudo nano /etc/haproxy/haproxy.cfg

آپ کو مندرجہ ذیل میں ایک کنفگ فائل ملتی ہے۔

تشکیل فائل سے، آپ دیکھیں گے کہ یہ دو اہم حصوں کے ساتھ آتا ہے:

  1. عالمی - یہ فائل کا پہلا سیکشن ہے اور اس کی اقدار کو تبدیل نہیں کیا جانا چاہئے۔ یہ عمل کی ترتیبات پر مشتمل ہے جو اس بات کی وضاحت کرتی ہے کہ HAProxy کیسے کام کرتا ہے۔ مثال کے طور پر، یہ لاگنگ کی تفصیلات اور گروپس یا صارفین کی وضاحت کرتا ہے جو HAProxy کے افعال کو انجام دے سکتے ہیں۔ نوٹ کریں کہ اس کنفیگریشن فائل میں، آپ کے پاس صرف ایک عالمی سیکشن ہو سکتا ہے، اور اس کی قدروں میں کوئی تبدیلی نہیں ہونی چاہیے۔
  1. ڈیفالٹس - اس حصے میں نوڈس کے لیے پہلے سے طے شدہ اقدار شامل ہیں۔ مثال کے طور پر، آپ اس سیکشن میں اپنے HAProxy کے لیے ٹائم آؤٹ یا آپریشنل موڈ شامل کر سکتے ہیں۔ اس کے علاوہ، آپ کی HAProxy config فائل میں متعدد ڈیفالٹ سیکشنز کا ہونا ممکن ہے۔

یہاں 'ڈیفالٹس' سیکشن کی ایک مثال ہے:

دی گئی تصویر میں، موڈ اس بات کی وضاحت کرتا ہے کہ آپ کا HAProxy آنے والی درخواستوں کو کیسے ہینڈل کرے گا۔ آپ موڈ کو HTTP یا TCP پر سیٹ کر سکتے ہیں۔ جہاں تک ٹائم آؤٹ کا تعلق ہے، یہ بتاتا ہے کہ HAProxy کو کتنا انتظار کرنا چاہیے۔ مثال کے طور پر، ٹائم آؤٹ کنیکٹ بیک اینڈ کنکشن بننے سے پہلے انتظار کرنے کا وقت ہے۔ ٹائم آؤٹ کلائنٹ یہ ہے کہ HAProxy کو کلائنٹ کو ڈیٹا بھیجنے کے لیے کتنا انتظار کرنا چاہیے۔ ٹائم آؤٹ سرور ڈیٹا بھیجنے کے لیے مناسب سرور کا انتظار کرنے کا وقت ہے جو کلائنٹ کو بھیج دیا جائے گا۔ آپ ڈیفالٹ اقدار کی وضاحت کیسے کرتے ہیں آپ کی درخواست کے جوابی وقت کو بڑھانے میں بہت اہمیت رکھتا ہے۔

مزید تین حصے ہیں جن کی آپ کو اپنے لوڈ بیلنسر کے توقع کے مطابق کام کرنے کے لیے وضاحت کرنی چاہیے۔

  1. فرنٹ اینڈ - اس حصے میں وہ IP پتے ہیں جنہیں آپ چاہتے ہیں کہ آپ کے کلائنٹ کنکشن قائم کرنے کے لیے استعمال کریں۔
  2. پسدید - یہ سرور کے تالابوں کو دکھاتا ہے جو درخواستوں کو سنبھالتے ہیں جیسا کہ فرنٹ اینڈ سیکشن میں بیان کیا گیا ہے۔
  3. سنو- جب آپ کسی مخصوص سرور گروپ کو روٹ کرنا چاہتے ہیں تو یہ یکے بعد دیگرے استعمال ہوتا ہے۔ یہ سیکشن فرنٹ اینڈ اور بیک اینڈ کے کاموں کو یکجا کرتا ہے۔

آئیے ایک مثال لیتے ہیں۔

اس مثال کے لیے، ہم ایک مخصوص پورٹ کے ساتھ لوکل ہوسٹ استعمال کرنے کے لیے فرنٹ اینڈ کی وضاحت کرتے ہیں۔ اگلا، ہم اسے بیک اینڈ کے ساتھ باندھتے ہیں جو لوکل ہوسٹ کو چلاتا ہے اور پھر یہ جانچنے کے لیے ایک Python سرور چلاتا ہے کہ آیا لوڈ بیلنسنگ کے لیے ہر چیز توقع کے مطابق کام کرتی ہے۔ دیے گئے مراحل پر عمل کریں۔

مرحلہ 1: ڈیفالٹس سیکشن کو ترتیب دینا

'ڈیفالٹس' سیکشن میں، ہم نے تمام نوڈس میں اشتراک کرنے کے لیے قدریں سیٹ کیں۔ ہمارے کیس کے لیے، ہم موڈ کو HTTP پر سیٹ کرتے ہیں اور کلائنٹ اور سرور کے لیے ٹائم آؤٹ سیٹ کرتے ہیں۔ آپ اپنی ضروریات کے مطابق وقت کو ایڈجسٹ کر سکتے ہیں۔

یاد رکھیں کہ یہ تمام ترامیم '/etc/haproxy/haproxy.cfg' پر واقع HAProxy کنفیگریشن میں ہیں۔ ایک بار جب ڈیفالٹس سیکشن کنفیگر ہو جائے تو آئیے فرنٹ اینڈ کی وضاحت کرتے ہیں۔

مرحلہ 2: فرنٹ اینڈ سیکشن کو ترتیب دینا

فرنٹ اینڈ سیکشن میں، ہم اس بات کی وضاحت کرتے ہیں کہ ہم کس طرح چاہتے ہیں کہ کلائنٹس آن لائن ایپلی کیشن یا ویب سائٹ تک رسائی حاصل کریں۔ ہم درخواست کے لیے آئی پی ایڈریس دیتے ہیں۔ لیکن اس معاملے کے لیے، ہم لوکل ہوسٹ کے ساتھ کام کرتے ہیں۔ لہذا، ہمارا IP ایڈریس 127.0.0.1 کا فال بیک ایڈریس ہے اور ہم پورٹ 80 کے ذریعے کنکشن قبول کرنا چاہتے ہیں۔

آپ کو 'بائنڈ' کلیدی لفظ شامل کرنا ہوگا جو مخصوص پورٹ پر آئی پی ایڈریس کے سننے والے کے طور پر کام کرتا ہے۔ آئی پی ایڈریس اور پورٹ جس کی آپ وضاحت کرتے ہیں وہی ہے جو لوڈ بیلنسر آنے والی درخواستوں کو قبول کرنے کے لیے استعمال کرتا ہے۔

آپ کی تشکیل فائل میں پچھلی لائنیں شامل کرنے کے بعد، ہمیں درج ذیل کمانڈ کے ساتھ 'haproxy.service' کو دوبارہ شروع کرنا ہوگا۔

$ sudo systemctl haproxy کو دوبارہ شروع کریں۔

اس وقت، ہم '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 ایڈریسز کی وضاحت کریں۔ ہم ایک ہی IP ایڈریس کو پابند کرتے ہیں لیکن مختلف بندرگاہوں سے کنکشن قبول کرتے ہیں۔

مزید یہ کہ، ہمارے پاس ہمارا 'default_backend' اور دوسرا 'use_backend' ہے جو کہ سرورز کا ایک مختلف پول ہے جسے ہم اس پورٹ کے لحاظ سے استعمال کریں گے جہاں سے درخواستیں آرہی ہیں۔ درج ذیل کنفیگریشن میں، پورٹ 81 کے ذریعے تمام درخواستوں کو 'Linux2_backend' میں سرورز کے ذریعے ہینڈل کیا جاتا ہے۔ کسی بھی دوسری درخواست کو 'default_backend' کے ذریعے ہینڈل کیا جاتا ہے۔

پھر ہم بیک اینڈ سیکشنز بناتے ہیں جیسا کہ فرنٹ اینڈ میں بیان کیا گیا ہے۔ نوٹ کریں کہ ہر بیک اینڈ کے لیے، ہمارے پاس ایک مختلف سرور ہے جسے ہم درخواستوں کو سنبھالنے کے لیے استعمال کرنے کے لیے مخصوص کرتے ہیں۔

HAProxy سروس کو جلدی سے دوبارہ شروع کریں۔

آئیے Python3 کا استعمال کرتے ہوئے ویب سرور بنائیں اور پورٹ 8002 پر درخواستوں کو پابند کریں جو متبادل بیک اینڈ سرور ہے۔

اس پر درخواستیں بھیجتے وقت، ہم پورٹ کو 81 کے طور پر متعین کرتے ہیں تاکہ لوڈ بیلنس کو متحرک کیا جا سکے تاکہ متبادل سرور کو درخواستیں بھیجیں جو پہلے سے طے شدہ نہیں ہے۔

اپنے ویب سرور کو دوبارہ چیک کرتے ہوئے، ہم دیکھ سکتے ہیں کہ یہ درخواستوں کو وصول کرنے اور ہینڈل کرنے کا انتظام کرتا ہے اور 200 (کامیابی) جواب دیتا ہے۔

اس طرح آپ یہ رہنمائی کرنے کے لیے قواعد کی وضاحت کر سکتے ہیں کہ آپ کا لوڈ بیلنس کس طرح درخواستوں کو وصول کرے گا اور ان کو ہینڈل کرے گا۔

نتیجہ

HAProxy TCP/HTTP ایپلیکیشنز کے لیے لوڈ بیلنسنگ کے لیے ایک مثالی حل ہے۔ انسٹال ہونے کے بعد، آپ ڈیفالٹس، فرنٹ اینڈ اور بیک اینڈ سیکشنز کی وضاحت کرنے کے لیے کنفیگریشن فائل کو آرام سے ایڈٹ کر سکتے ہیں تاکہ آپ کا لوڈ بیلنسر کیسے کام کرے گا۔ یہ پوسٹ HAProxy کے لیے ابتدائی رہنما ہے۔ اس کا آغاز HAProxy اور اس کی خصوصیات کی وضاحت سے ہوا۔ اس کے بعد، اس نے HAProxy کو کنفیگر کرنے کے طریقے کو سمجھنے کے لیے کھود لیا اور HAProxy کو لوڈ بیلنس کے طور پر استعمال کرنے کے طریقے کی مثال دے کر نتیجہ اخذ کیا۔