Cách thiết lập HAProxy làm Bộ cân bằng tải cho Nginx trên CentOS 7

theanh

Administrator
Nhân viên
HAProxy hay High Availability Proxy là phần mềm máy chủ proxy và cân bằng tải TCP và HTTP nguồn mở. HAProxy được Willy Tarreau viết bằng C, hỗ trợ SSL, nén, duy trì kết nối, định dạng nhật ký tùy chỉnh và viết lại tiêu đề. HAProxy là máy chủ proxy và cân bằng tải nhanh và nhẹ với dung lượng bộ nhớ nhỏ và sử dụng CPU thấp. Nó được sử dụng bởi các trang web lớn như Github, StackOverflow, Reddit, Tumblr, Twitter và các trang khác. Nó đã trở thành phần mềm cân bằng tải và máy chủ proxy phổ biến nhất trong những năm qua.

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cài đặt và cấu hình HAProxy cho 3 máy chủ, một bộ cân bằng tải và hai máy chủ web Nginx. Chúng tôi sẽ cài đặt HAProxy trên một máy chủ duy nhất và sau đó cài đặt máy chủ web Nginx trên các máy chủ khác. HAProxy hoạt động như một bộ cân bằng tải cho các máy chủ web Nginx.


Khái niệm cơ bản với HAProxy​

Lớp 4 và Lớp 7​

HAProxy có thể chạy ở hai chế độ: Chế độ TCP Lớp 4 và Chế độ HTTP Lớp 7. Ở chế độ TCP Lớp 4, HAProxy chuyển tiếp các gói TCP RAW từ máy khách đến các máy chủ ứng dụng. Ở chế độ HTTP Lớp 7, HAProxy sẽ phân tích cú pháp tiêu đề HTTP trước khi chuyển tiếp chúng đến các máy chủ ứng dụng. Trong hướng dẫn này, chúng ta sẽ sử dụng Nginx làm máy chủ web chỉ hỗ trợ chế độ HTTP Lớp 7.

Thuật toán cân bằng​

Đây là thuật toán được HAProxy sử dụng để chọn máy chủ khi thực hiện cân bằng tải. Các chế độ sau đây khả dụng:

Roundrobin

Đây là thuật toán cân bằng đơn giản nhất. Đối với mỗi kết nối mới, nó sẽ được xử lý bởi máy chủ phụ trợ tiếp theo. Nếu máy chủ phụ trợ cuối cùng trong danh sách được tiếp cận, nó sẽ bắt đầu lại từ đầu danh sách phụ trợ.

Lastconn

Kết nối mới sẽ được xử lý bởi máy chủ phụ trợ có ít kết nối nhất. Điều này hữu ích khi thời gian và tải của các yêu cầu thay đổi rất nhiều.

Nguồn

Điều này dành cho các phiên cố định, IP của máy khách sẽ được băm để xác định máy chủ phụ trợ đã nhận được yêu cầu cuối cùng từ IP này. Vì vậy, IP A sẽ luôn được xử lý bởi backend1 và IP B sẽ luôn được xử lý bởi banckend2 để không làm gián đoạn các phiên

Có các thuật toán khác - hãy kiểm tra trang web HAProxy chính thức để biết chi tiết.


Điều kiện tiên quyết​

  • 3 CentOS 7
loadbalancer
192.168.1.102

nginx1
192.168.1.104

nginx2
192.168.1.105
  • Quyền root trên cả 3 máy chủ.

Bước 1 - Cấu hình các tệp /etc/hosts​

Đăng nhập vào tải máy chủ cân bằng và chỉnh sửa tệp /etc/hosts.
Mã:
ssh [emailprotected]
sudo su
Mã:
vi /etc/hosts
Thêm tên máy chủ nginx1 và nginx2:
Mã:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
Lưu tệp và thoát khỏi trình chỉnh sửa.

Tiếp theo, chỉnh sửa tệp hosts trên máy chủ Nginx (nginx1 và nginx2):
Mã:
ssh [emailprotected]
ssh [emailprotected]
Chỉnh sửa và thêm một dòng mới cho bộ cân bằng tải trong các tệp hosts:
Mã:
vi /etc/host
Thêm tên máy chủ loadbalancer trên mỗi máy chủ nginx:
Mã:
192.168.1.102 loadbalancer
thực hiện thao tác này trên máy chủ nginx1 và nginx2.




