Cài đặt bộ cân bằng tải HAProxy trên CentOS

Bản dịch của bài báo đã được chuẩn bị vào đêm trước khi bắt đầu khóa học "Quản trị viên Linux. Ảo hóa và phân cụm"

Cài đặt bộ cân bằng tải HAProxy trên CentOS

Cân bằng tải là giải pháp phổ biến để mở rộng quy mô ứng dụng web theo chiều ngang trên nhiều máy chủ, đồng thời cung cấp cho người dùng một điểm truy cập duy nhất vào dịch vụ. HAProxy là một trong những phần mềm cân bằng tải nguồn mở phổ biến nhất cũng cung cấp chức năng proxy và tính sẵn sàng cao.

HAProxy cố gắng tối ưu hóa việc sử dụng tài nguyên, tối đa hóa thông lượng, giảm thiểu thời gian phản hồi và tránh làm quá tải bất kỳ tài nguyên riêng lẻ nào. Nó có thể được cài đặt trên nhiều bản phân phối Linux, chẳng hạn như CentOS 8, mà chúng tôi sẽ tập trung vào trong hướng dẫn này, cũng như các hệ thống Debian 8 и Ubuntu 16.

Cài đặt bộ cân bằng tải HAProxy trên CentOS

HAProxy đặc biệt phù hợp với những website có lượng truy cập rất cao và do đó thường được sử dụng để nâng cao độ tin cậy và hiệu suất của cấu hình dịch vụ web nhiều máy chủ. Hướng dẫn này nêu các bước để thiết lập HAProxy làm bộ cân bằng tải trên máy chủ đám mây CentOS 8, sau đó định tuyến lưu lượng truy cập đến máy chủ web của bạn.

Điều kiện tiên quyết để có kết quả tốt nhất là bạn phải có ít nhất hai máy chủ web và một máy chủ cân bằng tải. Máy chủ web phải chạy ít nhất một dịch vụ web cơ bản như nginx hoặc httpd để kiểm tra cân bằng tải giữa chúng.

Cài đặt HAProxy trên CentOS 8

Vì HAProxy là một ứng dụng nguồn mở đang phát triển nhanh chóng nên bản phân phối có sẵn cho bạn trong kho lưu trữ CentOS tiêu chuẩn có thể không phải là phiên bản mới nhất. Để tìm ra phiên bản hiện tại, hãy chạy lệnh sau:

sudo yum info haproxy

HAProxy luôn cung cấp ba phiên bản ổn định để bạn lựa chọn: hai phiên bản được hỗ trợ gần đây nhất và phiên bản thứ ba, cũ hơn vẫn đang nhận được các bản cập nhật quan trọng. Bạn luôn có thể kiểm tra phiên bản ổn định mới nhất được liệt kê trên trang web HAProxy và sau đó quyết định xem bạn muốn làm việc với phiên bản nào.

Trong hướng dẫn này, chúng tôi sẽ cài đặt phiên bản ổn định mới nhất 2.0, phiên bản này chưa có sẵn trong kho tiêu chuẩn tại thời điểm viết hướng dẫn. Bạn sẽ cần phải cài đặt nó từ nguồn ban đầu. Nhưng trước tiên, hãy kiểm tra xem bạn đã đáp ứng các điều kiện cần thiết để tải xuống và biên dịch chương trình chưa.

sudo yum install gcc pcre-devel tar make -y

Tải xuống mã nguồn bằng lệnh bên dưới. Bạn có thể kiểm tra xem có phiên bản mới hơn trên Trang tải xuống HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Sau khi quá trình tải xuống hoàn tất, hãy giải nén các tệp bằng lệnh bên dưới:

tar xzvf ~/haproxy.tar.gz -C ~/

Chuyển đến thư mục nguồn đã giải nén:

cd ~/haproxy-2.0.7

Sau đó biên dịch chương trình cho hệ thống của bạn:

make TARGET=linux-glibc

Và cuối cùng, cài đặt HAProxy:

sudo make install

HAProxy hiện đã được cài đặt nhưng cần một số thao tác bổ sung để hoạt động. Hãy tiếp tục thiết lập phần mềm và dịch vụ dưới đây.

Thiết lập HAProxy cho máy chủ của bạn

Bây giờ hãy thêm các thư mục và tệp thống kê sau cho các mục HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Tạo một liên kết tượng trưng cho các tệp nhị phân để bạn có thể chạy các lệnh HAProxy với tư cách là người dùng thông thường:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Nếu bạn muốn thêm proxy vào hệ thống của mình dưới dạng dịch vụ, hãy sao chép tệp haproxy.init từ các ví dụ vào thư mục /etc/init.d. Chỉnh sửa quyền của tệp để tập lệnh sẽ chạy, sau đó khởi động lại trình nền systemd:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

Bạn cũng cần cho phép dịch vụ tự động khởi động lại khi hệ thống khởi động:

sudo chkconfig haproxy on

Để thuận tiện, chúng tôi cũng khuyên bạn nên thêm người dùng mới để chạy HAProxy:

sudo useradd -r haproxy

