Thứ hai, 27/08/2012 | 00:00 GMT+7

Cách thiết lập cân bằng tải Nginx


Giới thiệu về Cân bằng tải

Cân bằng tải là một cơ chế hữu ích để phân phối lưu lượng đến xung quanh một số server Riêng ảo có khả năng. Bằng cách phân bổ cơ chế xử lý cho một số máy, ứng dụng sẽ cung cấp khả năng dự phòng - đảm bảo khả năng chịu lỗi và độ ổn định cao hơn. Thuật toán Round Robin để cân bằng tải sẽ đưa khách truy cập đến một trong một tập hợp các IP. Ở cấp độ cơ bản nhất Round Robin, khá dễ thực hiện, phân phối tải server mà không cần triển khai xem xét các yếu tố sắc thái hơn như thời gian phản hồi của server và khu vực địa lý của khách truy cập.

Cài đặt

Các bước trong hướng dẫn này yêu cầu user có quyền root trên VPS của bạn. Bạn có thể xem cách cài đặt điều đó trong Hướng dẫn user .

Trước khi cài đặt cân bằng tải nginx, bạn nên cài đặt nginx trên VPS của bạn . Bạn có thể cài đặt nó một cách nhanh chóng với apt-get:

sudo apt-get install nginx

Mô-đun thượng nguồn

Để cài đặt bộ cân bằng tải vòng tròn, ta cần sử dụng module ngược dòng nginx. Ta sẽ kết hợp cấu hình vào cài đặt nginx.

Hãy tiếp tục và mở cấu hình trang web (trong các ví dụ của tôi, tôi sẽ chỉ xử lý server ảo mặc định chung):

sudo nano /etc/nginx/sites-available/default

Ta cần thêm cấu hình cân bằng tải vào file .

Đầu tiên, ta cần bao gồm module ngược dòng trông giống như sau:

upstream backend  {
  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

Sau đó, ta nên tham khảo thêm module trong cấu hình:

 server {
  location / {
    proxy_pass  http://backend;
  }
}

Khởi động lại nginx:

sudo service nginx restart

Miễn là bạn có tất cả các server riêng ảo tại chỗ, bây giờ bạn sẽ thấy rằng bộ cân bằng tải sẽ bắt đầu phân phối khách truy cập đến các server được liên kết một cách bình đẳng.

Chỉ thị

Phần trước đã trình bày cách phân bổ tải đồng đều trên một số server ảo. Tuy nhiên, có nhiều lý do tại sao đây có thể không phải là cách hiệu quả nhất để làm việc với dữ liệu. Có một số chỉ thị mà ta có thể sử dụng để hướng khách truy cập trang web hiệu quả hơn.

Cân nặng

Một cách để bắt đầu phân bổ user cho các server chính xác hơn là phân bổ trọng lượng cụ thể cho một số máy nhất định. Nginx cho phép ta chỉ định một số chỉ định tỷ lệ lưu lượng truy cập sẽ được chuyển hướng đến mỗi server .

Cài đặt cân bằng tải bao gồm trọng lượng server 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 trọng số là 2, backend2.example sẽ được gửi nhiều gấp đôi lưu lượng truy cập so với backend1 và backend3, với trọng số là 4, sẽ xử lý lượng truy cập gấp đôi so với backend2 và gấp bốn lần so với backend 1.

Băm

Hàm băm IP cho phép các server phản hồi với khách hàng theo địa chỉ IP của họ, đưa khách truy cập trở lại cùng một VPS mỗi lần họ truy cập (trừ khi server đó bị lỗi). Nếu một server được biết là không hoạt động, nó sẽ được đánh dấu là ngừng hoạt động. Tất cả các IP được cho là được chuyển đến server sau đó sẽ được chuyển hướng đến một IP 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;
 }

Thất bại tối đa

Theo cài đặt vòng lặp mặc định, nginx sẽ tiếp tục gửi dữ liệu đến các server riêng ảo, ngay cả khi các server không phản hồi. Lỗi tối đa có thể tự động ngăn chặn điều này bằng cách hiển thị các server không phản hồi, không hoạt động trong một khoảng thời gian nhất định.

Có hai yếu tố liên quan đến lỗi max: max_fails và fall_timeout. Max failed đề cập đến số lần cố gắng kết nối với server không thành công tối đa xảy ra trước khi nó được coi là không hoạt động. Fall_timeout chỉ định độ dài của server được coi là không hoạt động. Sau khi hết thời gian, các nỗ lực mới để truy cập server sẽ khởi động lại. Giá trị thời gian chờ mặc định là 10 giây.

Cấu hình mẫu có thể trông như thế này:

upstream backend  {
  server backend1.example.com max_fails=3  fail_timeout=15s;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;

Xem thêm

Đây là một tổng quan ngắn gọn về cân bằng tải Round Robin đơn giản. Ngoài ra, có những cách khác để tăng tốc và tối ưu hóa server :

Bởi Etel Sverdlov

Tags:

Các tin liên quan

Cách cấu hình Nginx làm Reverse Proxy cho Apache
2012-07-20
Cách cài đặt WordPress với nginx trên CentOS 6
2012-07-02
Cách cài đặt WordPress với nginx trên CentOS 6
2012-07-02
Cách tạo chứng chỉ SSL trên nginx cho CentOS 6
2012-06-08
Cách thiết lập server ảo nginx (server block) trên CentOS 6
2012-06-07
Cách cài đặt Rails và nginx với Passenger trên Ubuntu
2012-06-01
Cách cài đặt nginx trên CentOS 6 với yum
2012-05-22