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.
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.
192.168.1.102
nginx1
192.168.1.104
nginx2
192.168.1.105
Thêm tên máy chủ nginx1 và 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):
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:
Thêm tên máy chủ loadbalancer trên mỗi máy chủ nginx:
thực hiện thao tác này trên máy chủ nginx1 và nginx2.
Bây giờ hãy cài đặt HAProxy bằng lệnh yum này:
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:
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:
Dán cấu hình bên dưới:
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.
Bỏ chú thích dòng này để kích hoạt kết nối UDP:
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:
Lưu tệp và thoát.
Sau đó tạo tệp cấu hình haproxy mới cho rsyslog:
Dán cấu hình bên dưới:
Lưu và thoát.
Bây giờ hãy khởi động lại rsyslog rồi khởi động haproxy:
Thêm haproxy để khởi động khi khởi động:
Đăng nhập vào máy chủ:
Cài đặt kho lưu trữ epel bằng lệnh yum bên dưới:
Bây giờ bạn có thể cài đặt 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:
Tiếp theo, thêm Nginx để bắt đầu khi khởi động và sau đó khởi động nó:
Đảm bảo bạn đang thực hiện bước này trên máy chủ nginx1 và nginx2.
Kiểm tra bằng lệnh curl:
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.
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
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
Mã:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
Tiếp theo, chỉnh sửa tệp hosts trên máy chủ Nginx (nginx1 và nginx2):
Mã:
ssh [emailprotected]
ssh [emailprotected]
Mã:
vi /etc/host
Mã:
192.168.1.102 loadbalancer
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
Mã:
yum -y install haproxy
Mã:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Mã:
vi haproxy.cfg
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
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
Mã:
$ModLoad imudp
$UDPServerRun 514
Mã:
$UDPServerAddress 127.0.0.1
Sau đó tạo tệp cấu hình haproxy mới cho rsyslog:
Mã:
cd /etc/rsyslog.d/
vi haproxy.conf
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
Bây giờ hãy khởi động lại rsyslog rồi khởi động haproxy:
Mã:
systemctl restart rsyslog
systemctl start haproxy
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]
Mã:
yum -y cài đặt epel-release
Mã:
yum -y install nginx
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
Mã:
systemctl enable nginx
systemctl start nginx
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.102Kiể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.