Sau này, bạn có thể kiểm tra lại số phiên bản đã cài đặt bằng lệnh sau:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

Trong trường hợp của chúng tôi, phiên bản phải là 2.0.7, như minh họa trong ví dụ đầu ra ở trên.

Cuối cùng, tường lửa mặc định trong CentOS 8 khá hạn chế đối với dự án này. Sử dụng các lệnh sau để cho phép các dịch vụ cần thiết và đặt lại tường lửa:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Thiết lập cân bằng tải

Thiết lập HAProxy là một quá trình khá đơn giản. Về cơ bản, tất cả những gì bạn cần làm là cho HAProxy biết những kết nối nào nó nên lắng nghe và nơi nào nó sẽ chuyển tiếp chúng.

Điều này được thực hiện bằng cách tạo tệp cấu hình /etc/haproxy/haproxy.cfg với các cài đặt xác định. Bạn có thể đọc về các tùy chọn cấu hình HAProxy trên trang tài liệunếu bạn muốn biết thêm về nó.

Cân bằng tải ở lớp vận chuyển (lớp 4)

Hãy bắt đầu với thiết lập cơ bản. Tạo một tập tin cấu hình mới, ví dụ sử dụng vi với lệnh dưới đây:

sudo vi /etc/haproxy/haproxy.cfg

Thêm các phần sau vào tập tin. Thay thế tên máy chủ máy chủ của bạn sẽ gọi tên gì trên trang thống kê và riêng_ip — địa chỉ IP riêng của máy chủ mà bạn muốn hướng lưu lượng truy cập web đến. Bạn có thể kiểm tra địa chỉ IP riêng tư trên bảng điều khiển UpCloud và trên tab Mạng riêng tư trong thực đơn mạng.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Điều này xác định bộ cân bằng tải lớp vận chuyển (lớp 4) có tên bên ngoài là http_front, lắng nghe trên cổng 80, sau đó chuyển tiếp lưu lượng truy cập đến một chương trình phụ trợ mặc định có tên http_back. Số liệu thống kê bổ sung /haproxy?stats kết nối trang thống kê với địa chỉ được chỉ định.

Các thuật toán cân bằng tải khác nhau.

Việc chỉ định các máy chủ trong phần phụ trợ cho phép HAProxy sử dụng các máy chủ này để cân bằng tải theo thuật toán quay vòng khi có thể.

Các thuật toán cân bằng được sử dụng để xác định máy chủ nào trong phần phụ trợ mà mỗi kết nối được chuyển đến. Dưới đây là một số tùy chọn hữu ích:

  • Vòng tròn: Mỗi máy chủ được sử dụng lần lượt theo trọng lượng của nó. Đây là thuật toán mượt mà và công bằng nhất khi thời gian xử lý của các máy chủ vẫn được phân bố đều. Thuật toán này rất linh hoạt, cho phép điều chỉnh trọng lượng của máy chủ một cách nhanh chóng.
  • Ít nhất: máy chủ có ít kết nối nhất sẽ được chọn. Round robin được thực hiện giữa các máy chủ có cùng tải. Sử dụng thuật toán này được khuyến nghị cho các phiên dài như LDAP, SQL, TSE, v.v., nhưng nó không phù hợp lắm cho các phiên ngắn như HTTP.
  • Đầu tiên: Máy chủ đầu tiên có khe kết nối khả dụng sẽ nhận được kết nối. Máy chủ được chọn từ ID số thấp nhất đến cao nhất, mặc định là vị trí của máy chủ trong nhóm. Khi máy chủ đạt maxconn, máy chủ tiếp theo sẽ được sử dụng.
  • nguồn: Địa chỉ IP nguồn được băm và chia cho tổng trọng lượng của các máy chủ đang chạy để xác định máy chủ nào sẽ nhận được yêu cầu. Bằng cách này, cùng một địa chỉ IP của máy khách sẽ luôn đến cùng một máy chủ, trong khi các máy chủ vẫn giữ nguyên.

Thiết lập cân bằng tải ở cấp ứng dụng (lớp 7)

Một tùy chọn khả dụng khác là định cấu hình bộ cân bằng tải để chạy ở lớp ứng dụng (lớp 7), tùy chọn này rất hữu ích khi các phần của ứng dụng web của bạn được đặt trên các máy chủ khác nhau. Điều này có thể đạt được bằng cách điều chỉnh việc truyền kết nối, ví dụ như bằng URL.

Mở tệp cấu hình HAProxy bằng trình soạn thảo văn bản:

sudo vi /etc/haproxy/haproxy.cfg

Sau đó định cấu hình các phân đoạn giao diện người dùng và phụ trợ theo ví dụ bên dưới:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

Giao diện người dùng khai báo quy tắc ACL có tên url_blog áp dụng cho tất cả các kết nối có đường dẫn bắt đầu bằng /blog. Use_backend chỉ định rằng các kết nối phù hợp với điều kiện url_blog phải được cung cấp bởi một chương trình phụ trợ có tên blog_back và tất cả các yêu cầu khác sẽ được xử lý bởi chương trình phụ trợ mặc định.

