HAProxy được viết là một công cụ cân bằng tải, phân giải proxy được sử dụng phổ biến trên thế giới. Với khả năng xử lý nhiều loại lưu lượng như TCP, UDP, FTP, RDP, WebSockets, database connections, HAProxy được rất nhiều quản trị viên sử dụng. Vậy nên, trong bài viết hôm nay, mình sẽ hướng dẫn bạn cách cài đặt HAProxy để cân bằng tải cho 2 webserver bên trong.
Cài đặt HAProxy #
Trong bài viết này, mình sẽ sử dụng CentOS 8 nên cài đặt như sau:
sudo yum update -y sudo yum install -y haproxy |
Sau khi cài đặt xong, thực hiện bật dịch vụ lên:
sudo systemctl enable haproxy |
Nhờ đó, mỗi khi hệ thống khởi động, HAProxy sẽ được tự động khởi chạy cùng.
Kiểm tra thử phiên bản với câu lệnh sau:
haproxy -v |
Nếu dịch vụ đã bật, bạn sẽ nhận được thông báo như bên dưới:
HA-Proxy version 2.2.4-b16390-23 2020/10/09 - https://haproxy.org/ |
Tạo backend server #
Để thử nghiệm cân bằng tải, mình sẽ sử dụng Ncat để tạo các webserver đơn giản:
sudo yum install nc -y |
Do mặc định SELinux được bật, cho nên bạn cần phải mở port 8404 để truy cập được website thống kê lưu lượng:
sudo dnf install policycoreutils-python-utils sudo semanage port -a -t http_port_t -p tcp 8404 sudo semanage port -a -t http_port_t -p tcp 10080; sudo semanage port -a -t http_port_t -p tcp 10081; sudo semanage port -a -t http_port_t -p tcp 10082; |
Tiếp theo, bạn cần tạo 2 web servers và một API server:
while true ; do nc -l -p 10080 -c 'echo -e "HTTP/1.1 200 OK\n\n This is tel4vn Server ONE"' ; done & while true ; do nc -l -p 10081 -c 'echo -e "HTTP/1.1 200 OK\n\n This is tel4vn Server TWO"' ; done & while true ; do nc -l -p 10082 -c 'echo -e "HTTP/1.1 200 OK\nContent-Type: application/json\n\n { \"Message\" :\"Hello, tel4vn!\" }"' ; done & |
Cấu hình HAProxy #
File cấu hình của HAProxy là /etc/haproxy/haproxy.cfg, bạn hãy mở file đó và thực hiện chỉnh sửa như bên dưới:
global log 127.0.0.1 local2 user haproxy group haproxy defaults mode http log global option httplog frontend main bind *:80 default_backend web use_backend api if { path_beg -i /api/ } #------------------------- # SSL termination - HAProxy handles the encryption. # To use it, put your PEM file in /etc/haproxy/certs # then edit and uncomment the bind line (75) #------------------------- # bind *:443 ssl crt /etc/haproxy/certs/haproxy.pem ssl-min-ver TLSv1.2 # redirect scheme https if !{ ssl_fc } #----------------------------- # Enable stats at http://test.local:8404/stats #----------------------------- frontend stats bind *:8404 stats enable stats uri /stats #----------------------------- # round robin balancing between the various backends #----------------------------- backend web server web1 127.0.0.1:10080 check server web2 127.0.0.1:10081 check #----------------------------- # API backend for serving up API content #----------------------------- backend api server api1 127.0.0.1:10082 check |
Như trong đoạn cấu hình trên, mình đã tạo một frontend trên port 80 của server và backend web gồm 2 web server lắng nghe trên port 10080 và 10081:
frontend main bind *:80 default_backend web backend web server web1 127.0.0.1:10080 check server web2 127.0.0.1:10081 check |
Với backend này, lưu lượng đi vào từ ngoài mạng thông qua HAProxy sẽ được phân phối đều giữa 2 web server. Việc này sẽ đảm bảo không xảy ra trường hợp xử lý quá tải trên một web server.
Ngoài ra, trên frontend có một cấu hình điều hướng lưu lượng tới backend api:
use_backend api if { path_beg -i /api/ } |
Với cấu hình này, khi người dùng nhập URL trên trình duyệt vào /api/ thì lưu lượng sẽ được điều hướng tới backend api.
Thống kê lưu lượng #
Trong đoạn cấu hình bên trên, mình đã có đoạn chỉ định kích hoạt web thống kê lưu lượng:
frontend stats bind *:8404 stats uri /stats stats enable |
Như vậy, bạn có thể truy cập vào đường dẫn http://YOUR-IP-ADDRESS:8404/stats để xem thống kê của HAProxy.
Kết luận #
Trên đây là hướng dẫn cài đặt và cấu hình HAProxy để cân bằng tải. Nếu có bất kì thắc mắc nào, bạn hãy bình luận bên dưới để mình hỗ trợ nhé.