Thứ ba, 13/05/2014 | 00:00 GMT+7

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

HAProxy, viết tắt của High Av available Proxy, là một phần mềm open-souce phổ biến TCP / HTTP Load Balancer và giải pháp proxy có thể chạy trên Linux, Solaris và FreeBSD. Công dụng phổ biến nhất của nó là cải thiện hiệu suất và độ tin cậy của môi trường server bằng cách phân phối dung lượng công việc trên nhiều server (ví dụ: web, ứng dụng, database ). Nó được sử dụng trong nhiều môi trường cấu hình cao, bao gồm: GitHub, Imgur, Instagram và Twitter.

Trong hướng dẫn này, ta sẽ cung cấp tổng quan chung về HAProxy là gì, thuật ngữ cân bằng tải cơ bản và các ví dụ về cách nó được dùng để cải thiện hiệu suất và độ tin cậy của môi trường server của bạn .

Thuật ngữ HAProxy

Có nhiều thuật ngữ và khái niệm quan trọng khi thảo luận về cân bằng tải và proxy. Ta sẽ xem xét các thuật ngữ thường được sử dụng trong các phần phụ sau.

Trước khi đi vào các loại cân bằng tải cơ bản, ta sẽ nói về ACL, backend và giao diện user .

Danh sách kiểm soát truy cập (ACL)

Liên quan đến cân bằng tải, ACL được sử dụng để kiểm tra một số điều kiện và thực hiện một hành động (ví dụ: chọn server hoặc chặn yêu cầu) dựa trên kết quả kiểm tra. Ví dụ, việc sử dụng ACL cho phép chuyển tiếp lưu lượng mạng linh hoạt dựa trên nhiều yếu tố như khớp mẫu và số lượng kết nối với backend .

Ví dụ về ACL:

acl url_blog path_beg /blog 

ACL này được so khớp nếu đường dẫn yêu cầu của user bắt đầu bằng / blog . Ví dụ: điều này sẽ trùng với yêu cầu của http://yourdomain.com/blog/blog-entry-1 .

Để có hướng dẫn chi tiết về cách sử dụng ACL, hãy xem Hướng dẫn cấu hình HAProxy .

Backend

Phần backend là một tập hợp các server nhận các yêu cầu được chuyển tiếp. Phần backend được định nghĩa trong phần backend của cấu hình HAProxy. Ở dạng cơ bản nhất của nó, một chương trình backend có thể được xác định bằng:

  • sử dụng thuật toán cân bằng tải nào
  • danh sách các server và cổng

Một chương trình backend có thể chứa một hoặc nhiều server trong đó – nói chung, việc thêm nhiều server hơn vào phần backend của bạn sẽ tăng khả năng tải tiềm năng của bạn bằng cách dàn trải tải trên nhiều server . Tăng độ tin cậy cũng đạt được thông qua cách này, trong trường hợp một số server backend của bạn không khả dụng.

Đây là một ví dụ về cấu hình hai chương trình backend , phần backend web và phần backend blog với hai web server trong mỗi server , lắng nghe trên cổng 80:

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 

dòng balance roundrobin chỉ định thuật toán cân bằng tải, được trình bày chi tiết trong phần Thuật toán cân bằng tải .

mode http chỉ định rằng proxy lớp 7 sẽ được sử dụng, điều này được giải thích trong phần Các loại cân bằng tải .

Tùy chọn check ở cuối chỉ thị server chỉ định rằng kiểm tra tình trạng phải được thực hiện trên các server backend đó.

Giao diện user

Giao diện user xác định cách các yêu cầu sẽ được chuyển tiếp đến các phần mềm backend . Giao diện user được định nghĩa trong phần giao diện user của cấu hình HAProxy. Định nghĩa của chúng bao gồm các thành phần sau:

  • một tập hợp các địa chỉ IP và một cổng (ví dụ: 10.1.1.7:80, *: 443, v.v.)
  • ACL
  • các luật use_backend , xác định các backend nào sẽ sử dụng tùy thuộc vào điều kiện ACL nào được so khớp và / hoặc luật default_backend xử lý mọi trường hợp khác

Giao diện user có thể được cấu hình cho nhiều loại lưu lượng mạng khác nhau, như được giải thích trong phần tiếp theo.

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

Bây giờ ta đã hiểu về các thành phần cơ bản được sử dụng trong cân bằng tải, ta hãy đi vào các loại cơ bản của cân bằng tải.

Không cân bằng tải

Môi trường ứng dụng web đơn giản không có cân bằng tải có thể trông giống như sau:

No Load Balancing

