Cài đặt và cấu hình cân bằng tải với HAProxy

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é.

Mình là Tùng, hiện đang là DevOps tại Công Ty CP EcoIT. Với kinh nghiệm có được từ trong công việc, mình muốn chia sẻ cho bạn đọc cùng biết và cùng nhau học thêm nhiều điều mới trong lĩnh vực DevOps.

Powered by BetterDocs

Để lại bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *