Cân bằng tải máy chủ web với HAProxy trên Ubuntu 14.04

theanh

Administrator
Nhân viên
HAProxy là gì?​
HAProxy (Proxy có tính khả dụng cao) là một trình cân bằng tải nguồn mở có thể cân bằng tải bất kỳ dịch vụ TCP nào. HAProxy là giải pháp miễn phí, rất nhanh và đáng tin cậy cung cấp cân bằng tải, khả năng sẵn sàng caoủy quyền cho các ứng dụng dựa trên TCP và HTTP. Giải pháp này đặc biệt phù hợp với các trang web có lưu lượng truy cập rất cao và hỗ trợ nhiều trang web được truy cập nhiều nhất trên thế giới.

Kể từ khi ra đời, giải pháp này đã trở thành trình cân bằng tải nguồn mở tiêu chuẩn thực tế. Mặc dù không tự quảng cáo nhưng nó được sử dụng rộng rãi. Dưới đây là sơ đồ cơ bản về cách thiết lập trông như thế nào:

Cài đặt HAProxy​
Tôi đang sử dụng Ubuntu 14.04 và cài đặt bằng cách:
Mã:
apt-get install haproxy
Bạn có thể kiểm tra phiên bản bằng cách:
Mã:
haproxy -v

Chúng ta cần bật HAProxy để bắt đầu bằng init script /etc/default/haproxy. Đặt tùy chọn ENABLED thành 1 như sau:
Mã:
ENABLED=1
Để xác minh xem thay đổi này có được thực hiện đúng không, hãy chạy init script của HAProxy mà không có bất kỳ tham số nào. Bạn sẽ thấy nội dung sau:
Mã:
$ service haproxy 

 reload restart start status stop
HAProxy hiện đã được cài đặt. Bây giờ chúng ta hãy tạo một thiết lập trong đó chúng ta có 2(hai) phiên bản Apache Web Server và 1(một) phiên bản HAProxy. Dưới đây là thông tin thiết lập:

Chúng tôi sẽ sử dụng ba hệ thống, được tạo ảo thông qua VirtualBox:

Instance 1 - Load Balancer

Tên máy chủ: haproxy
Hệ điều hành: Ubuntu
IP riêng: 192.168.205.15

Instance 2 - Máy chủ web 1

Tên máy chủ: webser01
Hệ điều hành: Ubuntu có LAMP
IP riêng: 192.168.205.16

Instance 2 - Máy chủ web 2

Tên máy chủ: webserver02
Hệ điều hành: Ubuntu có LAMP
IP riêng: 192.168.205.17

Sau đây là sơ đồ về cách thiết lập trông như thế nào:

Bây giờ chúng ta hãy cấu hình HAProxy.
Cấu hình HAProxy​
Sao lưu tệp gốc bằng cách đổi tên tệp:
Mã:
mv /etc/haproxy/haproxy.cfg{,.original}
Chúng ta sẽ tạo tệp haproxy.cfg của riêng mình. Sử dụng trình soạn thảo văn bản yêu thích của bạn, hãy tạo tệp /etc/haproxy/haproxy.cfg thành:
Mã:
nhật ký toàn cục /dev/log local0 nhật ký 127.0.0.1 local1 thông báo maxconn 4096 người dùng haproxy nhóm haproxy daemonmặc định nhật ký chế độ toàn cục http tùy chọn httplog tùy chọn dontlognull thử lại 3 tùy chọn redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000listen webfarm 0.0.0.0:80 chế độ http số liệu thống kê kích hoạt số liệu thống kê uri /haproxy?stats cân bằng vòng tròn tùy chọn httpclose tùy chọn forwardfor máy chủ webserver01 192.168.205.16:80 kiểm tra máy chủ webserver02 192.168.205.17:80 kiểm tra
Giải thích:
Mã:
nhật ký toàn cục /dev/log local0 nhật ký 127.0.0.1 local1 thông báo maxconn 4096 người dùng haproxy nhóm haproxy daemon
Chỉ thị log đề cập đến máy chủ syslog mà các thông báo nhật ký sẽ được gửi đến.
Chỉ thị maxconn chỉ định số lượng kết nối đồng thời trên giao diện người dùng. Giá trị mặc định là 2000 và phải được điều chỉnh theo cấu hình hệ thống của bạn.
Chỉ thị user và group thay đổi quy trình HAProxy thành người dùng/nhóm đã chỉ định. Những điều này không nên thay đổi.
Mã:
mặc định chế độ toàn cục nhật ký tùy chọn http tùy chọn httplog dontlognull thử lại 3 tùy chọn redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000
Phần trên có các giá trị mặc định. Tùy chọn redispatch cho phép phân phối lại phiên trong trường hợp kết nối bị lỗi. Do đó, tính bám dính của phiên sẽ bị ghi đè nếu một phiên bản máy chủ web ngừng hoạt động.
Chỉ thị retries đặt số lần thử lại để thực hiện trên một phiên bản máy chủ web sau khi kết nối bị lỗi.
Các giá trị cần sửa đổi là các chỉ thị timeout khác nhau. Tùy chọn contimeout chỉ định thời gian tối đa để chờ kết nối thành công đến phiên bản máy chủ web.
clitimeout và srvtimeout áp dụng khi máy khách hoặc máy chủ dự kiến sẽ xác nhận hoặc gửi dữ liệu trong quá trình TCP. HAProxy khuyến nghị đặt thời gian chờ của máy khách và máy chủ thành cùng một giá trị.
Mã:
listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
Khối trên chứa cấu hình cho cả giao diện người dùng và giao diện quản trị. Chúng tôi đang cấu hình HAProxy để lắng nghe trên cổng 80 cho webfarm, đây chỉ là tên để xác định ứng dụng.
Các chỉ thị stats kích hoạt trang thống kê kết nối. Có thể xem trang này bằng URL được đề cập trong stats uri, vì vậy trong trường hợp này, đó là http://192.168.205.15/haproxy?statsbản demo của trang này có thể được xem tại đây.
Chỉ thị balance chỉ định thuật toán cân bằng tải cần sử dụng. Các tùy chọn thuật toán khả dụng là:
  • Round Robin (roundrobin),
  • Static Round Robin (static-rr),
  • Least Connections (leastconn),
  • Source (nguồn),
  • URI (uri) và
  • URL tham số (url_param).
