Các loại Load Balancing với Nginx

Giới thiệu
Trong các hệ thống hiện đại, Load Balancing (cân bằng tải) là một trong những phương pháp quan trọng để đảm bảo hiệu suất cao và độ tin cậy. Với Nginx, bạn không chỉ thiết lập Load Balancing một cách dễ dàng mà còn có thể tận dụng sức mạnh của nó trong vai trò Reverse Proxy. Bài viết này sẽ hướng dẫn bạn cách cấu hình Load Balancing với Nginx, giúp hệ thống của bạn xử lý lưu lượng truy cập hiệu quả hơn và giảm tải cho các server backend.
Nginx hỗ trợ nhiều kỹ thuật load balancing (cân bằng tải), phổ biến trong việc phân phối lưu lượng truy cập giữa các máy chủ backend để tăng cường hiệu suất và đảm bảo tính ổn định của hệ thống. Dưới đây là các thể loại load balancing mà Nginx cung cấp:
1. Round Robin
Nguyên lý: Các yêu cầu được phân phối tuần tự đến từng máy chủ trong danh sách, không xét đến tải hoặc trạng thái của máy chủ.
Ưu điểm:
- Đơn giản, dễ cấu hình.
- Phù hợp với các máy chủ có cấu hình và tài nguyên tương đồng.
upstream backend {
server server1.example.com;
server server2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
2. Least Connections
Nguyên lý: Chuyển yêu cầu đến máy chủ có ít kết nối đang hoạt động nhất.
Ưu điểm:
- Hiệu quả với các ứng dụng có thời gian xử lý yêu cầu không đồng nhất.
upstream backend {
least_conn;
server server1.example.com;
server server2.example.com;
}
3. IP Hash
Nguyên lý: Yêu cầu từ một IP cụ thể luôn được chuyển đến cùng một máy chủ, dựa trên hàm băm của địa chỉ IP.
Ưu điểm:
- Đảm bảo phiên làm việc (session) của người dùng được duy trì trên một máy chủ (sticky sessions).
upstream backend {
ip_hash;
server server1.example.com;
server server2.example.com;
}
4. Generic Hash
Nguyên lý: Dựa trên giá trị được chỉ định (ví dụ: URL, cookie, v.v.), Nginx phân phối yêu cầu đến một máy chủ cụ thể.Ưu điểm:
- Tùy chỉnh cao, phù hợp với các ứng dụng cần duy trì dữ liệu trên một backend cố định.
upstream backend {
hash $request_uri consistent;
server server1.example.com;
server server2.example.com;
}
5. Weight-Based Load Balancing
Nguyên lý: Gán trọng số (weight) cho các máy chủ, máy chủ có trọng số cao hơn sẽ nhận nhiều yêu cầu hơn.
Ưu điểm:
- Hữu ích khi các máy chủ có cấu hình không đồng đều.
upstream backend {
server server1.example.com weight=3;
server server2.example.com weight=1;
}
6. Dynamic Load Balancing (Sticky Sessions)
Nguyên lý: Duy trì yêu cầu của người dùng trên một máy chủ trong suốt thời gian làm việc bằng cách sử dụng cookie hoặc token.
Cách cấu hình (sử dụng Nginx Plus hoặc module third-party)
upstream backend {
server server1.example.com;
server server2.example.com;
sticky cookie srv_id expires=1h path=/;
}
7. Active Health Check
Nguyên lý: Liên tục kiểm tra tình trạng của các máy chủ backend. Yêu cầu chỉ được gửi đến các máy chủ đang hoạt động.
Ưu điểm:
- Giảm thiểu thời gian chết của hệ thống khi một hoặc nhiều máy chủ gặp sự cố.
upstream backend {
server server1.example.com;
server server2.example.com;
health_check;
}
8. Failover
Nguyên lý: Khi một máy chủ không khả dụng, yêu cầu sẽ được chuyển đến một máy chủ khác trong danh sách.Ưu điểm:
- Tăng tính sẵn sàng của hệ thống.
Cách cấu hình: Failover tự động được áp dụng với các loại cân bằng tải khác khi có health check.
9. Stream Load Balancing (TCP/UDP)
Nguyên lý: Cân bằng tải cho giao thức TCP và UDP, thường sử dụng cho các dịch vụ như MySQL, Redis, hoặc WebSocket.
stream {
upstream backend {
server server1.example.com:3306;
server server2.example.com:3306;
}
server {
listen 3306;
proxy_pass backend;
}
}
Tùy vào đặc điểm ứng dụng và yêu cầu hệ thống, bạn có thể chọn hoặc kết hợp các phương pháp trên để tối ưu hóa việc cân bằng tải.
Post Comment