Ví dụ load balancer với NGINX (NGINX Load Balancing)

Ví dụ load balancer với NGINX (NGINX Load Balancing)

Trong bài này mình sẽ làm ví dụ, sử dụng NGINX như 1 load balancer (cân bằng tải). Dùng server phục vụ hệ thống, còn NGINX sẽ đứng ra thực hiện phân tải, tránh tình trạng 1 server phải xử lý tất cả request hoặc nếu có 1 server trong cụm server chết thì cũng không sao.

Ví dụ load balancer với NGINX (NGINX Load Balancing)

Ví dụ load balancer với NGINX (NGINX Load Balancing)

Đầu tiên mình tạo 2 server, tạm gọi là server-a và server-b

Trong ví dụ này mình dùng http-module để tạo 1 http server đơn giản (các bạn có thể dùng tomcat, netty… hay gì cũng được)

server-a chạy trên port 8081:

var http = require('http');
//create a server object:
http.createServer(function (req, res) {
  res.write('Hello World! server-a'); //write a response to the client
  res.end(); //end the response
}).listen(8081); //the server object listens on port 8081
console.log('server started')

Start server-a

Ví dụ load balancer với NGINX (NGINX Load Balancing)

Ví dụ load balancer với NGINX (NGINX Load Balancing)

Tương tự,mình tạo 1 server-b chạy trên port 8082

Ví dụ load balancer với NGINX (NGINX Load Balancing)

* Lưu ý, mình ko có nhiều device nên mình để 2 server đều là local, các bạn có thể đặt 2 server trên 2 máy khác nhau và truy cập qua ip hay domain.

Tiếp theo mình cấu hình NGINX, cho phép truy cập 2 server a và b ở trên qua địa chỉ localhost:81

Mở file cấu hình nginx nginx.conf và thêm đoạn sau:

http {
  # ...
  
  upstream demo_load_balance {
    server localhost:8081;
    server localhost:8082;
  }

  server { # simple load balancing
    listen          81;
    server_name     localhost;

    location / {
      proxy_pass      http://demo_load_balance;
    }
  }
  
  # ...

}
  • upstream :định nghĩa 1 cụm server, ở phần này mình liệt kê server a,b ở trên. Nếu bạn chạy 2 server a,b ở nhiều máy khác nhau thì sửa thành địa chỉ ip, domain tương ứng.
  • server, location /: server thực hiện lắng nghe port 81 với các url / sẽ tự động mapping sang 2 server a hoặc b

Start NGINX và truy cập vào địa chỉ localhost:81

Kết quả, mỗi lần truy cập nó sẽ truy cập ngẫu nhiên server-a hoặc server-b.

Ví dụ load balancer với NGINX (NGINX Load Balancing)

Nếu bạn tắt server a, thì  truy cập vào địa chỉ localhost:81 nó sẽ luôn chuyển hướng tới server b. Do đó hệ thống của bạn vẫn đảm bảo uptime.

Khi hệ thống của bạn có nhiều request hơn thì bạn chỉ cần thêm 1 server mới, server-c, server-d… và cấu hình lại nginx, còn người dùng thì họ vẫn truy cập bình thường, ko cần quan tâm bạn có bao nhiêu server.

 

Okay, Done!
References: http://nginx.org/

stackjava.com