Cấu hình VPS thành High-Availability Reverse Proxy với HAProxy và Keepalived: Giải pháp tối ưu đảm bảo Website không bao giờ sập
1. Thách thức của tính sẵn sàng cao (High Availability) trong hạ tầng Web
Đối với các doanh nghiệp vận hành trên nền tảng số, tính ổn định của website và ứng dụng là yếu tố sống còn. Một kiến trúc máy chủ đơn lẻ (Single Server) luôn tiềm ẩn rủi ro lớn: chỉ cần một sự cố phần cứng, lỗi hệ điều hành hoặc quá tải traffic, toàn bộ hệ thống sẽ rơi vào trạng thái downtime. Để giải quyết triệt để điểm nghẽn này (Single Point of Failure - SPoF), các kỹ sư hạ tầng sử dụng mô hình High-Availability (HA) Reverse Proxy.
Hệ thống HA đảm bảo rằng nếu một máy chủ cân bằng tải gặp sự cố, một máy chủ dự phòng khác sẽ ngay lập tức thay thế mà người dùng cuối không hề nhận ra sự gián đoạn nào. Trong bài viết này, chúng ta sẽ kết hợp hai công cụ mã nguồn mở mạnh mẽ và phổ biến nhất hiện nay: HAProxy (đóng vai trò Reverse Proxy/Load Balancer) và Keepalived (đóng vai trò quản lý IP ảo định tuyến lỗi).
2. Tổng quan về HAProxy và Keepalived
HAProxy là gì?
HAProxy (High Availability Proxy) là một phần mềm cân bằng tải (Load Balancer) và Reverse Proxy cực kỳ nhanh và đáng tin cậy dành cho các ứng dụng dựa trên TCP và HTTP. Nó có khả năng xử lý hàng triệu kết nối đồng thời, phân phối lưu lượng truy cập đến các backend server một cách thông minh dựa trên các thuật toán như Round Robin, Least Connections, hoặc Source IP.
Keepalived là gì?
Nếu HAProxy chịu trách nhiệm điều hướng traffic đến các web server, thì Keepalived chịu trách nhiệm bảo vệ chính các máy chủ HAProxy đó. Keepalived sử dụng giao thức VRRP (Virtual Router Redundancy Protocol) để tạo ra một địa chỉ IP ảo đại diện (Virtual IP - VIP). Địa chỉ VIP này sẽ tự động chuyển dịch giữa hai máy chủ HAProxy (Master và Backup). Khi máy chủ Master gặp sự cố, Keepalived trên máy chủ Backup sẽ phát hiện và chiếm quyền kiểm soát VIP trong vài mili-giây.
3. Mô hình kiến trúc triển khai
Để triển khai giải pháp này, chúng ta cần tối thiểu 2 máy chủ VPS cho tầng Proxy và các máy chủ backend xử lý ứng dụng:
- Virtual IP (VIP): 192.168.1.100 (IP chung mà domain của bạn sẽ trỏ về).
- Load Balancer 1 (Master): 192.168.1.10 – Cài đặt HAProxy + Keepalived (Master).
- Load Balancer 2 (Backup): 192.168.1.11 – Cài đặt HAProxy + Keepalived (Backup).
- Web Servers (Backend): 192.168.1.20 và 192.168.1.21 (Chạy Nginx hoặc Apache).
4. Hướng dẫn cấu hình chi tiết trên VPS
Bước 1: Cài đặt HAProxy và Keepalived trên cả hai VPS
Trước tiên, hãy cập nhật hệ thống và tiến hành cài đặt các gói phần mềm cần thiết trên cả hai máy chủ Load Balancer 1 và 2. Sử dụng lệnh sau đối với hệ điều hành Ubuntu/Debian:
sudo apt update && sudo apt install -y haproxy keepalived
Bước 2: Cấu hình Keepalived để quản lý IP ảo (VIP)
Trên máy chủ Load Balancer 1 (Master), tạo hoặc chỉnh sửa file cấu hình tại /etc/keepalived/keepalived.conf:
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass SecretPassword
}
virtual_ipaddress {
192.168.1.100
}
track_script {
check_haproxy
}
}Trên máy chủ Load Balancer 2 (Backup), cấu hình file tương tự nhưng thay đổi thuộc tính state thành BACKUP và giảm priority xuống:
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
...
}Lưu ý: Kịch bản check_haproxy giúp Keepalived liên tục kiểm tra trạng thái sống/chết của tiến trình HAProxy để tự động hạ quyền của node Master nếu HAProxy bị tắt lỗi.
Bước 3: Cấu hình HAProxy để cân bằng tải tầng Backend
Tiếp theo, chúng ta cấu hình file /etc/haproxy/haproxy.cfg đồng bộ trên cả hai máy chủ. File này định nghĩa cách tiếp nhận traffic từ VIP và phân phối tới các Web Server phía sau:
frontend web_front
bind 192.168.1.100:80
mode http
default_backend web_back
backend web_back
mode http
balance roundrobin
option httpchk GET /health
server web01 192.168.1.20:80 check
server web02 192.168.1.21:80 checkTrong cấu hình trên, tính năng option httpchk cực kỳ quan trọng. Nó cho phép HAProxy chủ động gửi các request kiểm tra sức khỏe (Health Check) tới các web server. Nếu một web server gặp lỗi, HAProxy sẽ tạm thời loại bỏ server đó ra khỏi danh sách điều hướng traffic cho đến khi nó hoạt động bình thường trở lại.
Bước 4: Kích hoạt và kiểm tra hệ thống
Để hệ thống có thể bind (ràng buộc) vào địa chỉ IP ảo chưa chính thức tồn tại trên card mạng vật lý lúc khởi động, bạn cần cấu hình kernel cho phép non-local binding bằng lệnh:
echo "net.ipv4.ip_nonlocal_bind=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Khởi động lại dịch vụ trên cả hai máy chủ để áp dụng thay đổi:
sudo systemctl restart keepalived
sudo systemctl restart haproxy
5. Kịch bản kiểm thử tính sẵn sàng cao (Failover Test)
Để chứng minh hệ thống hoạt động đúng như kỳ vọng và đạt tiêu chuẩn High Availability, bạn có thể thực hiện bài test giả lập sự cố sau:
- Trỏ tên miền của doanh nghiệp về IP ảo
192.168.1.100và truy cập website qua trình duyệt. - Trên máy chủ Master, chủ động tắt dịch vụ HAProxy hoặc tắt hẳn VPS bằng lệnh
sudo poweroff. - Kiểm tra log trên máy chủ Backup thông qua lệnh
journalctl -u keepalived. Bạn sẽ thấy dòng thông báo node Backup đã chuyển trạng thái sang MASTER và nhận lại IP ảo thành công. - Tải lại trang web trên trình duyệt. Kết quả: Website vẫn phản hồi bình thường, không hề có thông báo lỗi kết nối.
6. Lời kết
Việc tối ưu hóa hạ tầng mạng bằng giải pháp kết hợp giữa HAProxy và Keepalived mang lại sự an tâm tuyệt đối cho doanh nghiệp trước các nguy cơ tấn công hoặc sự cố kỹ thuật đột xuất. Không cần đầu tư những thiết bị phần cứng đắt đỏ, chỉ với các máy chủ VPS linh hoạt, bạn hoàn toàn có thể tự xây dựng một hệ thống High-Availability Reverse Proxy mạnh mẽ, đảm bảo website của bạn luôn mở cửa 24/7 để phục vụ khách hàng.