Trong ví dụ này, user kết nối trực tiếp với web server của bạn, tại yourdomain.com và không có cân bằng tải. Nếu một web server của bạn gặp sự cố, user sẽ không thể truy cập vào web server của bạn nữa. Ngoài ra, nếu nhiều user đang cố gắng truy cập đồng thời vào server của bạn và server không thể xử lý tải, họ có thể gặp phải tình trạng chậm hoặc không thể kết nối được.

Cân bằng tải lớp 4

Cách đơn giản nhất để cân bằng tải lưu lượng mạng đến nhiều server là sử dụng cân bằng tải lớp 4 (lớp truyền tải). Cân bằng tải theo cách này sẽ chuyển tiếp lưu lượng truy cập của user dựa trên dải IP và cổng (nghĩa là nếu có yêu cầu đến http://yourdomain.com/anything , lưu lượng sẽ được chuyển tiếp đến phần backend xử lý tất cả các yêu cầu cho yourdomain.com trên cổng 80 ). Để biết thêm chi tiết về lớp 4, hãy xem phần phụ TCP của phần Giới thiệu về Mạng của ta .

Đây là sơ đồ một ví dụ đơn giản về cân bằng tải lớp 4:

Layer 4 Load Balancing

User truy cập vào cân bằng tải, mà sẽ chuyển tiếp yêu cầu của user vào group web backend của server backend . Server backend nào được chọn sẽ phản hồi trực tiếp yêu cầu của user . Nói chung, tất cả các server trong web-backend phải cung cấp nội dung giống hệt nhau – nếu không user có thể nhận được nội dung không nhất quán. Lưu ý cả hai web server đều kết nối với cùng một server database .

Cân bằng tải lớp 7

Một cách khác phức tạp hơn để cân bằng tải lưu lượng mạng là sử dụng cân bằng tải lớp 7 (lớp ứng dụng). Sử dụng lớp 7 cho phép bộ cân bằng tải chuyển tiếp các yêu cầu đến các server backend khác nhau dựa trên nội dung yêu cầu của user . Chế độ cân bằng tải này cho phép bạn chạy nhiều server ứng dụng web trong cùng một domain và cổng. Để biết thêm chi tiết về lớp 7, hãy xem phần phụ HTTP của phần Giới thiệu về Mạng của ta .

Dưới đây là sơ đồ một ví dụ đơn giản về cân bằng tải lớp 7:

Layer 7 Load Balancing

Trong ví dụ này, nếu user yêu cầu yourdomain.com/blog , họ sẽ được chuyển tiếp đến phần backend blog , là một tập hợp các server chạy ứng dụng blog. Các yêu cầu khác được chuyển tiếp đến phần backend web , có thể đang chạy một ứng dụng khác. Cả hai phần mềm backend đều sử dụng cùng một server database , trong ví dụ này.

Một đoạn mã của cấu hình giao diện user mẫu sẽ giống như sau:

frontend http   bind *:80   mode http    acl url_blog path_beg /blog   use_backend blog-backend if url_blog    default_backend web-backend 

Điều này cấu hình giao diện user có tên http , giao diện này xử lý tất cả lưu lượng đến trên cổng 80.

acl url_blog path_beg /blog trùng với một yêu cầu nếu đường dẫn của yêu cầu của user bắt đầu bằng / blog .

use_backend blog-backend if url_blog sử dụng ACL để ủy quyền lưu lượng truy cập đến blog-backend .

default_backend web-backend chỉ định rằng tất cả lưu lượng khác sẽ được chuyển tiếp đế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 được sử dụng xác định server nào, trong chương trình backend , sẽ được chọn khi cân bằng tải. HAProxy cung cấp một số tùy chọn cho các thuật toán. Ngoài thuật toán cân bằng tải, server có thể được gán một tham số trọng số để thao tác tần suất server được chọn so với các server khác.

Bởi vì HAProxy cung cấp rất nhiều thuật toán cân bằng tải, ta sẽ chỉ mô tả một vài trong số chúng ở đây. Xem Hướng dẫn cấu hình HAProxy để biết danh sách đầy đủ các thuật toán.

Một số thuật toán thường được sử dụng như sau:

roundrobin

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

ít nhất

Chọn server có số lượng kết nối ít nhất – khuyến nghị cho các phiên dài hơn. Các server trong cùng một chương trình backend cũng được quay theo kiểu vòng tròn.

nguồn

Thao tác này chọn server sẽ sử dụng dựa trên băm của IP nguồn tức là địa chỉ IP của user của bạn. Đây là một phương pháp đảm bảo rằng user sẽ kết nối với cùng một server .

Phiên cố định

Một số ứng dụng yêu cầu user tiếp tục kết nối với cùng một server backend . Sự bền bỉ này đạt được thông qua các phiên cố định, bằng cách sử dụng thông số appsession trong phần backend yêu cầu nó.

Kiểm tra sức khỏe

HAProxy sử dụng kiểm tra tình trạng để xác định xem server backend có sẵn sàng xử lý các yêu cầu hay không. Điều này tránh phải xóa thủ công server khỏi chương trình backend nếu nó không khả dụng. Kiểm tra tình trạng mặc định là cố gắng cài đặt kết nối TCP với server , tức là nó kiểm tra xem server backend có đang lắng nghe địa chỉ IP và cổng đã cấu hình hay không.

Nếu một server không kiểm tra được tình trạng và do đó không thể phục vụ các yêu cầu, nó sẽ tự động bị vô hiệu hóa trong phần backend , tức là lưu lượng truy cập sẽ không được chuyển tiếp đến nó cho đến khi nó hoạt động trở lại. Nếu tất cả các server trong chương trình backend bị lỗi, dịch vụ sẽ không khả dụng cho đến khi ít nhất một trong các server backend đó hoạt động bình thường trở lại.

Đối với một số loại backend nhất định, chẳng hạn như server database trong một số tình huống nhất định, kiểm tra tình trạng mặc định không đủ để xác định xem server có còn hoạt động hay không.

Các giải pháp khác

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

  • Server ảo Linux (LVS) - Bộ cân bằng tải lớp 4 đơn giản, nhanh chóng có trong nhiều bản phân phối Linux

  • Nginx - Một web server nhanh và tin cậy cũng được dùng cho các mục đích proxy và cân bằng tải. Nginx thường được sử dụng cùng với HAProxy cho khả năng nén và bộ nhớ đệm của nó

Tính khả dụng cao

Các cài đặt cân bằng tải lớp 4 và 7 được mô tả trước khi cả hai đều sử dụng bộ cân bằng tải để hướng lưu lượng truy cập đến một trong nhiều server backend . Tuy nhiên, bộ cân bằng tải của bạn là một điểm thất bại duy nhất trong các cài đặt này; nếu nó gặp sự cố hoặc quá tải với các yêu cầu, nó có thể gây ra độ trễ cao hoặc thời gian ngừng hoạt động cho dịch vụ của bạn.

Cài đặt tính khả dụng cao (HA) là một cơ sở hạ tầng không có một điểm lỗi nào. Nó ngăn chặn một lỗi server duy nhất trở thành sự kiện thời gian chết bằng cách thêm dự phòng vào mọi lớp kiến trúc của bạn. Bộ cân bằng tải tạo điều kiện dự phòng cho lớp backend ( web server / ứng dụng), nhưng để cài đặt tính khả dụng cao thực sự, bạn cũng cần phải có bộ cân bằng tải dự phòng.

Dưới đây là sơ đồ cài đặt tính sẵn sàng cao cơ bản:

 Cài đặt  HA

Trong ví dụ này, bạn có nhiều bộ cân bằng tải (một bộ hoạt động và một bộ bị động) đằng sau một địa chỉ IP tĩnh có thể được ánh xạ lại từ server này sang server khác. Khi user truy cập trang web , yêu cầu sẽ chuyển qua địa chỉ IP bên ngoài đến bộ cân bằng tải hoạt động. Nếu bộ cân bằng tải đó không thành công, cơ chế chuyển đổi dự phòng của bạn sẽ phát hiện nó và tự động gán lại địa chỉ IP cho một trong các server thụ động. Có một số cách khác nhau để triển khai cài đặt HA chủ động / thụ động. Để tìm hiểu thêm, hãy đọc phần Cách sử dụng IP nổi này .

Kết luận

Đến đây bạn đã có hiểu biết cơ bản về cân bằng tải và biết một số cách mà HAProxy hỗ trợ nhu cầu cân bằng tải của bạn, bạn đã có một nền tảng vững chắc để bắt đầu cải thiện hiệu suất và độ tin cậy của môi trường server của bạn .

Các hướng dẫn sau cung cấp các ví dụ chi tiết về cài đặt HAProxy:

Cách sử dụng HAProxy làm bộ cân bằng tải lớp 4 cho server ứng dụng WordPress trên Ubuntu 14.04

Cách sử dụng HAProxy để cài đặt cân bằng tải MySQL

<div class = “author”> Bởi Mitchell Anicas </div>


Tags:

Các tin liên quan