Về phía phụ trợ, cấu hình thiết lập hai nhóm máy chủ: http_back, như trước đây và một nhóm mới có tên blog_back, xử lý các kết nối đến example.com/blog.

Sau khi thay đổi cài đặt, hãy lưu tệp và khởi động lại HAProxy bằng lệnh sau:

sudo systemctl restart haproxy

Nếu bạn nhận được bất kỳ cảnh báo hoặc thông báo lỗi nào trong khi khởi động, hãy kiểm tra cấu hình của bạn để tìm chúng và đảm bảo rằng bạn đã tạo tất cả các tệp và thư mục cần thiết, sau đó thử khởi động lại.

Kiểm tra thiết lập

Sau khi HAProxy được định cấu hình và chạy, hãy mở địa chỉ IP công cộng của máy chủ cân bằng tải trong trình duyệt và kiểm tra xem bạn đã kết nối chính xác với chương trình phụ trợ chưa. Tham số uri thống kê trong cấu hình sẽ tạo trang thống kê tại địa chỉ được chỉ định.

http://load_balancer_public_ip/haproxy?stats

Khi bạn tải trang thống kê, nếu tất cả máy chủ của bạn hiển thị màu xanh lục thì quá trình thiết lập đã thành công!

Cài đặt bộ cân bằng tải HAProxy trên CentOS

Trang thống kê chứa một số thông tin hữu ích để theo dõi máy chủ web của bạn, bao gồm thời gian lên/xuống và số phiên. Nếu máy chủ được đánh dấu màu đỏ, hãy đảm bảo rằng máy chủ đã được bật và bạn có thể ping nó từ máy cân bằng tải.

Nếu bộ cân bằng tải của bạn không phản hồi, hãy đảm bảo rằng các kết nối HTTP không bị tường lửa chặn. Đồng thời đảm bảo rằng HAProxy đang hoạt động bằng lệnh bên dưới:

sudo systemctl status haproxy

Bảo vệ trang thống kê bằng mật khẩu

Tuy nhiên, nếu trang thống kê chỉ được liệt kê ở giao diện người dùng thì nó sẽ mở cho mọi người xem, đây có thể không phải là một ý tưởng hay. Thay vào đó, bạn có thể gán cho nó một số cổng tùy chỉnh bằng cách thêm ví dụ bên dưới vào cuối tệp haproxy.cfg của bạn. Thay thế tên truy nhập и mật khẩu cho một cái gì đó an toàn:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Sau khi thêm nhóm người nghe mới, hãy xóa liên kết uri thống kê cũ khỏi nhóm giao diện người dùng. Khi hoàn tất, hãy lưu tệp và khởi động lại HAProxy.

sudo systemctl restart haproxy

Sau đó mở lại bộ cân bằng tải với số cổng mới và đăng nhập bằng tên người dùng và mật khẩu bạn đã chỉ định trong tệp cấu hình.

http://load_balancer_public_ip:8181

Đảm bảo tất cả các máy chủ của bạn vẫn hiển thị màu xanh lục và sau đó chỉ mở IP cân bằng tải mà không có bất kỳ số cổng nào trong trình duyệt của bạn.

http://load_balancer_public_ip/

Nếu bạn có ít nhất một số trang đích khác nhau trên máy chủ phụ trợ của mình, bạn sẽ nhận thấy rằng mỗi khi tải lại trang, bạn sẽ nhận được phản hồi từ một máy chủ khác. Bạn có thể thử các thuật toán cân bằng khác nhau trong phần cấu hình hoặc xem qua tài liệu đầy đủ.

Kết luận: Cân bằng tải HAProxy

Chúc mừng bạn đã thiết lập thành công bộ cân bằng tải HAProxy của mình! Ngay cả với thiết lập cân bằng tải cơ bản, bạn có thể cải thiện đáng kể hiệu suất và tính khả dụng của ứng dụng web của mình. Hướng dẫn này chỉ là phần giới thiệu về cân bằng tải với HAProxy, có khả năng làm được nhiều điều hơn những gì có thể được đề cập trong hướng dẫn thiết lập nhanh. Chúng tôi khuyên bạn nên thử nghiệm với các cấu hình khác nhau bằng cách sử dụng tài liệu phong phú, có sẵn cho HAProxy, sau đó bắt đầu lập kế hoạch cân bằng tải cho môi trường sản xuất của bạn.

Bằng cách sử dụng nhiều máy chủ để bảo vệ dịch vụ web của bạn với khoảng trống, bản thân bộ cân bằng tải vẫn có thể gây ra lỗi. Bạn có thể cải thiện hơn nữa tính khả dụng cao bằng cách cài đặt IP nổi giữa nhiều bộ cân bằng tải. Bạn có thể tìm hiểu thêm về điều này trong bài viết về địa chỉ IP nổi trên UpCloud.

Thông tin thêm về khóa học "Quản trị viên Linux. Ảo hóa và phân cụm"***

Nguồn: www.habr.com

Thêm một lời nhận xét