Thiết lập Nginx Load Balancing
Bài đăng này đã không được cập nhật trong 7 năm
Load Balancing ?
Load Balancing hay cân bằng tải có thể gọi là một kỹ thuật thường được sử dụng để tối ưu hóa việc sử dụng tài nguyên, tối ưu băng thông, giảm tải hoặc đảm bảo khả năng chịu lỗi, và tăng tính ổn định cho server.
Vì sao Load balancing lại làm được điều này. Đơn giản thôi, thông thường khi có 1 request từ client tới sẽ chỉ có 1 server chịu trách nhiệm xử lý, nhưng với load balancing, chúng ta có thể phân phối lưu lượng một cách hợp lý để gửi request tới các server khác nhau.
Các cơ chế load balancing
Với Nginx, chúng ta có thể sử dụng 3 cơ chế load balancing:
- round-robin: đây là phương pháp đơn giản nhất, hiểu nôm na là các request được gửi tới sẽ được phân phối theo vòng tròn, gửi request đến từng server theo một vòng.
- least-connected: phương pháp này sẽ phân phối các request tiếp theo tới server có lượng kết nối thấp nhất.
- ip-hash: phương pháp này sử dụng một hàm băm để xác định máy chủ nào sẽ xử lý yêu cầu nào dựa vào IP của client.
Trong bài viết này tôi sẽ hướng dẫn cách thiết lập Nginx với cơ chế round-robin
Cài đặt
Để cài đặt Nginx các bạn cần có quyền root trên VPS
sudo apt-get install nginx
Thiết lập nginx upstream
Để thiết lập round-robin
, chúng ta sẽ sử dụng module nginx upstream
Đầu tiên, ta tạo file config mặc định
sudo nano /etc /nginx/sites-available /default
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
Khởi động lại Nginx
sudo service nginx restart
Một số cách điều hướng khác trong nginx upstream
Sử dụng round-robin
tức là chúng ta đang mặc định phân phối tải một cách bình đẳng tới các máy chủ, tuy nhiên điều này có thể không phải cách hiệu quả nhất. Chúng ta có thể sử dụng thêm một số điều hướng nhất định để giúp việc truy cập trang web hiệu quả hơn.
- Thêm trọng số Weight Nginx cho phép chúng ta gán trọng số tùy theo tỉ lệ lưu lượng được dẫn tới mỗi máy chủ, giống như sau
upstream backend {
server backend1.example.com weight = 1;
server backend2.example.com weight = 2;
server backend3.example.com weight = 4;
}
Weight mặc định là 1, với weight là 2 thì backend2.example.com
sẽ được gửi lưu lượng gấp đôi so với backend1, tương tự vậy, backend3 sẽ phải xử lý request nhiều gấp đôi backend2.
- IP Hash
IP Hash cho phép các máy chủ đáp ứng cho client theo địa chị IP của client, tức là nếu client 1 gửi request tới và được server A xử lý thì lần sau request sẽ vẫn là server A xử lý trừ khi server A bị down. Để đánh dấu một server down, chỉ cần thêm config
down
là xong, khi đó tất cả IP đã gửi tới server A trước đó sẽ được chuyển hướng tới một server khác.
Config:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}
- Max Fails
Theo các thiết lập mặc định
round-robin
, Nginx sẽ tiếp tục gửi dữ liệu với các VPS, ngay cả khi VPS không đáp ứng được.Max Fails
có thể tự động ngăn chặn điều này bằng cách làm choVPS không đáp ứng
không hoạt động trong một khoảng thời gian.
Có 2 setting cho việc này: max_fails
và fall_timeout
-max_fails
: là số lượng tối đa kết nối tới một VPS trước khi nó được coi là không hoạt động.
-fall_timeout
: xác định độ dài của VPS mà được coi là không hoạt động, khi hết thời gian thì request tới VPS sẽ được tiếp tục. Thời gian chờ mặc định là 10 giây.
Config:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=15s;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
}
Tham khảo
https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-load-balancing http://nginx.org/en/docs/http/load_balancing.html
All rights reserved