Giới thiệu HAProxy và các khái niệm về cân bằng tải (Load Balancing)

Thảo luận trong 'Mạng và Modem' bắt đầu bởi kiennh, 30/9/16.

Đã xem: 24,737

  1. kiennh Moderator

    Giới thiệu
    HAProxy, viết tắt của High Availability Proxy, là phần mềm cân bằng tải TCP/HT P và giải pháp proxy mã nguồn mở phổ biến, có thể chạy trên Linux, Solaris, và FreeBSD. Nó thường dùng để cải thiện hiệu suất (performance) và sự tin cậy (reliability) của môi trường máy chủ bằng cách phân tán lưu lượng tải (workload) trên nhiều máy chủ (như web, application, database). Nó cũng thường dùng cho môi trường cao cấp gồm: GitHub, Imgur, Instagram, và Twiter.


    Chúng ta sẽ tìm hiểu tổng quan về HAProxy, các thuật ngữ về cân bằng tải, cùng các ví dụ thường dùng để cải thiện hiệu suất, độ tin cậy cho môi trường máy chủ.


    Các thuật ngữ
    Có nhiều thuật ngữ và khái niệm quan trọng khi nói về cân bằng tải và proxy. Trước khi tìm hiểu các thuật ngữ này, chúng ta hãy nói về ACLs, backends, và frontends.


    Access Control List (ACL):
    Trong mối liên hệ với việc cân bằng tải, ACLs thường dùng để test một số điều kiện và thực hiện 1 hành động (như chọn 1 máy chủ hoặc khóa 1 request) dựa trên kết quả test. Dùng ACLs cho phép chuyển hướng lưu lượng mạng một cách linh động dựa trên nhiều tác nhân giống pattern-matching và 1 số kết nối đến backend, ví dụ:


    acl url_blog path_beg /blog


    ACL này thỏa nếu đường dẫn trong request của người dùng bắt đầu với /blog. Ví dụ http://yourdomain.com/blog/blog-entry-1.


    Xem thêm hướng dẫn chi tiết về ACL, [​IMG]

    Trong ví dụ này, người dùng kết nối trực tiếp đến ứng dụng web, tại yourdomain.com và không có cơ chế cân bằng tải. Nếu máy chủ web (duy nhất) bị lỗi, người dùng sẽ không thể truy xuất đến web. Ngoài ra, nếu nhiều người dùng cùng truy xuất đến máy chủ web đồng thời và nó sẽ không thể xử lý kịp lượng tải gây ra chậm hoặc người dùng không thể kết nối đến web.


    Cân bằng tải Layer 4
    Cách đơn giản nhất để cân bằng lưu lượng mạng đến nhiều máy chủ là dùng cân bằng tải layer 4 (transport lalyer). Cân bằng tải theo cách này sẽ chuyển hướng lưu lượng người dùng dựa trên IP range và port (vd: nếu 1 request đếnhttp://yourdomain.com/anything, lưu lượng sẽ được chuyển hướng đến backend mà xử lý tất cả các request choyourdomain.com trên port 80). Thêm thông tin về lalyer 4, xem phần TCP của [​IMG]

    Người dùng truy xuất load balancer, nó sẽ chuyển hướng request đến các máy chủ của web-backend. Máy chủ backend được chọn sẽ hồi đáp trực tiếp request người dùng. Thường, tất cả các máy chủ trong web-backend phải phục vụ nội dung giống hệt nhau – nếu không, người dùng có thể nhận nội dung không phù hợp. Lưu ý rằng cả 2 máy chủ web kết nối đến cùng máy chủ database.


    Cân bằng tải layer 7
    Một cách phức tạp hơn để cân bằng tải lưu lượng mạng là dùng layer 7 (application layer). Dùng layer 7 cho phép load balancer chuyển hướng request đến các máy chủ backend khác nhau dựa trên nội dung request. Chế độ cân bằng tải này cho phép bạn chạy nhiều máy chủ ứng dụng web dưới cùng domain và port. Thêm thông tin về layer 7, xem phần HTTP của [​IMG]

    Trong ví dụ này, nếu người dùng yêu cầu yourdomain.com/blog, họ sẽ được chuyển hướng đến blog-backend, là tập các máy chủ chạy ứng dụng blog. Các request khác được chuyển hướng đến web-backend, mà có thể chạy các ứng dụng khác. Trong ví dụ này, cả 2 backend dùng cùng máy chủ database.


    Ví dụ một phần trong cấu hình frontend:


    frontend http

    bind *:80

    mode http


    acl url_blog path_beg /blog

    use_backend blog-backend if url_blog


    default_backend web-backend


    Cấu hình 1 frontend tên http sẽ xử lý lưu lượng vào trên port 80.


    Dòng acl url_blog path_beg /blog thảo khi 1 request có đường dẫn bắt đầu với /blog.


    Dòng use_backend blog-backend if url_blog dùng ACL để proxy lưu lượng đến blog-backend.


    Dòng default_backend web-backend chỉ định rằng tất cả các lưu lượng khác sẽ chuyển hướng đến web-backend.


    Các thuật toán cân bằng tải
    Thuật toán cân bằng tải dùng để xác định máy chủ nào, trong 1 backend, sẽ được chọn khi cân bằng tải. HAProxy cung cấp một số tùy chọn thuật toán. Ngoài việc cân bằng tải dựa trên các thuật toán, các máy chủ có thể được gán tham số weight để tính toán tần số mà máy chủ được chọn, so với các máy chủ khác.


    Bởi vì HAProxy cung cấp nhiều thuật toán cân bằng tải, chúng ta sẽ chỉ mô tả 1 vài thuật toán thông dụng trong số chúng. Xem HAProxy Configuration Manual để có danh sách đầy đủ các thuật toán.


    roundrobin
    Round Robin chọn các máy chủ lần lượt. Đây là thuật toán mặc định.


    leastconn
    Chọn máy chủ đang có ít kết nối đến nhất – khuyên dùng cho các kết nối có session kéo dài. Các máy chủ trong cùng backend cũng được xoay vòng theo cách roundrobin.


    source
    Chọn máy chủ dựa trên 1 hash của source IP, ví dụ IP address của người dùng của bạn. Đây là 1 phương pháp nhằm đảm bảo rằng 1 người dùng sẽ kết nối đến cùng 1 máy chủ.


    Sticky Session
    Một số ứng dụng yêu cầu người dùng giữa kết nối đến cùng máy chủ backend. Việc duy trì lâu dài này đạt được thông qua sticky session, dùng tham số appsession trong backend.


    Health Check
    HAProxy dùng health check để xác định nếu 1 máy chủ trong backend sẵn sàng xử lý request. Điều này tránh việc thủ công loại bỏ 1 máy chủ khỏi backend nếu nó không sẵn sàng. Mặc định health check tạo 1 kết nối TCP đến máy chủ, ví dụ nó kiểm tra nếu 1 máy chủ backend đang lắng nghe trên IP address và port đã được cấu hình.


    Nếu một máy chủ không sẵn sàng khi health check, và vì thế không thể xử lý request, nó được tự động vô hiệu hóa trong backend. Ví dụ lưu lượng sẽ không được chuyển hướng đến cho đến khi nó sẵn sàng. Nếu tất cả các máy chủ trong backend lỗi, dịch vụ sẽ không sẵn sàng cho đến khi ít nhất 1 máy chủ trong backend sẵn sàng phục vụ.


    Đối với 1 số loại backend nhất định, như máy chủ cơ sở dữ liệu, health check mặc định là không đủ để xác định máy chủ vẫn còn khỏe.


    Các giải pháp khác
    Nếu bạn cảm thấy HAProxy quá phức tạp so với nhu cầu, các giải pháp sau đây có thể phù hợp:

    * Linux Virtual Server (LVS) – Một layer 4 load balancer đơn giản, nhanh được giới thiệu trong nhiều bản phân phối Linux.

    * Nginx – Máy chủ web nhanh và đáng tin cậy được dùng cho proxy và cân bằng tải. Nginx thường dùng kết hợp với HAProxy cho việc lưu đệm (caching) và nén dữ liệu (compression) của mình.


    Lưu ý: HAProxy có single point of failure (SPOF), nên cần nhiều HAProxy với một số loại failover (chuyển đổi dự phòng) dùng VRRP. Keepalived thường dùng cho việc này.

    để đảm bảo true HA.
     
    Đang tải...
    nam lim xanh

    Bình Luận Bằng Facebook