๐ Linux Apache ้ซๅฏ็จๆถๆง:้็ฏ้ป Active-Active ๅฎๆด้จ็ฝฒๆๅ
ๅจไผๆฅญ็ด Web ๆถๆงไธญ,ๅฎไธ Apache ไผบๆๅจๅพๅฎนๆๆ็บๆ่ฝ็ถ้ ธ่ๅฎ้ปๆ ้(SPOF)。 ๆฌๆๅๆไฝ ๆ้ ๅ ฉๅฐ Apache ๅๆๆไพๆๅ็ Active-Active HA ๆถๆง,ๅ ๅซ่ฒ ่ผๅนณ่กก、ๅฅๅบทๆชขๆฅ、Session ๅๆญฅ่ๆ ้ๅๆๆต็จ,ไธๆฌกๅธถไฝ ๅฎๆ็็ข็ญ็ด้จ็ฝฒ。
๐ ไธ、ๆถๆงๆฆ่ฆฝ(Active-Active ๆฏไป้บผ?)
Active-Active ๆๅ ฉๅฐไปฅไธไธปๆฉ「ๅๆๆไพๆๅ」,่ซๆฑๅนณๅๅๆฃ่ณๅคๅ็ฏ้ป,ไปฅๆๅ:
- ⚡ ๆ่ฝ(่ฒ ่ผๅๆฃ)
- ๐ก️ ้ซๅฏ็จ(ไปปไธ็ฏ้ปๆ ้ไปไธไธญๆท)
- ๐ ๅฏๆดๅ ๆง(ๆฐดๅนณๆดๅฑ Web ็ฏ้ป)
ไฝฟ็จๅฐ็ๅ
ไปถ:
1. Apache(Web Server)
2. HAProxy / Nginx(่ฒ ่ผๅนณ่กกๅจ)
3. Keepalived(VIP + ๅฅๅบทๆชขๆฅ/Failover)
4. rsync / unison / GlusterFS(็ถฒ็ซ่ณๆๅๆญฅ้ธ้
)
๐ก ไบ、ๆถๆงๆๆฒๅ
+--------------------------+
| VIP 192.168.1.200 |
| (Keepalived) |
+-----------+--------------+
|
+-------+--------+
| Load Balancer |
| (HAProxy/Nginx)|
+-------+--------+
|
+-----------+-------------+
| |
+-------+--------+ +--------+-------+
| Apache Node A | | Apache Node B |
| 192.168.1.10 | | 192.168.1.11 |
+-----------------+ +----------------+
๐ ไธ、ๅฎ่ฃ Apache(ๅ ฉๅฐ้ฝ่ฆ)
# Rocky Linux / CentOS
sudo dnf install httpd -y
# Ubuntu / Debian
sudo apt install apache2 -y
sudo systemctl enable --now httpd
sudo systemctl status httpd
็ขบ่ช่ฝๅพๅ ฉๅฐ็ๅฐไธๅ้ ้ข(ๆนไพฟๅพ็บ้ฉ่ญ่ฒ ่ผๅนณ่กก):
echo "Node A Web" | sudo tee /var/www/html/index.html
echo "Node B Web" | sudo tee /var/www/html/index.html
๐ ๅ、็ถฒ็ซ่ณๆๅๆญฅ(3 ็จฎๆนๅผ)
้ธ้ A:rsync ๆ็จๅๆญฅ(็ฐกๅฎ、ๅฎๅ จ)
# Node A → Node B
*/1 * * * * rsync -az /var/www/html/ root@192.168.1.11:/var/www/html/
้ธ้ B:Unison ้ๅๅๆญฅ(ๆจ่ฆ)
้ฉๅ้ๅไฟฎๆน็ๆ ๅข,ไพๅฆๅคไบบ้็ผ。
้ธ้ C:GlusterFS(ไผๆฅญ็ด)
ๅ ฉ็ฏ้ป็ตๆ replicated volume,ๅฏฆ็พๅณๆๅๆญฅ。
⚖️ ไบ、้จ็ฝฒ่ฒ ่ผๅนณ่กก(HAProxy / Nginx ไปป้ธๅ ถไธ)
้ธ้ A:HAProxy(ๆๆจ่ฆ)
sudo dnf install haproxy -y
/etc/haproxy/haproxy.cfg
frontend http-in
bind *:80
default_backend apache-backend
backend apache-backend
balance roundrobin
mode http
option httpchk
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
sudo systemctl enable --now haproxy
้ธ้ B:Nginx ็ถ Load Balancer
upstream apache_cluster {
server 192.168.1.10;
server 192.168.1.11;
}
server {
listen 80;
location / {
proxy_pass http://apache_cluster;
}
}
๐ท ๅ ญ、Keepalived + VIP(็ๆญฃๅๅฐไธไธญๆท)
่ฎ LB ๅฝขๆ Active-Standby ๆ Active-Active(้ VIP)。ๆญค่็คบ็ฏๅธธ็จ Active-Standby ไปฅ้ฟๅ ARP ๆททไบ。
ๅฎ่ฃ:
sudo dnf install keepalived -y
่จญๅฎไธป็ฏ้ป(LB1):
/etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.200
}
}
ๅๆด็ฏ้ป(LB2):
state BACKUP
priority 100
ๅๅ:
sudo systemctl enable --now keepalived
๐งช ไธ、้ฉ่ญ Active-Active ๆๆ
while true; do curl -s http://192.168.1.200 | grep Node; sleep 1; done
้ ๆๆ้กฏ็คบ:
Node A Web
Node B Web
Node A Web
Node B Web
๐ฆ ๅ ซ、ๆ ้ๆธฌ่ฉฆ(ๅฟ ๅ)
# ้ๆ Node A Apache
sudo systemctl stop httpd
# ่งๅฏๆฏๅฆไปๆญฃๅธธๆๅ
curl http://192.168.1.200
ๆๅช็ๅฐ Node B,ไฝไธๆไธญๆท。
๐ ็ต่ช
้้ HAProxy + Keepalived + Apache,ไฝ ๅทฒๅฎๆไผๆฅญ็ด Active-Active ้ซๅฏ็จๆถๆง。 ๆญคๆถๆงๅ ทๅ่ฒ ่ผๅ่กก、ๆ ้ๅๆ、่ณๆๅๆญฅ,ๅฏๆ็จๆผไธญๅคงๅ็ถฒ็ซ、API、ๅพ็ซฏๆๅ็ญๅ ดๆฏ。 ่ฅ้ๆดๅคงๅๆถๆง,ๅฏๅๅผๅ ฅ Kubernetes、CephFS、Redis Session Cluster ็ญๆดๅ ๆนๆก。
๐ ๅปถไผธ้ฑ่ฎ
- Linux ้ฒ็ซ็ๆดๅ:firewalld / iptables / nftables
- OpenVPN + PKI ไผๆฅญ็จๆถ็ซฏ่ทฏ็ฑๅฎๆดๆๅญธ
- Linux ็ฃๆงๅทฅๅ ท:top、htop、glances、nmon、dstat ๅฎๆดๆๅ
- Linux NFS ไผๆฅญ้จ็ฝฒๅฎๆดๆๅ
— WWFandy・็ณป็ตฑ่็ถฒ่ทฏ็ญ่จ
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