Cài nhanh HAProxy trong 5 phút
Nếu bạn cần một bộ điều hướng traffic hoạt động ngay để chạy test, đây là lộ trình ngắn nhất. Mình thường dùng cách này để kiểm tra thông suốt đường truyền trước khi nhúng tay vào đống cấu hình phức tạp.
1. Cài đặt
sudo apt update
sudo apt install haproxy -y
2. Cấu hình Load Balancing cơ bản
Mở file cấu hình bằng lệnh:
sudo nano /etc/haproxy/haproxy.cfg
Dán đoạn code sau vào cuối file. Đừng quên thay IP 192.168.1.10 và 192.168.1.11 bằng địa chỉ IP thực tế của các node backend:
frontend http_front
bind *:80
default_backend web_servers
backend web_servers
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
3. Kích hoạt dịch vụ
sudo systemctl restart haproxy
Xong! Giờ hãy thử truy cập IP của server HAProxy. Bạn sẽ thấy lưu lượng được phân phối luân phiên sang hai máy chủ phía sau.
Tại sao lại chọn HAProxy cho Layer 7?
Ngày trước mình hay tự hỏi: Nginx cũng làm được Load Balancer, tại sao phải cài thêm HAProxy? Câu trả lời nằm ở sự chuyên hóa. HAProxy được thiết kế chỉ để làm một việc duy nhất: Điều phối. Nó có thể xử lý hàng chục nghìn kết nối đồng thời mà tốn cực ít tài nguyên CPU.
Sức mạnh của Layer 7 (Application Layer)
Hãy coi HAProxy như một người điều phối thông minh. Ở Layer 4, nó chỉ biết IP và Port. Nhưng ở Layer 7, nó có thể “soi” sâu vào gói tin HTTP để biết khách hàng đang yêu cầu gì.
Ví dụ thực tế: Bạn có thể đẩy toàn bộ request ảnh (.jpg, .png) sang một cụm server chuyên lưu trữ, còn các request API tính toán nặng thì đẩy sang một cụm server có CPU khủng hơn. Layer 4 hoàn toàn không làm được chuyện này.
Ba trụ cột trong cấu hình
- Frontend: Cổng đón khách. Nơi bạn định nghĩa IP, Port và các chứng chỉ SSL.
- Backend: Đội ngũ phục vụ. Đây là nhóm các server thực tế xử lý logic ứng dụng.
- ACL (Access Control List): Bộ lọc điều kiện. Dựa vào đây để quyết định khách nào đi vào backend nào.
Cấu hình thực chiến cho môi trường Production
Khi đưa vào hệ thống thực tế chạy cho khách hàng, cấu hình “Quick start” phía trên là chưa đủ. Bạn cần các công cụ giám sát để không phải thức đêm trực hệ thống.
1. Dashboard giám sát (Stats)
HAProxy tích hợp sẵn một trang dashboard trực quan. Nó cho bạn biết server nào đang “sống khỏe”, server nào đang quá tải hoặc bị treo. Thêm đoạn này vào file cấu hình:
listen stats
bind *:8080
stats enable
stats uri /stats
stats refresh 30s
stats auth admin:password_cuc_kho # Hãy đổi mật khẩu ngay
Truy cập http://IP_CUA_BAN:8080/stats để theo dõi biểu đồ real-time.
2. Health Check: Đảm bảo backend luôn sạch
Đừng chỉ kiểm tra xem cổng 80 có mở không, vì đôi khi web server vẫn chạy nhưng ứng dụng bên trong đã treo (lỗi 500). Mình thường cấu hình HAProxy gửi một request HTTP thực thụ để kiểm tra:
backend web_servers
balance leastconn # Server nào ít khách nhất thì đẩy vào
option httpchk GET /health_check.php
http-check expect status 200
server web1 192.168.1.10:80 check inter 2s fall 3 rise 2
server web2 192.168.1.11:80 check inter 2s fall 3 rise 2
Thông số inter 2s nghĩa là cứ 2 giây kiểm tra một lần. Nếu hỏng 3 lần (fall 3), HAProxy sẽ gạch tên server đó khỏi danh sách phục vụ để tránh khách gặp lỗi.
Vấn đề thường gặp và cách xử lý
Dưới đây là hai lỗi kinh điển mà hầu như ai mới cài HAProxy lần đầu cũng mắc phải.
Mất IP thật của khách hàng
Mặc định, web server backend chỉ nhìn thấy IP của con HAProxy. Điều này khiến việc thống kê lượt truy cập hoặc chặn spam trở nên vô nghĩa. Để sửa lỗi này, hãy thêm option forwardfor.
backend web_servers
option forwardfor
# Đừng quên cấu hình real_ip ở phía Nginx/Apache backend
Sticky Sessions: Giữ chân khách hàng
Nếu ứng dụng của bạn lưu session trên server (không dùng Redis), khách đang đăng nhập ở server 1 mà bị đẩy sang server 2 sẽ bị văng ra ngay. Cách giải quyết đơn giản nhất là dùng cookie định danh:
backend web_servers
balance roundrobin
cookie SERVERID insert indirect nocache
server web1 192.168.1.10:80 check cookie s1
server web2 192.168.1.11:80 check cookie s2
HAProxy sẽ đính một mẩu cookie nhỏ vào trình duyệt để đảm bảo lần tới khách quay lại, họ vẫn gặp đúng server cũ.
Lời kết
Triển khai HAProxy không quá khó, cái khó là làm sao để cấu hình chịu được tải lớn và ổn định. Một mẹo nhỏ: Luôn chạy lệnh haproxy -c -f /etc/haproxy/haproxy.cfg để check lỗi cú pháp trước khi restart. Một dấu phẩy đặt sai chỗ cũng có thể làm sập toàn bộ hệ thống của bạn đấy!

