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)
Đầ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
Tương tự,mình tạo 1 server-b chạy trên port 8082
* 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.
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/