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 và ủ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
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
Mã:
$ service haproxy
reload restart start status stop
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}
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
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ị 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
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
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).
Chỉ thị server khai báo một máy chủ phụ trợ, cú pháp là:
Mã:
server [:port] [param*]
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.htmlTrê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"
Mã:
sudo sh -c "echo \Hostname: webserver02 \(192.168.205.17\)\ >> /var/www/index.html"
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ể