Hướng dẫn dành cho người mới bắt đầu HAProxy

Huong Dan Danh Cho Nguoi Moi Bat Dau Haproxy



Khi ứng dụng của bạn mở rộng quy mô, nhu cầu thêm nhiều máy chủ hơn để xử lý nhiều lưu lượng truy cập hơn sẽ xuất hiện. Ứng dụng của bạn càng nhận được nhiều lưu lượng truy cập thì khả năng phải đối mặt với thời gian ngừng hoạt động khi máy chủ quá tải càng cao. Tuy nhiên, có những công cụ như HAProxy cho phép bạn xác định cách xử lý lưu lượng để cân bằng tải trên máy chủ của mình. Ý tưởng là để đảm bảo rằng không có máy chủ nào bị quá tải. Proxy có tính sẵn sàng cao là một phần mềm nguồn mở được thiết kế để cung cấp khả năng cân bằng tải đáng tin cậy đồng thời hoạt động như một proxy ngược cho các ứng dụng TCP/HTTP.

HAProxy hoạt động để giảm tình trạng quá tải cho bất kỳ máy chủ nào và đạt được điều này bằng cách phân phối lưu lượng truy cập để đảm bảo rằng không có máy chủ nào bị quá tải nhưng vẫn có sẵn các máy chủ khác. Một nền tảng như Instagram có lưu lượng truy cập lớn do các yêu cầu được gửi mỗi giây, do đó cần sử dụng HAProxy để xác định giao diện người dùng, chương trình phụ trợ và trình nghe cho máy chủ để tránh quá tải.

Tại sao nên sử dụng HAProxy

Trước khi tìm hiểu về cách cài đặt và cấu hình HAProxy, bạn nên hiểu lý do tại sao chúng ta cần nó, nhờ những tính năng mà nó cung cấp. Sau đây là các tính năng chính của HAProxy:







  1. Cân bằng tải – Với HAProxy, bạn có thể thoải mái phân phối lưu lượng trên các máy chủ khác nhau để tránh làm quá tải một máy chủ. Bằng cách đó, ứng dụng của bạn sẽ không gặp phải bất kỳ vấn đề thời gian ngừng hoạt động nào và bạn sẽ đạt được khả năng phản hồi, độ tin cậy và tính khả dụng nhanh hơn.
  2. Ghi nhật ký và giám sát – Bạn sẽ nhận được nhật ký giám sát chi tiết cho máy chủ của mình để trợ giúp khắc phục sự cố. Ngoài ra, HAProxy còn có trang thống kê nơi bạn có thể nhận được các phân tích hiệu suất theo thời gian thực cho bộ cân bằng tải của mình.
  3. Kiểm tra sức khỏe – Ngay cả máy chủ của bạn cũng yêu cầu kiểm tra tình trạng để xác định trạng thái của chúng. HAProxy thường xuyên chạy kiểm tra tình trạng để biết trạng thái máy chủ của bạn nhằm nâng cao độ tin cậy của máy chủ. Nếu phát hiện thấy một máy chủ không tốt, nó sẽ định tuyến lại lưu lượng truy cập đến một máy chủ khác.
  4. Proxy ngược – Một cách để tăng cường bảo mật là ẩn cấu trúc bên trong. May mắn thay, HAProxy cho phép bạn nhận lưu lượng truy cập từ máy khách và định tuyến chúng đến các máy chủ thích hợp. Bằng cách đó, cấu trúc bên trong của bạn sẽ được ẩn khỏi tầm mắt của hacker.
  5. ACL (Danh sách kiểm soát truy cập) – Với HAProxy, bạn có thể xác định cách định tuyến lưu lượng truy cập bằng cách sử dụng nhiều tiêu chí khác nhau như đường dẫn, tiêu đề và địa chỉ IP. Do đó, việc xác định logic định tuyến tùy chỉnh cho lưu lượng truy cập của bạn trở nên dễ dàng hơn.
  6. Chấm dứt SSL – Theo mặc định, SSL/TLS được máy chủ phụ trợ giảm tải, điều này làm giảm hiệu suất. Tuy nhiên, với HAProxy, việc chấm dứt SSL/TLS xảy ra ở bộ cân bằng tải, giảm tải tác vụ trong các máy chủ phụ trợ.

