April 21, 2015 hotro@hostingviet.vn 02466.567.555       Giới thiệuTuyển dụng    Liên hệ   Đăng nhập   Đăng ký

HAProxy Là Gì? Các thuật ngũ Và ứng dụng cân bằng tải của HAProxy

Cân bằng tải trong HAProxy là gì? Có mấy loại cân bằng tải? HAProxy và Nginx giống và khác nhau như thế nào? HostingViet sẽ giải đáp bạn trong bài viết này.

Cân bằng tải trong HAProxy là gì? Có mấy loại cân bằng tải? HAProxy và Nginx giống và khác nhau như thế nào? Mời bạn cùng theo dõi bài tổng hợp sau để có lời giải cho các vấn đề này nhé.

HAProxy là gì?

HAProxy là từ viết tắt của cụm từ High Availability Proxy. Nó là một công cụ có mã nguồn mở được sử dụng để cân bằng tải TCP/HTTP, và là giải pháp máy chủ Proxy. Công cụ này hoạt động trên các môi trường Linux, FreeBSD, Solaris. 

Công dụng của HAProxy là cải thiện hiệu năng, độ tin cậy của hệ thống máy chủ thông qua việc phân phối công việc cho nhiều máy chủ (cụ thể là web, ứng dụng, cơ sở dữ liệu).

Hiện nay, nhiều website lớn như Twitter, GoDaddy, Reddit, Bitbucket, GitHub, Stack Overflow, Speedtest.net, và các sản phẩm do Amazon Web Service cung cấp đều sử dụng HAProxy.

haproxy

Các thuật ngữ, khái niệm trong HAProxy

Trong HAProxy có nhiều thuật ngữ, khái niệm được sử dụng. Tuy nhiên, trong phạm vi bài viết này, chúng tôi chỉ đề cập đến những khái niệm thông dụng.

  • Access Control List (ACL)

ACL được dùng để kiểm tra một vài điều kiện, đồng thời tiến hành các hành động tiếp theo dựa vào kết quả kiểm tra (ví dụ chặn một yêu cầu, lựa chọn một máy chủ). ACL cũng hỗ trợ việc điều tiết linh hoạt lưu lượng mạng dựa vào nhiều yếu tố (ví dụ dựa vào đường dẫn).

  • Backend

Đây là tập hợp các máy chủ nhận các yêu cầu được điều tiết. Các backend này được được định nghĩa khi cấu hình HAProxy.

Có 2 loại cấu hình phổ biến được định nghĩa trong backend:

- Thuật toán cân bằng tải (bao gồm Round Robin, Least Connection, và IP Hash).

- Danh sách máy chủ, Cổng (đảm nhận việc Nhận, và xử lý các yêu cầu).

Backend chứa một hoặc nhiều máy chủ. Khi thêm nhiều máy chủ vào backend sẽ giúp cải thiện tải, hiệu năng cũng như độ tin cậy của dịch vụ. Bên cạnh đó, khi có một máy chủ trong backend xảy ra sự cố thì các máy chủ khác sẽ đảm nhận việc chịu tải cho máy chủ này. 

Ví dụ:

backend web-backend

   balance roundrobin

   server web1 web1.yourdomain.com:80 check

   server web2 web2.yourdomain.com:80 check

backend blog-backend

   balance roundrobin

   mode http

   server blog1 blog1.yourdomain.com:80 check

   server blog1 blog1.yourdomain.com:80 check

Trong đó:

- balance roundrobin: Là thuật toán cân bằng tải, các yêu cầu sẽ được phân phối đến các máy chủ. Đây chính là phương pháp sử dụng mặc định.

- mode http: Là chỉ định proxy layer 7

  • Frontend

Frontend đóng vai trò định nghĩa cách thức mà các yêu cầu được điều tiết tới backend. Tương tự như backend, frontend cũng có thư mục frontend để định nghĩa các cấu hình frontend.

Cấu hình frontend gồm 3 thành phần sau:

- Tập các địa chỉ IP và Cổng (VD: 10.10.10.86:80, *:443).

- Các ACL.

  • Các backend nhận, xử lý yêu cầu.
  • haproxy

Các loại cân bằng tải trong HAProxy

Sau đây là 3 loại cân bằng tải trong HAProxy

1. Không có cân bằng tải

Đây là một kiến trúc đơn giản nhất của quá trình triển khai web. 

Dưới đây là ví dụ mô phỏng kiến trúc này. Theo đó, người dùng được kết nối trực tiếp với máy chủ web thông qua internet mà không dùng đến dịch vụ cân bằng tải. Điều này có nghĩa, khi máy chủ web gặp sự cố, người dùng không thể kết nối với nó được. Ngoài ra, nếu có nhiều người truy cập cùng lúc thì có thể xảy ra tình trạng máy chủ web không đáp ứng được các yêu cầu, gây ảnh hưởng xấu đến trải nghiệm của người dùng.

haproxy

2. Layer 4 Load Balancing

Để cân bằng tải các request đến nhiều máy chủ, bạn có thể dùng cân bằng tải layer 4 TCP (Transport layer – Tầng giao vận). Đây là phương pháp đơn giản, giúp điều hướng request bằng cách dựa vào IP, và Port.

Hình minh họa dưới đây là ví dụ về layer 4 load balancing.