Bước 2 - Cài đặt và cấu hình HAProxy​

HAProxy có sẵn trong kho lưu trữ CentOS 7, hãy đăng nhập vào máy chủ loadbalancer và cập nhật danh sách gói:
Mã:
ssh [emailprotected]
yum -y update
Bây giờ hãy cài đặt HAProxy bằng lệnh yum này:
Mã:
yum -y install haproxy
Khi quá trình cài đặt hoàn tất, hãy chuyển đến thư mục "/etc/haproxy/" và sao lưu tệp cấu hình gốc:
Mã:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Tiếp theo, thêm tệp cấu hình HAProxy mới "haproxy.cfg" bằng trình soạn thảo vi:
Mã:
vi haproxy.cfg
Dán cấu hình bên dưới:
Mã:
#------------------------------------------------------------------
# Thiết lập toàn cục
#------------------------------------------------------------------
toàn cục
 nhật ký 127.0.0.1 local2 #Cấu hình nhật ký
 
 chroot /var/lib/haproxy
 pidfile /var/run/haproxy.pid
 maxconn 4000 
 người dùng haproxy #Haproxy đang chạy dưới người dùng và nhóm "haproxy"
 nhóm haproxy
 daemon
 
 # bật số liệu thống kê ổ cắm unix
 số liệu thống kê ổ cắm /var/lib/haproxy/stats
 
#------------------------------------------------------------------
# mặc định chung mà tất cả các phần 'listen' và 'backend' sẽ
# sử dụng nếu không được chỉ định trong khối của chúng
#------------------------------------------------------------------
mặc định
 chế độ http
 nhật ký toàn cục
 tùy chọn httplog
 tùy chọn dontlognull
 tùy chọn http-server-close
 tùy chọn forwardfor except 127.0.0.0/8
 tùy chọn redispatch
 thử lại 3
 hết thời gian chờ yêu cầu http 10 giây
 hết thời gian chờ hàng đợi 1 phút
 hết thời gian chờ kết nối 10 giây
 hết thời gian chờ máy khách 1 phút
 hết thời gian chờ máy chủ 1 phút
 hết thời gian chờ http-keep-alive 10 giây
 hết thời gian chờ kiểm tra 10 giây
 maxconn 3000
 
#------------------------------------------------------------------
#Cấu hình giám sát HAProxy
#---------------------------------------------------------------------
lắng nghe haproxy3-monitoring *:8080 #Giám sát Haproxy chạy trên cổng 8080
 chế độ http
 tùy chọn forwardfor
 tùy chọn httpclose
 bật số liệu thống kê
 số liệu thống kê hiển thị chú thích
 làm mới số liệu thống kê 5 giây
 số liệu thống kê uri /stats #URL cho HAProxy monitoring
 stats realm Haproxy\ Statistics
 stats auth howtoforge:howtoforge #Người dùng và mật khẩu để đăng nhập vào bảng điều khiển giám sát
 stats admin if TRUE
 default_backend app-main #Đây là tùy chọn để giám sát backend
 
#------------------------------------------------------------------
# Cấu hình FrontEnd
#---------------------------------------------------------------------
frontend main
 bind *:80
 tùy chọn http-server-close
 tùy chọn forwardfor
 default_backend app-main
 
#------------------------------------------------------------------
# BackEnd roundrobin như thuật toán cân bằng
#---------------------------------------------------------------------
backend app-main
 balance roundrobin #Thuật toán cân bằng
 tùy chọn httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Kiểm tra xem ứng dụng máy chủ có hoạt động và khỏe mạnh không - mã trạng thái 200
 máy chủ nginx1 192.168.1.104:80 kiểm tra #Nginx1 
 máy chủ nginx2 192.168.1.105:80 kiểm tra #Nginx2
Lưu tệp cấu hình và thoát.

Tiếp theo, cấu hình rsyslog cho HAProxy.

