Hướng dẫn cấu hình cân bằng tải (Load Balancing) cho cụm Web Server bằng HAProxy trên VPS
1. Giới thiệu về giải pháp Cân bằng tải (Load Balancing) và HAProxy
Trong kỷ nguyên số, khi lưu lượng truy cập Internet ngày càng tăng trưởng vượt bậc, việc đảm bảo một hệ thống dịch vụ trực tuyến hoạt động liên tục, ổn định và không bị gián đoạn là yếu tố sống còn đối với mọi doanh nghiệp. Khi một máy chủ đơn lẻ (Single VPS) không còn đủ khả năng gánh vác lượng truy cập lớn, hoặc đối mặt với rủi ro điểm lỗi đơn lẻ (Single Point of Failure - SPoF), giải pháp tối ưu chính là triển khai một cụm máy chủ web (Web Server Cluster) kết hợp với kỹ thuật Cân bằng tải (Load Balancing).
Cân bằng tải là quá trình phân phối một cách hiệu quả lưu lượng mạng hoặc truy cập của người dùng đến nhiều máy chủ phía sau (Backend Servers). Phương pháp này giúp tối ưu hóa việc sử dụng tài nguyên, giảm thiểu thời gian phản hồi, tăng dung lượng xử lý tổng thể và đặc biệt là đảm bảo tính sẵn sàng cao (High Availability) cho hệ thống.
HAProxy (High Availability Proxy) là một trong những phần mềm cân bằng tải và proxy phổ biến, mạnh mẽ và đáng tin cậy nhất hiện nay trên môi trường Linux. Được tin dùng bởi các tập đoàn công nghệ hàng đầu thế giới như GitHub, Reddit, Stack Overflow, HAProxy nổi bật với khả năng xử lý hàng triệu kết nối đồng thời nhờ cơ chế hướng sự kiện (event-driven) tối ưu và kiến trúc sử dụng tài nguyên cực kỳ tiết kiệm.
2. Mô hình kiến trúc triển khai HAProxy trên VPS
Để giúp quý độc giả dễ hình dung, trong bài viết này, chúng ta sẽ cùng triển khai cấu hình cân bằng tải dựa trên một mô hình thực tế tiêu chuẩn bao gồm ba máy chủ VPS riêng biệt nằm trong cùng một mạng nội bộ hoặc có kết nối mạng thông suốt với nhau:
- VPS 1 (HAProxy Load Balancer): Đóng vai trò là điểm tiếp nhận duy nhất mọi yêu cầu (Request) từ phía Client thông qua một địa chỉ IP Public duy nhất. Địa chỉ IP ví dụ:
192.168.1.10. - VPS 2 (Web Server 01 - Backend): Chạy dịch vụ Web (Apache hoặc Nginx), xử lý mã nguồn và trả về nội dung cho HAProxy. Địa chỉ IP ví dụ:
192.168.1.11. - VPS 3 (Web Server 02 - Backend): Chạy dịch vụ Web tương tự Web Server 01 để chia sẻ tải và dự phòng. Địa chỉ IP ví dụ:
192.168.1.12.
Khi người dùng gửi yêu cầu truy cập trang web, HAProxy tại VPS 1 sẽ tiếp nhận, phân tích dựa trên thuật toán cấu hình, sau đó chuyển tiếp yêu cầu đó tới một trong hai máy chủ Backend (VPS 2 hoặc VPS 3) để xử lý. Quy trình này hoàn toàn trong suốt đối với người dùng cuối.
3. Hướng dẫn các bước cài đặt và cấu hình chi tiết HAProxy
Dưới đây là quy trình từng bước chi tiết để thiết lập hệ thống cân bằng tải HAProxy trên hệ điều hành Ubuntu Server (phiên bản 20.04 LTS hoặc 22.04 LTS).
Bước 1: Chuẩn bị các Web Server Backend
Trước khi cấu hình HAProxy, bạn cần đảm bảo rằng hai máy chủ Web Backend (VPS 2 và VPS 3) đã cài đặt dịch vụ web và hoạt động bình thường. Bạn có thể cài đặt Nginx trên cả hai máy chủ này bằng lệnh:
sudo apt update && sudo apt install nginx -yĐể dễ dàng kiểm tra tính năng cân bằng tải sau này, hãy thay đổi nội dung tệp index.html của mỗi máy chủ để hiển thị tên hoặc IP của chính máy chủ đó (ví dụ: "Welcome to Web Server 01" và "Welcome to Web Server 02").
Bước 2: Cài đặt HAProxy trên Máy chủ Cân bằng tải (VPS 1)
Truy cập vào VPS 1 qua SSH với quyền root hoặc sử dụng lệnh sudo. Thực hiện cập nhật danh sách gói tin và cài đặt phiên bản ổn định mới nhất của HAProxy từ kho lưu trữ chính thức:
sudo apt update
sudo apt install haproxy -ySau khi cài đặt hoàn tất, bạn có thể kiểm tra trạng thái hoạt động của dịch vụ bằng lệnh sudo systemctl status haproxy để đảm bảo dịch vụ đã được khởi tạo thành công.
Bước 3: Cấu hình tệp định cấu hình của HAProxy
Tệp cấu hình chính của HAProxy nằm tại đường dẫn /etc/haproxy/haproxy.cfg. Trước khi tiến hành chỉnh sửa, bạn nên sao lưu cấu hình mặc định để phòng trường hợp lỗi phát sinh:
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bakBây giờ, mở tệp bằng trình soạn thảo văn bản như nano:
sudo nano /etc/haproxy/haproxy.cfgCấu trúc của tệp cấu hình HAProxy gồm nhiều khối lệnh quan trọng. Hãy tiến hành chỉnh sửa hoặc bổ sung vào cuối tệp nội dung cấu hình sau:
# Khối thiết lập giao diện giám sát trạng thái (Stats Dashboard)
listen stats
bind *:8080
mode http
stats enable
stats uri /stats
stats refresh 15s
stats auth admin:SecurePassword123
# Khối Frontend - Nơi tiếp nhận kết nối từ người dùng
frontend web_front
bind *:80
mode http
default_backend web_back
# Khối Backend - Định nghĩa cụm máy chủ xử lý
backend web_back
mode http
balance roundrobin
option httpchk GET / HTTP/1.1\r\nHost:\ localhost
server web_server_01 192.168.1.11:80 check
server web_server_02 192.168.1.12:80 check4. Giải thích các thông số cấu hình cốt lõi trong HAProxy
Để làm chủ công nghệ và tối ưu hóa hệ thống phù hợp với nhu cầu thực tế của doanh nghiệp, chúng ta cần hiểu rõ ý nghĩa của các tham số cấu hình vừa thiết lập:
- frontend web_front: Định nghĩa một tầng frontend có tên là `web_front`. Đây là nơi lắng nghe các kết nối đi vào.
- bind *:80: Chỉ định HAProxy lắng nghe mọi yêu cầu đến từ cổng 80 (cổng HTTP tiêu chuẩn) trên tất cả các giao tiếp mạng của VPS.
- default_backend web_back: Chuyển tiếp toàn bộ các yêu cầu nhận được từ frontend sang cụm backend có tên là `web_back`.
- balance roundrobin: Thuật toán cân bằng tải được áp dụng. Round Robin là thuật toán luân phiên, chuyển tiếp các request lần lượt đến từng máy chủ theo vòng tròn. Ngoài ra còn có các thuật toán khác như Least Connections (ưu tiên máy chủ có ít kết nối nhất) hay Source IP (Sticky Sessions) (giữ kết nối cố định dựa trên IP của người dùng).
- option httpchk: Bật tính năng kiểm tra sức khỏe máy chủ (Health Check) lớp ứng dụng (Layer 7). HAProxy sẽ định kỳ gửi một yêu cầu HTTP GET đến các backend để xác minh xem dịch vụ web còn hoạt động ổn định hay không.
- check: Tham số đặt ở cuối dòng định nghĩa máy chủ backend, kích hoạt việc kiểm tra sức khỏe tự động. Nếu một máy chủ bị lỗi (ví dụ VPS 2 chết nguồn), HAProxy sẽ tự động phát hiện và ngừng chuyển tiếp lưu lượng đến máy chủ đó cho đến khi nó hoạt động trở lại.
5. Kiểm tra và Đánh giá hiệu năng hệ thống
Sau khi lưu lại tệp cấu hình, bước đầu tiên và tối quan trọng là kiểm tra xem cú pháp cấu hình có chính xác hay không bằng lệnh:
sudo haproxy -c -f /etc/haproxy/haproxy.cfgNếu hệ thống phản hồi Configuration file is valid, hãy khởi động lại dịch vụ HAProxy để áp dụng các thay đổi:
sudo systemctl restart haproxyThử nghiệm cân bằng tải: Sử dụng trình duyệt máy tính truy cập vào địa chỉ IP Public của VPS 1 (HAProxy). Hãy thử nhấn F5 liên tục để làm mới trang. Bạn sẽ thấy nội dung thay đổi luân phiên giữa "Welcome to Web Server 01" và "Welcome to Web Server 02". Điều này chứng minh thuật toán Round Robin đang hoạt động hoàn hảo.
Truy cập Trang theo dõi trực quan (Dashboard): Truy cập đường dẫn http://192.168.1.10:8080/stats và nhập thông tin đăng nhập đã cấu hình (admin/SecurePassword123). Tại đây, bạn có thể quan sát toàn bộ các chỉ số về băng thông, số lượng kết nối đồng thời, và trạng thái sống sót (Health status) của các máy chủ Backend theo thời gian thực.
6. Lời kết và các khuyến nghị bảo mật
Việc triển khai cấu hình HAProxy làm giải pháp cân bằng tải cho cụm Web Server trên VPS là một bước đi chiến lược giúp nâng cấp hạ tầng CNTT của doanh nghiệp lên tiêu chuẩn cao hơn, giải quyết bài toán chịu tải và giảm thiểu thời gian sập hệ thống (Downtime).
Tuy nhiên, để vận hành trong môi trường sản xuất (Production) thực tế, doanh nghiệp cần lưu ý thêm các giải pháp mở rộng quan trọng bao gồm: tích hợp chứng chỉ bảo mật SSL/TLS Termination ngay tại HAProxy để mã hóa dữ liệu truyền tải, thiết lập tường lửa (Firewall) hạn chế cổng truy cập, kết hợp công nghệ Keepalived để tạo cụm HAProxy dự phòng (Active-Passive Cluster), ngăn chặn triệt để tình trạng lỗi điểm đơn lẻ tại chính máy chủ cân bằng tải.