Trong ví dụ này, khi request truy cập địa chỉ https://hostingviet.vn/, HAProxy sẽ thực hiện điều hướng đến backend web-backend xử lý.

Lưu ý:

Hai webserver phải có nội dung giống nhau nhằm có thể phản hồi một kết quả thống nhất cho người dùng. Để làm được điều này, bạn ưu tiên dùng chung một cơ sở dữ liệu cho 2 máy chủ web.

haproxy

3. Layer 7 Load Balancing

Đây là một phương pháp tương đối phức tạp vì cân bằng tải tại tầng layer 7 (Application layer – Tầng ứng dụng). Khi dùng cân bằng tải tại layer 7 sẽ giúp điều hướng các request đến nhiều backend khác nhau, bằng cách dựa vào nội dung request.

Chế độ cân bằng tải này cho phép bạn dễ dàng triển khai nhiều máy chủ web server trên cùng một tên miền duy nhất.

Hình minh họa sau đây là một ví dụ về cân bằng tải Layer 7.

haproxy

Theo ví dụ, khi người dùng gửi yêu cầu truy cập đến https://hostingviet.vn/ thì HAProxy sẽ thực hiện điều hướng request tới web-1-backend. Nếu người dùng gửi yêu cầu truy cập tới https://hostingviet.vn/about/ thì HAProxy sẽ tiến hành điều hướng request đến web-2-backend.

Các thuật toán cân bằng tải được sử dụng trong HAProxy

Trong HAProxy, các thuật toán cân bằng tải được dùng là: 

  • roundrobin: Đây là thuật toán mặc định của HAProxy. Nó thực hiện nhiệm vụ chuyển request đến máy chủ theo lượt. 
  • leastconn: Thuật toán đóng vai trò chuyển các request đến máy chủ có ít kết nối nhất. 
  • source: Thuật toán chuyển các request đến máy chủ dựa vào việc hash IP của người dùng, nhằm đảm bảo họ luôn được kết nối đến một máy chủ. 

Health Check của HAProxy

Health check được dịch vụ cân bằng tải HAProxy sử dụng nhằm mục đích phát hiện những backend server đã sẵn sàng để xử lý các yêu cầu truy cập. Đây là một kỹ thuật giúp tránh việc loại bỏ máy chủ khỏi backend một cách thủ công khi nó chưa sẵn sàng. Bằng cách thiết lập kết nối TCP đến máy chủ, Health check sẽ kiểm tra được tính sẵn sàng xử lý request của backend server.

Khi không thể kết nối tới bất kỳ máy chủ nào, Health check tự động loại bỏ nó khỏi backend, đồng thời tất cả các traffic đều không được chuyển hướng đến máy chủ này cho đến khi nó thực hiện được Health check. 

Trong trường hợp, toàn bộ máy chủ thuộc backend xảy ra sự cố, dịch vụ sẽ chuyển trạng thái không khả dụ (HAProxy hiển thị status code 500). Khi có một máy chủ thuộc backend được chuyển từ trạng thái không khả dụ sang sẵn sàng, thì thông báo này không còn hiển thị, và kết nối trở lại bình thường.

haproxy

So sánh HAProxy vs Nginx

Cả HAProxy và Nginx đều là dịch vụ cân bằng tải ổn định, được nhiều người sử dụng. HAProxy được phát triển để phục vụ cho mục đích cân bằng tải. Còn Nginx là một webserver có khả năng hoạt động như bộ cân bằng tải.

Giống nhau:

  • Hỗ trợ HTTP, HTTPS, websocket.
  • Cân bằng tải HTTP, HTTPS
  • Hoạt động ổn định, và hiệu quả.
  • Có khả năng xử lý kết nối 10k mà không cần điều chỉnh.
  • Cho phép tùy chỉnh định dạng của nhật ký. Khi muốn nhập nhật ký, bạn truy cập Kiban/ Splunk/ Graylog.

Khác nhau:

HAProxy:

  • Có thêm cân bằng tải TCP, TCP-SSL.
  • Tính năng health, điều kiện chuyển đổi dự phòng linh hoạt hơn Nginx.
  • Có bộ nhớ đệm cơ bản.
  • Cho xem chi tiết trạng thái máy chủ, các yêu cầu hoạt động.
  • Có chức năng xuất số liệu, tích hợp các giải pháp giám sát.
  • Hiệu suất hoạt động cao, phù hợp sử dụng để xử lý kết nối 100k, giao diện 40GbE.
  • Là phần mềm miễn phí, có mã nguồn mở. Nhà phát triển thu phí bằng việc bán thiết bị phần cứng có cài đặt sẵn HAProxy.

Nginx:

  • Người dùng phải trả phí để sử dụng dịch vụ cân bằng tải TCP – UDP.
  • Bộ nhớ đệm linh hoạt hơn HAProxy.
  • Cho phép tùy chỉnh định dạng nhật ký.
  • Phiên bản miễn phí không có trang trạng thái. 
  • Chức năng xuất số liệu chỉ có trong phiên bản trả phí, nên gây khó khăn cho người dùng bản miễn phí trong việc vận hành bộ cân bằng tải.
  • Phục vụ được các file cục bộ.
  • Có khả năng hỗ trợ các ứng dụng FastCGI.
  • Là một lõi mở, nhiều tính năng hữu dụng chỉ có ở bản tính phí. 

haproxy