12/08/2018, 14:27

LoadBalancing Webserver đơn giản với HAproxy trên Ubuntu server

Thuật ngữ Loadbalancing (cân bằng tải) với các anh chị em coder thì không còn xa lạ gì nữa. Với những ai chưa biết thì chúng ta có thể google hoặc vào đây để đọc nhé. Ý tưởng của kỹ thuật loadbalancing các bạn có thể hình dung như sau : Hãy tưởng tượng bạn đang ung dung phóng xe trên đường đến ga ...

Thuật ngữ Loadbalancing (cân bằng tải) với các anh chị em coder thì không còn xa lạ gì nữa. Với những ai chưa biết thì chúng ta có thể google hoặc vào đây để đọc nhé. Ý tưởng của kỹ thuật loadbalancing các bạn có thể hình dung như sau :

Hãy tưởng tượng bạn đang ung dung phóng xe trên đường đến ga tàu hỏa thì bất chợt phía xa xa kia có một cái bảng thông báo to đùng rằng nếu bạn đi xe máy thì phải rẽ trái và đi ôto thì rẽ phải. Tất nhiên với 1 đoạn đường xe máy only thì bạn tha hồ vít ga, đánh võng lạng lách để đến nơi nhanh hơn mà không sợ mấy ông oto lấn làn, bấm còi . Đó chính là ý tưởng của kỹ thuật loadbalancing với loadbalancer là cái bảng thông báo to đùng.

Vậy để xây dựng một hệ thống loadbalancing thì đầu tiên chúng ta phải dựng một loadbalancer. Cơ bản thì chúng ta có 2 loại : Loadbalancer "mềm" và loadbalancer "cứng"

Loadbalancer mềm : Xây dựng một loadbalancer thông qua việc cấu hình hệ điều hành hoặc các phần mềm chia tải. Giải pháp này có ưu điểm là chi phí rẻ, nhưng lại mắc các khuyết điểm như: hiệu năng xử lý phân tải , tốc độ xử lý và chuyển tiếp gói tin chậm hơn so với các loadbalancer cứng chuyên dụng.

Một số phần mềm hay sử dụng làm loadbalancer như Nginx, Apache, HAproxy...

Loadbalancer cứng : Sử dụng các thiết bị chuyển mạch ứng dụng chuyên dụng. Đặc điểm của giải pháp này là trang bị các thiết bị phần cứng chuyên dụng với giá thành tương đối cao. Tuy nhiên hiệu năng xử lý và công nghệ áp dụng vượt xa so với phương pháp cân bằng tải bằng phần mềm.

Các hãng sản xuất các thiết bị loadbalancer như Foundry, Nortel (Alteon) hay Cisco CSS (Arrowpoint), Cisco Local Director...

Trong bài viết này, mình sẽ dùng ứng dụng HAproxy (các tính năng của HAproxy các bạn tham khảo tại đây ) được cài đặt trên một máy chủ Ubuntu đóng vai trò là một Loadbalancer. Mô hình triển khai như sau :

– Load Balancer
Hostname: haproxy
OS: Ubuntu + haproxy
Private IP: 192.168.158.133

– Web Server 1
Hostname: webser01
OS: Ubuntu + Apahce2
Private IP: 192.168.158.134

– Web Server 2
Hostname: webserver02
OS: Ubuntu + Apache2
Private IP: 192.168.158.135

haproxy_example_setup.png

Bước 1 : Cài đặt và cấu hình 2 con web server.

Cài đặt ubuntu và apache2 trên cả 2 con webserver:

sudo apt-get update
sudo apt-get install apache2

Trên mỗi con webserver, chúng ta sẽ tạo một trang index.html mới như sau :

Webserver 01

sudo sh -c "web1 >> /var/www/index.html"

Webserver 02

sudo sh -c "web2 >> /var/www/index.html"

Sau khi chuẩn bị xong 2 con webserver, chúng ta sang bước kế tiếp.

Bước 2: Cài đặt và cấu hình HAproxy.

sudo apt-get update
sudo apt-get install haproxy

Dùng lệnh haproxy -v để xem kết quả.

Đã xong các bước chuẩn bi, chúng ta sang bước quan trọng nhất là cấu hình HAproxy.

Bước 3 : Cấu hình HAproxy.

File cấu hình là file haproxy.cfg lưu ở /etc/haproxy/. Trước khi tác động đến nó các bạn có thể lưu backup để dành tham khảo nhé. Bây giờ mở nó lên nào.

sudo nano /etc/haproxy/haproxy.cfg

Sau khi đã xóa trắng file, với mục đích chỉ config loadbalancer đơn giản cho 2 webserver, mình sẽ điền như sau :

    global
        daemon
        maxconn 256

    defaults
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

    frontend http-in
        bind *:80
        default_backend servers

    backend servers
        balance roundrobin
        server webserver1 192.168.158.134:80 check
        server webserver2 192.168.158.135:80 check

Cấu hình trên là cấu hình basic cho một loadbalancer, bạn chỉ cần quan tâm đến phần

backend servers
        balance roundrobin
        server webserver1 192.168.158.134:80 check
        server webserver2 192.168.158.135:80 check

Nếu có nhiều node apache server, các bạn chỉ cần khai báo thêm vào là được. Lưu ý với khai báo balance roundrobin, các bạn có thể thay đổi thuật toán loadbalancing nếu thích. (tham khảo thêm tại đây )

Save lại và sudo service haproxy start. Thế là đã xong một mô hình loadbalancing đơn giản với HAproxy. Bạn có thể truy cập vào IP của loadbalancer và xem kết quả.

web1.png

Sau khi F5 :

web2.png

Bonus thêm tính năng monitor thông qua web GUI của HAproxy

Thêm vào file cấu hình phần defaults như sau :

 defaults
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        stats enable
        stats uri /monitor
        stats auth root:123456

Lưu ý : 2 khai báo stats uri / và stats auth các bạn điền tham số tùy ý nhé. Ở đây mình đặt tên trang monitor là monitor với user/pass dùng login là root:123456

Truy cập vào thử nào, của mình là 192.168.158.133/monitor

monitor.png

Kết luận

HAproxy là một công cụ rất mạnh, cung cấp rất nhiều tính năng để xây dựng nên một hệ thống loadbalancing tốt. Cách sử dụng basic khá đơn giản, dễ tìm hiểu nhưng nếu để hoàn thiện nó thì cũng khá là khoai ^^ . Các bạn có thể tham khảo đầy đủ các tính năng của nó tại http://www.haproxy.org/

0