আমি ২টি VPS দিয়ে Active active cluster করতে চাই বিস্তারিত ভাবে গাইড করো।
আমার ভিপিস এর পাবলিক IP সমূহ
VPS 1 104.18.26.90 (ip) nd1.joypurhost.com9 (Hostname)
VPS 2 104.18.27.92 (ip) nd2.joypurhost.com9 (Hostname)
সাথে আমি চাচ্ছি VPS 1 যদি 70% লোড হয় তখন ট্রাফিক VPS 2 থেকে রাউট হবে। cluster টিতে করতে যদি কোনো কন্ট্রোল প্যানেল ( যেমনঃ cpanel / webuzo / cwp etc বা তোমার সাজেস্টেড কোনো কন্ট্রোল প্যানেল ) ব্যবহার করা হয় তাহলে আমার জন্য খুব ভালো হয় কারণ আমি টেকনিক্যাল পারসন নয়।
Active-Active ক্লাস্টার সেটআপের জন্য নিচের ধাপগুলো অনুসরণ করুন। এই গাইডে আমরা কন্ট্রোল প্যানেল হিসেবে Webuzo ব্যবহার করব এবং Cloudflare Load Balancer এর মাধ্যমে লোড ম্যানেজমেন্ট করব (যেহেতু এটি ইউজার-ফ্রেন্ডলি এবং কম টেকনিক্যাল জ্ঞান প্রয়োজন)।
প্রস্তুতি:
VPS সেটআপ:
VPS 1:
nd1.joypurhost.com
(104.18.26.90)VPS 2:
nd2.joypurhost.com
(104.18.27.92)দুটি VPS-ই Ubuntu 20.04/22.04 বা CentOS 7/8 হতে হবে (Webuzo সাপোর্ট করে এমন OS)।
ডোমেইন প্রস্তুতি:
আপনার ডোমেইন (যেমন:
example.com
) Cloudflare-এর সাথে কনফিগার করুন।
ধাপ ১: Webuzo ইন্সটলেশন (দুই VPS-এ)
Webuzo ডাউনলোড ও ইন্সটল:
wget -N http://files.webuzo.com/install.sh chmod +x install.sh ./install.sh
ইন্সটলের সময় প্রশ্নের উত্তর দিন (রুট পাসওয়ার্ড, ইমেইল ইত্যাদি)।
ওয়েব সার্ভার ও ডেটাবেস কনফিগার:
Webuzo প্যানেলে লগিন করে Apache/Nginx, PHP, MySQL ইন্সটল করুন।
ধাপ ২: ডেটা সিঙ্ক্রোনাইজেশন (দুই সার্ভারে)
ফাইল সিঙ্ক্রোনাইজেশন (rsync বা lsyncd):
VPS 1-এ:
rsync -avz /var/www/html/ [email protected]:/var/www/html/
স্বয়ংক্রিয় সিঙ্কের জন্য Cron Job সেট করুন (প্রতি ৫ মিনিটে)।
MySQL Master-Master রেপ্লিকেশন:
Webuzo-র phpMyAdmin ব্যবহার করে এই গাইড অনুসরণ করুন।
ধাপ ৩: Cloudflare Load Balancer সেটআপ
Cloudflare অ্যাকাউন্টে লগিন করুন:
DNS-এ
example.com
এর রেকর্ড হিসেবে দুটি VPS-এর IP যুক্ত করুন (A রেকর্ড)।
লোড ব্যালেন্সার তৈরি করুন:
Traffic > Load Balancing এ গিয়ে “Create Load Balancer” চাপুন।
Hostname:
example.com
Origin Servers:
VPS 1:
nd1.joypurhost.com
(104.18.26.90)VPS 2:
nd2.joypurhost.com
(104.18.27.92)
হেলথ চেক কনফিগার:
Health Check Path:
/health
(নিচের স্ক্রিপ্ট ব্যবহার করুন)।Advanced Settings: Check Interval: 60 seconds.
ট্রাফিক নিয়ন্ত্রণ:
Traffic Steering: “Weighted” পদ্ধতি নির্বাচন করুন।
VPS 1-এর Weight: 70, VPS 2-এর Weight: 30 (শুরুতে)।
Fallback Pool: VPS 2 নির্বাচন করুন।
ধাপ ৪: লোড মোনিটরিং স্ক্রিপ্ট (দুই সার্ভারে)
হেলথ চেক এন্ডপয়েন্ট তৈরি করুন:
/var/www/html/health.php
ফাইল তৈরি করুন:<?php $load = sys_getloadavg()[0]; $max_load = 0.7; // 70% লোড if ($load > $max_load) { http_response_code(503); // সার্ভার ব্যস্ত } else { echo "OK"; } ?>
Cloudflare-কে লোড রেসপন্স জানান:
এই স্ক্রিপ্টের মাধ্যমে VPS 70% লোডে পৌঁছালে Cloudflare অটোমেটিক VPS 2-এ ট্রাফিক পাঠাবে।
ধাপ ৫: DNS কনফিগারেশন
Cloudflare DNS-এ লোড ব্যালেন্সার IP যুক্ত করুন:
example.com
এর A রেকর্ড Cloudflare-এর Load Balancer IP-তে পয়েন্ট করুন।
পরীক্ষা:
লোড টেস্ট করুন:
VPS 1-এ ভারী ট্রাফিক জেনারেট করুন (যেমন:
stress --cpu 8
)।Cloudflare প্যানেলে দেখুন VPS 1 “Unhealthy” স্ট্যাটাস দেখালে ট্রাফিক VPS 2-এ চলে যাবে।
সতর্কতা:
ডেটা সিঙ্ক্রোনাইজেশন ও রেপ্লিকেশন নিয়মিত মনিটর করুন।
SSL সার্টিফিকেট সক্রিয় রাখুন (Cloudflare AutoSSL বা Let’s Encrypt ব্যবহার করুন)।
এই সেটআপে আপনি High Availability ও লোড ব্যালেন্সিং পাবেন, আর Webuzo ও Cloudflare-এর GUI ইন্টারফেস আপনার কাজ সহজ করবে!
আরো বিস্তারিত ভাবে গাইড কারো সাথে cloudflare চেঞ্জ করে অন্য কিসু ব্যবহার করো যা ফ্রি বা ওপেন সৌর্স
নিচে Open-Source/ফ্রি টুলস ব্যবহার করে Active-Active ক্লাস্টার সেটআপের সম্পূর্ণ গাইড দেওয়া হলো। এই গাইডে আমরা HAProxy (লোড ব্যালেন্সার) এবং lsyncd (রিয়েল-টাইম ফাইল সিঙ্ক) ব্যবহার করব। এছাড়াও, MySQL/MariaDB Galera Cluster ব্যবহার করে ডেটাবেস সিঙ্ক্রোনাইজেশন নিশ্চিত করব।
প্রয়োজনীয় টুলস:
HAProxy – ওপেন সোর্স লোড ব্যালেন্সার (লোড অনুযায়ী ট্রাফিক ডিস্ট্রিবিউট করে)।
lsyncd – রিয়েল-টাইম ফাইল সিঙ্ক্রোনাইজেশন টুল।
MariaDB Galera Cluster – অটো-সিঙ্ক ডেটাবেস ক্লাস্টার।
Glances – সার্ভার লোড মোনিটরিং টুল।
ধাপ ১: Webuzo ইন্সটলেশন (দুই VPS-এ)
Webuzo ইন্সটল করুন:
wget -N http://files.webuzo.com/install.sh chmod +x install.sh ./install.sh
ইন্সটলেশনের সময় Admin প্যানেলের ইউজারনেম, পাসওয়ার্ড সেট করুন।
ওয়েব সার্ভার কনফিগার করুন:
Webuzo প্যানেলে Apache/Nginx, PHP, MariaDB ইন্সটল করুন।
ধাপ ২: রিয়েল-টাইম ফাইল সিঙ্ক (lsyncd)
lsyncd ইন্সটল করুন (দুই সার্ভারে):
apt update && apt install lsyncd -y # Ubuntu/Debian yum install epel-release && yum install lsyncd -y # CentOS
কনফিগারেশন ফাইল তৈরি করুন (
/etc/lsyncd.lua
):settings { logfile = "/var/log/lsyncd.log", statusFile = "/var/log/lsyncd-status.log" } sync { default.rsync, source = "/var/www/html", target = "[email protected]:/var/www/html", # VPS 2-এর IP rsync = { archive = true, compress = true, verbose = true, _extra = {"--delete"} # সোর্সে ডিলিট হলে টার্গেটেও ডিলিট করবে } }
VPS 2-এও একই কনফিগারেশন করুন (সোর্স ও টার্গেট ঠিকানা উল্টে দিন)।
lsyncd সার্ভিস রিস্টার্ট করুন:
systemctl restart lsyncd
ধাপ ৩: MariaDB Galera Cluster (অটো-সিঙ্ক ডেটাবেস)
MariaDB রিপোজিটরি যোগ করুন (দুই সার্ভারে):
apt install software-properties-common -y apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.5/ubuntu focal main' apt update
Galera Cluster ইন্সটল করুন:
apt install mariadb-server galera-4 -y
কনফিগারেশন ফাইল এডিট করুন (
/etc/mysql/my.cnf
):[mysqld] bind-address = 0.0.0.0 wsrep_on = ON wsrep_provider = /usr/lib/galera/libgalera_smm.so wsrep_cluster_name = "joypur_cluster" wsrep_cluster_address = "gcomm://104.18.26.90,104.18.27.92" # দুই VPS-এর IP wsrep_node_address = "104.18.26.90" # VPS 1-এর IP (VPS 2-এ এটি পরিবর্তন করুন) wsrep_sst_method = rsync
ক্লাস্টার শুরু করুন:
VPS 1-এ:
systemctl stop mysql galera_new_cluster systemctl start mysql
VPS 2-এ:
systemctl stop mysql systemctl start mysql
ধাপ ৪: HAProxy লোড ব্যালেন্সার সেটআপ (একটি নতুন VPS-এ বা যেকোনো একটিতে)
HAProxy ইন্সটল করুন:
apt install haproxy -y # Ubuntu/Debian yum install haproxy -y # CentOS
কনফিগারেশন ফাইল এডিট করুন (
/etc/haproxy/haproxy.cfg
):global log /dev/log local0 maxconn 4000 user haproxy group haproxy defaults mode http timeout connect 10s timeout client 30s timeout server 30s frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_back backend http_back balance roundrobin server nd1 104.18.26.90:80 check weight 70 # VPS 1 server nd2 104.18.27.92:80 check weight 30 # VPS 2 listen stats bind *:8080 stats enable stats uri / stats realm HAProxy Statistics stats auth admin:your_password # পাসওয়ার্ড সেট করুন
লোড-বেইজড হেলথ চেক স্ক্রিপ্ট যোগ করুন:
প্রত্যেক VPS-এ
/var/www/html/health
ফাইল তৈরি করুন:#!/bin/bash load=$(awk '{print $1}' /proc/loadavg) max_load=0.7 # 70% লোড if (( $(echo "$load > $max_load" | bc -l) )); then echo "HTTP/1.1 503 Service Unavailable\r\n" else echo "HTTP/1.1 200 OK\r\n" fi
HAProxy কনফিগারেশনে হেলথ চেক যোগ করুন:
backend http_back option httpchk GET /health http-check expect status 200 server nd1 104.18.26.90:80 check weight 70 server nd2 104.18.27.92:80 check weight 30
HAProxy রিস্টার্ট করুন:
systemctl restart haproxy
ধাপ ৫: লোড মোনিটরিং (Glances)
Glances ইন্সটল করুন (দুই সার্ভারে):
apt install glances -y
গ্রাফিক্যাল ড্যাশবোর্ড চালু করুন:
glances -w # ব্রাউজারে http://VPS_IP:61208 ওপেন করুন
ধাপ ৬: DNS কনফিগারেশন
আপনার ডোমেইন প্রোভাইডারে HAProxy সার্ভারের IP-তে A রেকর্ড সেট করুন।
ট্রাফিক টেস্টিং:
VPS 1-এ ভারী লোড দিন:
sudo apt install stress stress --cpu 4 --timeout 300s # 4 কোরে ৫ মিনিটের জন্য লোড
HAProxy স্ট্যাটাস পেজে (
http://haproxy_ip:8080
) চেক করুন:VPS 1 “DOWN” বা “MAINT” দেখালে ট্রাফিক VPS 2-এ যাবে।
সমস্যা সমাধান:
ফাইল সিঙ্ক ইস্যু:
lsyncd
লগ চেক করুন (/var/log/lsyncd.log
)।ডেটাবেস সিঙ্ক ইস্যু:
SHOW STATUS LIKE 'wsrep_%';
MySQL কমান্ডে গ্যালেরা স্ট্যাটাস চেক করুন।HAProxy হেলথ চেক:
curl -I http://VPS_IP/health
দিয়ে রেসপন্স ভেরিফাই করুন।
এই সেটআপে আপনি ফুলি অটোমেটিক Active-Active ক্লাস্টার পাবেন, যেখানে লোড ৭০% ছাড়ালে HAProxy অটোমেটিক ট্রাফিক অন্যটিতে রিডিরেক্ট করবে। সব টুলস ফ্রি এবং ওপেন সোর্স!