Nginx – Load Balancers

Load balancer cũng giống như Reverse proxy, Nhưng back-end gồm nhiều server, kết nối từ frond-end qua load Balancer sẽ phân phối cho các server.

Tạo server back-end

Để thực hành bài này, chúng ta tạo 3 server với port là 3000, 3001 và 3002. (Tương tự như bài trước)

Xoá các config ví dụ trước. Vào tạo file config với nội dung sau.

rm /etc/nginx/conf.d/*
sudo nano /etc/nginx/conf.d/loadbalancer.conf

Với nội dung như sau 


server {
        listen 3000;
        root /var/www/sv3000;
}
server {
        listen 3001;
        root /var/www/sv3001;
}
server {
        listen 3002;
        root /var/www/sv3002;
}

Save và reload lại.

Tạo các file index tương ứng

mkdir /var/www/sv3000
mkdir /var/www/sv3001
mkdir /var/www/sv3002
echo '<h1 style="text-align:center">3000</h1>' > /var/www/sv3000/index.html
echo '<h1 style="text-align:center">3001</h1>' > /var/www/sv3001/index.html
echo '<h1 style="text-align:center">3002</h1>' > /var/www/sv3002/index.html

Kết quả 

Load Balancer

Nginx có 3 kiểu load balancer sau:

Round robin : Request từ client được gửi đến các upstream server không có ưu tiên nào.

least connections : Nginx sẽ xem xét các kết nối đến upstream server đang xử lý. Và ưu tiên kết nối mới vào upstream server ít kết nối nhất.

IP hashing : Phương pháp này nhằm duy trì session, cùng 1 IP client sẽ được chuyển đến cùng 1 upstream server.

Mở file config /etc/nginx/conf.d/loadbalancer.conf và sử thành.

upstream roundrobin {
    # default is round robin
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

upstream leastconn {
    # The server with the fewest connections will get traffic
    least_conn;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

upstream iphash {
    # Connections will stick to the same server
    ip_hash;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3001;
}

upstream weighted {
    # More connections will be sent to the weighted server
    server 127.0.0.1:3000 weight=2;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    listen 80;

    location /roundrobin {
        proxy_pass http://roundrobin/;
    }

    location /leastconn {
        proxy_pass http://leastconn/;
    }

    location /iphash {
        proxy_pass http://iphash/;
    }

    location /weighted {
        proxy_pass http://weighted/;
    }
}

server {
        listen 3000;
        root /var/www/sv3000;
}
server {
        listen 3001;
        root /var/www/sv3001;
}
server {
        listen 3002;
        root /var/www/sv3002;
}

Với weighted, chúng ta thấy nó không có chỉ thị (least_conn, ip_hash). Tức là nó là roundrobin kèm theo weight=2. Điều này có nghĩa là giả sửa có 4 kết nối thì sẽ đc phân 2 kết nối cho 3000, 1 kết nối cho 3001 và 1 kết nối cho 3002

Save và reload lại Nginx

vào các url roundrobin, leastconn, iphash, weighted chúng ta sẽ thấy các upstream server khác nhau.