Trước khi bắt đầu
Cân bằng tải là một cơ chế hữu ích để phân phối lưu lượng truy cập đến nhiều máy chủ ứng dụng. Bằng cách phân chia cơ chế xử lý cho nhiều máy chủ phản hồi, cân bằng tải đảm bảo tính dự phòng, khả năng chịu lỗi và độ ổn định cao hơn cho ứng dụng. Thuật toán Round Robin trong cân bằng tải bằng cách chuyển lượt truy cập đến một trong các địa chỉ IP trong block. Ở mức cơ bản nhất, Round Robin khá dễ triển khai, nó phân phối tải máy chủ mà không xem xét các yếu khác như thời gian phản hồi của máy chủ và vị trí địa lý của khách truy cập.
Cài đặt
Trước khi thiết lập cân bằng tải nginx, bạn cần cài đặt Nginx của bạn. Bạn có thể cài đặt nhanh chóng bằng apt-get:
sudo apt-get install nginx
sudo systemctl enable nginx
Mô-đun Upstream
Để thiết lập một cân bằng tải round robin, chúng ta sẽ cần sử dụng mô-đun upstream của nginx. Chúng ta sẽ tích hợp cấu hình vào các thiết lập của nginx.
Hãy mở tệp cấu hình của trang web của bạn (trong các ví dụ của tôi, tôi chỉ sử dụng file virtual host mặc định trong nginx):
sudo vi /etc/nginx/sites-available/default
Chúng ta cần thêm cấu hình cân bằng tải vào tệp.
Đầu tiên, chúng ta cần có một mô-đun upstream, có dạng như sau:
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; }
Sau đó, chúng ta nên tham chiếu đến mô-đun trong phần cấu hình tiếp theo:
server { location / { proxy_pass http://backend; } }
Khởi động lại nginx
sudo service nginx restart
Các thuật toán cân bằng tải
Weight
Weight phân bổ người dùng cho các máy chủ một cách chính xác hơn bằng cách đặt trọng số cho từng máy chủ. Nginx cho phép chúng ta gán một số để chỉ định tỷ lệ lưu lượng được điều hướng đến mỗi máy chủ.
Một cấu hình cân bằng tải bao gồm trọng số của máy chủ có thể trông như sau:
upstream backend { server backend1.example.com weight=1; server backend2.example.com weight=2; server backend3.example.com weight=4; }
Trọng số mặc định là 1. Với một trọng số là 2, backend2.example.com sẽ nhận gấp đôi lưu lượng so với backend1.example.com, và backend3.example.com với trọng số là 4, sẽ xử lý gấp đôi lưu lượng so với backend2.example.com và gấp bốn lần so với backend1.example.com.
Hash
IP hash cho phép các máy chủ phản hồi cho các client dựa trên địa chỉ IP của họ, gửi trở lại client cùng một server mỗi khi họ truy cập (trừ khi máy chủ đó bị tắt). Nếu một máy chủ được biết là không hoạt động, nó được đánh dấu là down. Tất cả các địa chỉ IP mà ban đầu được định tuyến đến máy chủ down sẽ được điều hướng đến một máy chủ thay thế. Cấu hình dưới đây cung cấp một ví dụ:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; }
Max Fails
Theo cài đặt mặc định của round robin, nginx sẽ tiếp tục gửi dữ liệu đến các máy chủ, ngay cả khi các máy chủ không phản hồi. Max fails có thể tự động ngăn chặn điều này bằng cách vô hiệu hóa các máy chủ không phản hồi trong một khoảng thời gian nhất định.
Có hai yếu tố liên quan đến max fails: max_fails và fall_timeout. Max fails chỉ số lượng tối đa các cố gắng kết nối không thành công đến một máy chủ trước khi nó được coi là không hoạt động. Fall_timeout chỉ định thời gian mà máy chủ được coi là không hoạt động. Sau khi hết thời gian, các cố gắng mới để kết nối đến máy chủ sẽ bắt đầu lại. Giá trị mặc định của thời gian chờ là 10 giây.
Một cấu hình mẫu có thể trông như sau:
upstream backend { server backend1.example.com max_fails=3 fail_timeout=15s; server backend2.example.com weight=2; server backend3.example.com weight=4;
Đây chỉ là một vài ví dụ đơn giản. Bạn có thể tham khảo các thuật toán cân bằng tải của Nginx trên trang chủ của họ. Bạn có thể phải mất phí vì một số thuật toán yêu cầu cài bản trả phí Nginx Plus HTTP Load Balancing | NGINX Documentation