Chúng ta sẽ cấu hình daemon rsyslog để ghi lại số liệu thống kê của HAProxy. Chỉnh sửa tệp rsyslog.conf để cho phép cổng UDP 514 được rsyslog sử dụng.
Mã:
vi /etc/rsyslog.conf
Bỏ chú thích dòng này để kích hoạt kết nối UDP:
Mã:
$ModLoad imudp
$UDPServerRun 514
Nếu bạn muốn sử dụng một IP cụ thể, bạn có thể thêm một dòng mới như dòng bên dưới:
Mã:
$UDPServerAddress 127.0.0.1
Lưu tệp và thoát.

Sau đó tạo tệp cấu hình haproxy mới cho rsyslog:
Mã:
cd /etc/rsyslog.d/
vi haproxy.conf
Dán cấu hình bên dưới:
Mã:
local2.=info /var/log/haproxy-access.log #Đối với Nhật ký truy cập
local2.notice /var/log/haproxy-info.log #Đối với thông tin dịch vụ - Backend, loadbalancer
Lưu và thoát.

Bây giờ hãy khởi động lại rsyslog rồi khởi động haproxy:
Mã:
systemctl restart rsyslog
systemctl start haproxy
Thêm haproxy để khởi động khi khởi động:
Mã:
systemctl enable haproxy

Bước 3 - Cài đặt và cấu hình Nginx​

Trong phần này, chúng ta sẽ cài đặt Nginx từ kho lưu trữ epel trên máy chủ nginx1 và nginx2.

Đăng nhập vào máy chủ:
Mã:
ssh [emailprotected]
ssh [emailprotected]
Cài đặt kho lưu trữ epel bằng lệnh yum bên dưới:
Mã:
yum -y cài đặt epel-release
Bây giờ bạn có thể cài đặt Nginx:
Mã:
yum -y install nginx
Nginx đã được cài đặt. Vào thư mục web và thay đổi tệp chỉ mục để chúng ta có thể xem máy chủ nào trong hai máy chủ đã phân phối tệp html:
Mã:
cd /usr/share/nginx/html/
echo "[HEADING=1]nginx1.loadbalance.me[/HEADING]" > index.html #Đối với máy chủ nginx1
echo "[HEADING=1]nginx2.loadbalance.me[/HEADING]" > index.html #Đối với máy chủ nginx2
Tiếp theo, thêm Nginx để bắt đầu khi khởi động và sau đó khởi động nó:
Mã:
systemctl enable nginx
systemctl start nginx
Đảm bảo bạn đang thực hiện bước này trên máy chủ nginx1 và nginx2.


Bước 4 - Kiểm tra​

Kiểm tra từ trình duyệt bằng cách truy cập IP của bộ cân bằng tải: 192.168.1.102





Kiểm tra bằng lệnh curl:
Mã:
curl 192.168.1.102


Kiểm tra để đăng nhập vào HAProxy web monitoring đang chạy trên cổng 8080 với tên người dùng và mật khẩu "howtoforge":




HAProxy đang hoạt động thành công và hoạt động như một bộ cân bằng tải cho hai máy chủ web Nginx của chúng tôi.


Kết luận​

HAProxy hay Proxy có tính khả dụng cao là một phần mềm nguồn mở cung cấp tính khả dụng cao cho các dịch vụ dựa trên TCP, hoạt động như một bộ cân bằng tải HTTP và máy chủ proxy. Phần mềm được viết bằng C và hỗ trợ SSL, duy trì kết nối và nén. HAProxy là lựa chọn phù hợp cho tất cả những ai cần một bộ cân bằng tải và máy chủ proxy nhanh và nhẹ với dung lượng bộ nhớ nhỏ và sử dụng CPU thấp. Haproxy có thể chạy ở chế độ TCP Lớp 4 và chế độ HTTP Lớp 7. Nginx chỉ hỗ trợ chế độ HTTP Lớp 7 với HAProxy. Nếu bạn muốn sử dụng chế độ TCP Lớp 4, bạn có thể sử dụng các máy chủ web khác như Apache. Trên CentOS 7, HAProxy có sẵn trong kho lưu trữ mặc định. Dễ dàng cài đặt và cấu hình.
 
Back
Bên trên