CentOS 8 এ Nginx এর জন্য লোড ব্যালান্সার হিসাবে HAProxy কীভাবে সেটআপ করবেন


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

HAProxy একটি ওপেন-সোর্স, শক্তিশালী, উচ্চ কার্যকারিতা, নির্ভরযোগ্য, সুরক্ষিত এবং বহুল ব্যবহৃত উচ্চ প্রাপ্যতা টিসিপি/এইচটিটিপি লোড ব্যালেন্সার, প্রক্সি সার্ভার এবং এসএসএল/টিএলএস টার্মিনেটর যা খুব উচ্চ ট্র্যাফিক ওয়েবসাইটের জন্য নির্মিত। এটি লিনাক্স, সোলারিস, ফ্রিবিএসডি, ওপেনবিএসডি পাশাপাশি এআইএক্স অপারেটিং সিস্টেমগুলিতে নির্ভরযোগ্যভাবে চালিত হয়।

এই গাইডটি দেখায় যে এনজিআইএনএক্স ওয়েব সার্ভারের একটি ক্লাস্টারে ট্র্যাফিক নিয়ন্ত্রণ করতে সেন্টোস 8-এ HAProxy এর সাথে একটি উত্সর্গীকৃত উচ্চ প্রাপ্যতা লোড ব্যালেন্সার কীভাবে সেটআপ করা যায়। এটি HAProxy এ কীভাবে SSL/TLS সমাপ্তি কনফিগার করতে হয় তাও প্রদর্শন করে।

সর্বনিম্ন CentOS 8 ইনস্টলেশন সহ মোট 4 টি সার্ভার।

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

পদক্ষেপ 1: ক্লায়েন্ট মেশিনে এনগিনেক্স এইচটিটিপি সার্ভার সেট আপ করা

1. আপনার সমস্ত CentOS 8 ক্লায়েন্ট মেশিনে লগইন করুন এবং প্রদর্শিত হিসাবে dnf প্যাকেজ ম্যানেজার ব্যবহার করে Nginx ওয়েব সার্ভারটি ইনস্টল করুন।

# dnf install Nginx

২. এরপরে, এনগিনেক্স পরিষেবাটি শুরু করুন, আপাতত, এটি সিস্টেম বুট-এ স্বয়ংক্রিয়ভাবে শুরু করতে সক্ষম করুন এবং এটি নিশ্চিত করে নিন যে এটি চলছে এবং তার স্থিতি পরীক্ষা করে চলমান রয়েছে, সিস্টেম্টেক্ট কমান্ড ব্যবহার করে (সমস্ত ক্লায়েন্ট মেশিনে এটি করুন)।

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

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

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

৪. এর পরে, আপনার স্থানীয় মেশিনে একটি ওয়েব ব্রাউজার খুলুন এবং এনগিনেক্স ইনস্টলেশনটি ঠিকঠাক কাজ করছে কিনা তা পরীক্ষা করুন। নেভিগেট করতে ক্লায়েন্টের আইপি ব্যবহার করুন, একবার আপনি এনগিনেক্স পরীক্ষার পৃষ্ঠাটি দেখতে পেয়েছেন, তার অর্থ ক্লায়েন্ট মেশিনে ইনস্টল হওয়া ওয়েব সার্ভারটি সঠিকভাবে কাজ করছে।

৫. এর পরে, আমাদের ক্লায়েন্ট মেশিনগুলিতে পরীক্ষা পৃষ্ঠা তৈরি করা দরকার যা আমরা পরে HAProxy সেটআপ পরীক্ষা করার জন্য ব্যবহার করব।

----------- Web Server #1 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

পদক্ষেপ 2: সেন্টোস 8 এ HAProxy সার্ভার ইনস্টল করা ও কনফিগার করা

Now. এখন নিম্নলিখিত কমান্ডটি চালিয়ে HAProxy সার্ভারে HAProxy প্যাকেজটি ইনস্টল করুন।

# dnf install haproxy

Next. এরপরে, HAProxy পরিষেবাটি শুরু করুন, এটি সিস্টেম বুটে স্বয়ংক্রিয় শুরু করতে সক্ষম করুন এবং এর অবস্থান যাচাই করুন।

# systemctl start haproxy
# systemctl enable haproxy
# systemctl status haproxy

৮. এখন আমরা নীচের কনফিগারেশন ফাইলটি ব্যবহার করে HAProxy কনফিগার করব।

# vi /etc/haproxy/haproxy.cfg

কনফিগারেশন ফাইলটি চারটি প্রধান বিভাগে বিভক্ত।

  • গ্লোবাল সেটিংস - প্রক্রিয়া-বিস্তৃত পরামিতি সেট করে
  • ডিফল্ট - এই বিভাগটি এর ঘোষণার পরে সমস্ত বিভাগের জন্য ডিফল্ট পরামিতি সেট করে।
  • সম্মুখভাগ - এই বিভাগে ক্লায়েন্ট সংযোগ গ্রহণকারী শোনা সকেটের একটি সেট বর্ণনা করে
  • ব্যাকএন্ড - এই বিভাগটি এমন সার্ভারের একটি সেট বর্ণনা করে যাতে প্রক্সি আগত সংযোগগুলিতে সংযুক্ত হবে

গ্লোবাল সেটিংস এবং ডিফল্টের অধীনে বিকল্পগুলি বুঝতে, HAProxy ডকুমেন্টেশন (নিবন্ধের শেষে দেওয়া লিঙ্ক) পড়ুন। এই গাইডের জন্য, আমরা খেলাপি ব্যবহার করব।

9. একবার যখন মোতায়েন করা হয় তখন HAProxy আপনার আইটি অবকাঠামোতে গুরুত্বপূর্ণ ভূমিকা পালন করবে, সুতরাং এটির জন্য লগিং কনফিগার করা একটি মৌলিক প্রয়োজনীয়তা; এটি আপনাকে আপনার ব্যাকএন্ড ওয়েব সার্ভারের প্রতিটি সংযোগ সম্পর্কে অন্তর্দৃষ্টি পেতে অনুমতি দেয়।

লগ প্যারামিটার (নিম্নলিখিত স্ক্রিনশটটিতে হাইলাইট করা) একটি গ্লোবাল সিসলগ সার্ভার ঘোষণা করেছে (যেমন সেন্টসোজে ডিফল্ট আরএসস্লগ) যা লগ বার্তা পাবে। একাধিক সার্ভার এখানে ঘোষণা করা যেতে পারে।

ডিফল্ট কনফিগারেশনটি লোকালহোস্টের (127.0.0.1) এবং লোকাল 2 এর কাছে ডিএসইএলটি সুবিধা কোড যা আরএসস্লগের অধীনে HAProxy লগ বার্তা সনাক্ত করতে ব্যবহৃত হয়।

১০. এর পরে, আপনাকে আরএসএসলগ সার্ভারকে জানাতে হবে যে কীভাবে HAProxy লগ বার্তাগুলি গ্রহণ ও প্রক্রিয়া করা যায়। /Etc/rsyslog.conf এ rsyslog কনফিগারেশন ফাইলটি খুলুন বা /etc/rsyslog.d ডিরেক্টরিতে একটি নতুন ফাইল তৈরি করুন, উদাহরণস্বরূপ /etc/rsyslog.d/haproxy.conf।

# vi /etc/rsyslog.d/haproxy.conf

514 ডিফল্ট পোর্টে ইউডিপির সাথে লগ সংগ্রহ করতে নিম্নলিখিত কনফিগারেশনটি অনুলিপি করুন এবং আটকান।

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

তীব্রতার উপর ভিত্তি করে দুটি পৃথক লগ ফাইল লিখতে আরএসএসলগকে নির্দেশ দেওয়ার জন্য এই লাইনগুলি যুক্ত করুন, যেখানে স্থানীয় 2 হ্যাপ্রোক্সি কনফিগারেশনের উপরে উল্লিখিত সুবিধা কোড facility

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

১১. ফাইলটি সংরক্ষণ করুন এবং এটি বন্ধ করুন। তারপরে সাম্প্রতিক পরিবর্তনগুলি প্রয়োগ করতে আরএসস্লগ পরিষেবা পুনরায় চালু করুন।

# systemctl restart rsyslog

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

নিম্নলিখিত কনফিগারেশন HAProxy পরিসংখ্যান পৃষ্ঠাতে পরিবেশন করতে ব্যবহৃত একটি শোনার বিভাগ সংজ্ঞায়িত করে। বাইন্ড প্যারামিটার একটি শ্রোতার একটি প্রদত্ত আইপি ঠিকানা ( * এই ক্ষেত্রে সকলের জন্য) এবং পোর্ট (9000) এ নিয়োগ করে।