Cài đặt HAProxy

Cho đến nay, chúng ta đã xác định HAProxy là gì và thảo luận về các tính năng mà nó cung cấp để giúp bạn hiểu lý do tại sao bạn cần nó cho ứng dụng của mình. Bước tiếp theo là hiểu cách bắt đầu bằng cách cài đặt nó trên hệ thống của bạn.



Nếu bạn đang chạy hệ thống Ubuntu hoặc Debian, HAProxy có thể được cài đặt từ trình quản lý gói APT. Chạy lệnh sau:



$ sudo apt cập nhật
$ sudo apt cài đặt haproxy

Tương tự, nếu bạn đang sử dụng hệ thống dựa trên RHEL hoặc CentOS, HAProxy có sẵn từ trình quản lý gói “yum”. Chạy các lệnh sau:





$ sudo yum cập nhật
$ sudo yum cài đặt haproxy

Trong trường hợp của chúng tôi, chúng tôi đang sử dụng Ubuntu. Vì vậy, chúng tôi có lệnh của chúng tôi như sau:



Sau đó, chúng tôi có thể kiểm tra phiên bản của nó để chắc chắn rằng chúng tôi đã cài đặt HAProxy thành công.

$ haproxy --version

Cách cấu hình HAProxy

Khi HAProxy được cài đặt, bây giờ bạn có thể mở tệp cấu hình của nó ( / etc/haproxy/haproxy.cfg) và xác định cài đặt mà bạn muốn sử dụng cho bộ cân bằng tải của mình.

Mở tệp cấu hình bằng trình chỉnh sửa như nano hoặc vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Bạn nhận được một tệp cấu hình giống như tệp sau:

Từ tệp cấu hình, bạn sẽ nhận thấy rằng nó có hai phần chính:

  1. toàn cầu - Đây là phần đầu tiên trong tệp và không được thay đổi giá trị của nó. Nó chứa các cài đặt quy trình xác định cách hoạt động của HAProxy. Chẳng hạn, nó xác định chi tiết ghi nhật ký và các nhóm hoặc người dùng có thể thực thi các chức năng HAProxy. Lưu ý rằng trong tệp cấu hình này, bạn chỉ có thể có một phần chung và các giá trị của nó sẽ không bị thay đổi.
  1. mặc định – Phần này chứa các giá trị mặc định cho các nút. Ví dụ: bạn có thể thêm thời gian chờ hoặc chế độ hoạt động cho HAProxy của mình trong phần này. Ngoài ra, có thể có nhiều phần mặc định trong tệp cấu hình HAProxy của bạn.

Dưới đây là ví dụ về phần “Mặc định”:

Trong hình ảnh đã cho, chế độ này xác định cách HAProxy của bạn sẽ xử lý các yêu cầu đến. Bạn có thể đặt chế độ thành HTTP hoặc TCP. Về thời gian chờ, nó chỉ định HAProxy sẽ đợi trong bao lâu. Ví dụ: thời gian chờ kết nối là thời gian chờ trước khi thực hiện kết nối phụ trợ. Thời gian chờ của máy khách là khoảng thời gian HAProxy phải đợi để máy khách gửi dữ liệu. Máy chủ hết thời gian chờ là thời gian chờ máy chủ thích hợp gửi dữ liệu sẽ được chuyển tiếp đến máy khách. Cách bạn xác định các giá trị mặc định đóng vai trò rất quan trọng trong việc nâng cao thời gian phản hồi cho ứng dụng của bạn.

Có ba phần nữa mà bạn nên xác định để bộ cân bằng tải của mình hoạt động như mong đợi.

  1. giao diện người dùng – Phần này chứa các địa chỉ IP mà bạn muốn khách hàng của mình sử dụng để thiết lập kết nối.
  2. phụ trợ – Nó hiển thị các nhóm máy chủ xử lý các yêu cầu như được xác định trong phần giao diện người dùng.
  3. Nghe - Nó được sử dụng liên tục khi bạn muốn định tuyến một nhóm máy chủ cụ thể. Phần này kết hợp các nhiệm vụ của frontend và backend.

Hãy có một ví dụ