Thông tin về từng thuật toán có thể được lấy từ tài liệu chính thức.

Chỉ thị server khai báo một máy chủ phụ trợ, cú pháp là:
Mã:
server  [:port] [param*]
Tên chúng tôi đề cập ở đây sẽ xuất hiện trong nhật ký và cảnh báo. Có một số nhiều tham số khác được chỉ thị này hỗ trợ và chúng tôi sẽ sử dụng tham số kiểm tra trong bài viết này. Tùy chọn check cho phép kiểm tra tình trạng hoạt động trên phiên bản máy chủ web, nếu không, phiên bản máy chủ web sẽ luôn được coi là khả dụng.

Sau khi hoàn tất cấu hình, hãy khởi động dịch vụ HAProxy:
Mã:
sudo service haproxy start
Kiểm tra cân bằng tải và chuyển đổi dự phòng​
Chúng tôi sẽ thêm tên máy chủ vào cả tệp index.html mặc định nằm theo mặc định tại /var/www/index.html

Trên Phiên bản 2 - Máy chủ web 1 (webserver01 có IP- 192.168.205.16), thêm dòng bên dưới như sau:
Mã:
sudo sh -c "echo \Hostname: webserver01 \(192.168.205.16\)\ >> /var/www/index.html"
Trên Instance 3 - Máy chủ web 2 (webserver02 có IP- 192.168.205.17), thêm dòng bên dưới như sau:
Mã:
sudo sh -c "echo \Hostname: webserver02 \(192.168.205.17\)\ >> /var/www/index.html"
Bây giờ hãy mở trình duyệt web trên máy cục bộ và duyệt qua IP haproxy tức là http://192.168.205.15

Mỗi lần bạn làm mới tab, bạn sẽ thấy tải đang được phân phối cho từng máy chủ web. Dưới đây là ảnh chụp màn hình trình duyệt của tôi:

Lần đầu tiên khi tôi truy cập http://192.168.205.15, tôi nhận được:



Và lần thứ hai, tức là khi tôi làm mới trang, tôi nhận được:



Bạn cũng có thể kiểm tra số liệu thống kê haproxy bằng cách truy cập http://192.168.205.15/haproxy?stats

Bạn có thể làm nhiều hơn nữa với thiết lập này. Một số ý tưởng bao gồm:
  • đưa một hoặc cả hai máy chủ web ngoại tuyến để kiểm tra những gì xảy ra khi bạn truy cập HAProxy
  • cấu hình HAProxy để phục vụ trang bảo trì tùy chỉnh
  • cấu hình giao diện web để bạn có thể theo dõi trực quan số liệu thống kê HAProxy
  • thay đổi trình lập lịch thành thứ gì đó khác ngoài vòng tròn
  • cấu hình mức độ ưu tiên/trọng số cho các máy chủ cụ thể
Vậy là xong!
 
Back
Bên trên