পরিসংখ্যান সক্ষম সেটিংস পরিসংখ্যান পৃষ্ঠাকে সক্ষম করে যা ইউআরআই/পরিসংখ্যানগুলি ব্যবহার করে অ্যাক্সেস করা হবে (অর্থাত http:// সার্ভার_ইপ: 9000/পরিসংখ্যান )।

পৃষ্ঠাগুলি অ্যাক্সেস করার সময় পরিসংখ্যান প্রমাণীকরণ সেটিংস একটি মৌলিক প্রমাণীকরণ যুক্ত করতে ব্যবহৃত হয় (আপনার পছন্দসই ব্যবহারকারীর নাম এবং পাসওয়ার্ডের সাথে হ্যাপ্রোক্সি এবং এল [ইমেল সুরক্ষিত] প্রতিস্থাপন করুন)।

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:[email 

13. পরবর্তী কনফিগারেশনটি টিএল নামক একটি ফ্রন্টএন্ড অংশটি সংজ্ঞায়িত করে (আপনি নিজের পছন্দ মতো একটি নাম দিতে পারেন)। মোড প্যারামিটারটি HAProxy পরিচালিত মোডটিকে সংজ্ঞায়িত করে।

অনুরোধ থেকে নিষ্কাশিত সামগ্রীর উপর ভিত্তি করে সিদ্ধান্ত নিতে এসিএল (অ্যাক্সেস নিয়ন্ত্রণ তালিকা) প্যারামিটার ব্যবহার করা হয়। এই উদাহরণে, অনুরোধটি যদি এটি এসএসএল এর মাধ্যমে না করা হয় তবে এটি সরল HTTP হিসাবে বিবেচিত হবে।

তারপরে অনুরোধটিতে একটি HTTP শিরোনাম যুক্ত করতে http- অনুরোধ সেট-শিরোনাম সেটিংস ব্যবহার করা হয়। এটি এনগিনেক্সকে জানাতে সহায়তা করে যে প্রাথমিক অনুরোধটি এইচটিটিপি (বা পোর্ট 80 এর মাধ্যমে) মাধ্যমে করা হয়েছিল।

ডিফল্ট_ব্যাকেন্ড বা ইউজ_ব্যাকেন্ডের নির্দেশিকা ব্যাকএন্ড সার্ভারগুলি সংজ্ঞায়িত করে, এই ক্ষেত্রে, টিএল_ওয়েব_সার্ভার দ্বারা রেফারেন্স করা হয়।

নোট করুন যে কোনও অনুরোধটি যদি ইউজ_ব্যাকেন্ড বা ডিফল্ট_ব্যাকেন্ডের নির্দেশিকা দ্বারা রাউট না করা হয় তবে HAProxy একটি "503 পরিষেবা অনুপলব্ধ ত্রুটি" ফিরিয়ে দেবে।

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

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

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

সার্ভারের নির্দেশটি sever_name (উদাঃ ওয়েবসরভি 1) ফর্ম্যাট, সার্ভার_আইপি: পোর্ট এবং বিকল্পগুলিতে আপস্ট্রিম সার্ভারগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয়।

একটি মূল বিকল্প হ'ল চেক যা HAProxy কে কোনও সার্ভারের উপলভ্যতা পরীক্ষা করে রাখা এবং স্ট্যাটাস পৃষ্ঠায় রিপোর্ট করতে বলে।

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

নিম্নলিখিত যে স্ক্রিনশটটিতে দেখানো হয়েছে তেমন কোনও অন্যান্য সম্মুখভাগ এবং ব্যাকএন্ড বিভাগ মন্তব্য করুন। ফাইলটি সংরক্ষণ করুন এবং এটি বন্ধ করুন।

15. এখন নতুন পরিবর্তনগুলি প্রয়োগ করতে HAProxy পরিষেবাটি পুনরায় চালু করুন।

# systemctl restart haproxy

১.. এরপরে, ক্লায়েন্টের অনুরোধগুলি নীচের হিসাবে গ্রহণ করার জন্য ফায়ারওয়ালে এইচটিটিপি (পোর্ট 80) এবং এইচটিটিপিএস (পোর্ট 433) পরিষেবাগুলি চালু আছে তা নিশ্চিত করুন। এছাড়াও, পরিসংখ্যান পৃষ্ঠাতে অ্যাক্সেসের জন্য ফায়ারওয়ালে 9000 পোর্ট খুলুন এবং ফায়ারওয়াল সেটিংস পুনরায় লোড করুন।

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent –add-service=https
# firewall-cmd --zone=public --permanent --add-port=9000/tcp
# firewall-cmd --reload

পদক্ষেপ 3: HAProxy সেটআপ পরীক্ষা এবং পরিসংখ্যান দেখুন

17. এখন সময় HAPrxoy সেটআপ পরীক্ষা করার। স্থানীয় ডেস্কটপ মেশিনে আপনি যেখান থেকে সমস্ত সার্ভার অ্যাক্সেস করছেন সেখানে ডামি সাইট ডোমেন ব্যবহার করতে সক্ষম করতে/ইত্যাদি/হোস্ট ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন।

10.42.0.247  www.tecmint.lan

18. তারপরে একটি ব্রাউজার খুলুন এবং সার্ভার ঠিকানা বা সাইট ডোমেন ব্যবহার করে নেভিগেট করুন।

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. HAProxy পরিসংখ্যান পৃষ্ঠাতে অ্যাক্সেস করতে, নিম্নলিখিত ঠিকানাটি ব্যবহার করুন।

http://10.42.0.247:9000/stats

তারপরে আপনি HAProxy কনফিগারেশন ফাইলে সংজ্ঞায়িত ব্যবহারকারীর নাম এবং পাসওয়ার্ড ব্যবহার করুন (পরিসংখ্যান প্রমাণীকরণের প্যারামিটারটি দেখুন)।

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

রঙের কোডগুলি কীভাবে কাজ করে সম্পর্কিত স্থিতি প্রতিবেদন কাজ করে তা প্রদর্শনের জন্য, আমরা একটি ব্যাক-এন্ড সার্ভার রেখেছি।

পদক্ষেপ 4: স্ব-স্বাক্ষরিত এসএসএল শংসাপত্র ব্যবহার করে HAProxy এ HTTPS কনফিগার করা

20. এই চূড়ান্ত বিভাগে, আমরা HAProxy সার্ভার এবং ক্লায়েন্টের মধ্যে সমস্ত যোগাযোগ সুরক্ষিত করার জন্য কীভাবে SSL/TLS কনফিগার করতে হয় তা প্রদর্শিত করব। HAProxy চারটি বড় HTTPS কনফিগারেশন মোডগুলিকে সমর্থন করে তবে এই গাইডের জন্য আমরা SSL/TLS অফলোডিং ব্যবহার করব।

এসএসএল/টিএলএস অফলোডিং মোডে, HAProxy ক্লায়েন্ট-সাইডের ট্র্যাফিকটিকে ডিক্রি করে এবং ব্যাকএন্ড সার্ভারগুলিতে পরিষ্কার ট্র্যাফিকের সাথে সংযুক্ত হয়ে যায়।

আমরা প্রদর্শিত হিসাবে শংসাপত্র এবং কী তৈরি করে শুরু করব (স্ক্রিনশটটিতে হাইলাইট করা হিসাবে শংসাপত্র তৈরির সময় আপনার সংস্থার বিবরণের উপর ভিত্তি করে প্রশ্নের উত্তর দিন)।

# mkdir /etc/ssl/tecmint.lan
# cd /etc/ssl/tecmint.lan/
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
# cd /etc/ssl/tecmint.lan/
# cat tecmint.crt tecmint.key >tecmint.pem
# ls -l

21. এরপরে, HAProxy কনফিগারেশন ফাইলটি খুলুন (/etc/haproxy/haproxy.cfg) এবং সম্মুখ-প্রান্তে বিভাগটি সম্পাদনা করুন।

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

ফাইলটি সংরক্ষণ করুন এবং এটি বন্ধ করুন।

22. তারপরে নতুন পরিবর্তনগুলি প্রয়োগ করতে HAProxy পরিষেবাটি পুনরায় চালু করুন।

# systemctl restart haproxy.service

23. এর পরে, একটি ওয়েব ব্রাউজার খুলুন এবং আরও একবার সাইটে অ্যাক্সেস করার চেষ্টা করুন। স্ব-স্বাক্ষরিত শংসাপত্রের কারণে ব্রাউজারটি একটি ত্রুটি দেখাবে, এগিয়ে যাওয়ার জন্য অ্যাডভান্সড ক্লিক করুন।

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

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