Trong ví dụ này, chúng tôi xác định giao diện người dùng để sử dụng localhost với một cổng cụ thể. Tiếp theo, chúng tôi liên kết nó với phần phụ trợ chạy localhost rồi chạy máy chủ Python để kiểm tra xem mọi thứ có hoạt động như mong đợi đối với việc cân bằng tải hay không. Thực hiện theo các bước đã cho.

Bước 1: Cấu hình phần mặc định

Trong phần “Mặc định”, chúng tôi đặt các giá trị được chia sẻ giữa các nút. Đối với trường hợp của chúng tôi, chúng tôi đặt chế độ thành HTTP và đặt thời gian chờ cho máy khách và máy chủ. Bạn có thể điều chỉnh thời gian phù hợp với nhu cầu của mình.

Hãy nhớ rằng tất cả các chỉnh sửa này đều nằm trong cấu hình HAProxy có tại “/etc/haproxy/haproxy.cfg”. Khi phần mặc định được định cấu hình, hãy xác định giao diện người dùng.

Bước 2: Cấu hình phần Frontend

Trong phần giao diện người dùng, chúng tôi xác định cách chúng tôi muốn khách hàng truy cập trực tuyến vào ứng dụng hoặc trang web. Chúng tôi cung cấp địa chỉ IP cho ứng dụng. Nhưng trong trường hợp này, chúng tôi làm việc với localhost. Do đó, địa chỉ IP của chúng tôi là địa chỉ dự phòng 127.0.0.1 và chúng tôi muốn chấp nhận các kết nối qua cổng 80.

Bạn phải thêm từ khóa “bind” đóng vai trò là người nghe địa chỉ IP trên cổng được chỉ định. Địa chỉ IP và cổng mà bạn xác định là những gì bộ cân bằng tải sử dụng để chấp nhận các yêu cầu đến.

Sau khi thêm các dòng trước đó vào tệp cấu hình của bạn, chúng ta phải khởi động lại “haproxy.service” bằng lệnh sau:

$ sudo systemctl khởi động lại haproxy

Tại thời điểm này, chúng ta có thể thử gửi yêu cầu đến trang web của mình bằng lệnh “curl”. Chạy lệnh và thêm địa chỉ IP mục tiêu.

$curl <địa chỉ IP>

Vì chúng tôi vẫn chưa xác định phần phụ trợ của HAProxy sẽ như thế nào nên chúng tôi gặp phải lỗi 503 như sau. Mặc dù bộ cân bằng tải đã quản lý để nhận các yêu cầu nhưng hiện tại không có máy chủ nào có sẵn để xử lý yêu cầu đó, do đó xảy ra lỗi.

Bước 3: Cấu hình phần cuối

Phần phụ trợ là nơi chúng tôi xác định các máy chủ sẽ xử lý mọi yêu cầu đến. Bộ cân bằng tải tham khảo phần này để biết cách phân phối các yêu cầu đến nhằm đảm bảo rằng không có máy chủ nào bị quá tải.

Lỗi 503 mà chúng tôi gặp phải trước đó là do chúng tôi không có bất kỳ chương trình phụ trợ nào để xử lý các yêu cầu. Hãy bắt đầu bằng cách xác định “default_backend” để xử lý các yêu cầu. Bạn xác định nó trong phần frontend. Chúng tôi đặt tên cho nó là “linux_backend” cho trường hợp này.

Tiếp theo, tạo phần phụ trợ có cùng tên với tên được xác định trong phần giao diện người dùng. Sau đó, bạn phải sử dụng từ khóa “máy chủ”, theo sau là tên máy chủ của bạn và địa chỉ IP của nó. Hình ảnh sau đây cho thấy chúng tôi đã xác định máy chủ “linuxhint1” bằng IP 127.0.0.1 và cổng 8001:

Bạn có thể có một nhóm máy chủ phụ trợ, nhưng chúng tôi chỉ xác định một máy chủ cho trường hợp này. Đảm bảo rằng bạn lưu tập tin. Chúng ta phải khởi động lại dịch vụ HAProxy một lần nữa.

Để kiểm tra bộ cân bằng tải HAProxy đã tạo, chúng tôi tạo một máy chủ web bằng Python3 để liên kết các cổng phụ trợ bằng địa chỉ IP mà chúng tôi đã chỉ định. Chúng ta chạy lệnh như sau:

$ python3 -m http.server 8001 --bind 127.0.0.1

Đảm bảo rằng bạn thay thế các giá trị để khớp với địa chỉ IP và cổng mà bạn muốn liên kết. Lưu ý cách máy chủ web được tạo và lắng nghe mọi yêu cầu đến.

Trên một thiết bị đầu cuối khác, hãy sử dụng lệnh “curl” để gửi yêu cầu đến máy chủ.

$curl <địa chỉ IP>

Không giống như cách chúng tôi gặp lỗi 503 trước đó cho thấy rằng không có máy chủ nào sẵn sàng xử lý yêu cầu, lần này chúng tôi nhận được kết quả đầu ra xác nhận rằng bộ cân bằng tải HAProxy của chúng tôi đang hoạt động.

Nếu quay lại thiết bị đầu cuối trước nơi chúng tôi đã tạo máy chủ web, bạn sẽ thấy rằng chúng tôi nhận được đầu ra thành công 200 xác nhận rằng HAProxy đã nhận được yêu cầu và xử lý nó bằng cách gửi nó đến máy chủ được xác định trong phần phụ trợ của chúng tôi.

Đó là cách bạn có thể đặt HAProxy đơn giản cho trang web hoặc ứng dụng của mình.

Làm việc với các quy tắc

Trước khi chúng ta kết thúc hướng dẫn HAProxy dành cho người mới bắt đầu này, hãy nói nhanh về cách bạn có thể xác định các quy tắc để hướng dẫn cách bộ cân bằng tải xử lý các yêu cầu.

Thực hiện theo các bước tương tự như trước, hãy giữ nguyên phần mặc định của chúng tôi và xác định các địa chỉ IP khác nhau trong phần giao diện người dùng. Chúng tôi liên kết cùng một địa chỉ IP nhưng chấp nhận kết nối từ các cổng khác nhau.

Hơn nữa, chúng tôi có “default_backend” và một “use_backend” khác là một nhóm máy chủ khác mà chúng tôi sẽ sử dụng tùy thuộc vào cổng nơi yêu cầu đến. Trong cấu hình sau, tất cả các yêu cầu qua cổng 81 đều được xử lý bởi các máy chủ trong “Linux2_backend”. Mọi yêu cầu khác đều được xử lý bởi “default_backend”.

Sau đó, chúng tôi tạo các phần phụ trợ như được xác định trong giao diện người dùng. Lưu ý rằng đối với mỗi chương trình phụ trợ, chúng tôi có một máy chủ khác nhau mà chúng tôi chỉ định sử dụng để xử lý các yêu cầu.

Nhanh chóng khởi động lại dịch vụ HAProxy.

Hãy tạo máy chủ web bằng Python3 và liên kết các yêu cầu trên cổng 8002, máy chủ phụ trợ thay thế.

Khi gửi yêu cầu tới nó, chúng tôi chỉ định cổng là 81 để kích hoạt bộ cân bằng tải gửi yêu cầu đến máy chủ thay thế không phải là máy chủ mặc định.

Kiểm tra lại máy chủ web của chúng tôi, chúng tôi có thể thấy rằng nó quản lý để nhận và xử lý các yêu cầu và đưa ra phản hồi 200 (thành công).

Đó là cách bạn có thể xác định các quy tắc để hướng dẫn cách bộ cân bằng tải của bạn nhận và xử lý các yêu cầu.

Phần kết luận

HAProxy là giải pháp lý tưởng để cân bằng tải cho các ứng dụng TCP/HTTP. Sau khi cài đặt, bạn có thể thoải mái chỉnh sửa tệp cấu hình để xác định các phần mặc định, giao diện người dùng và phần phụ trợ nhằm hướng dẫn cách hoạt động của bộ cân bằng tải. Bài đăng này là hướng dẫn dành cho người mới bắt đầu về HAProxy. Nó bắt đầu bằng việc xác định HAProxy và các tính năng của nó. Tiếp theo, nó đi sâu vào tìm hiểu cách định cấu hình HAProxy và kết luận bằng cách đưa ra ví dụ về cách sử dụng HAProxy làm bộ cân bằng tải.