Các loại Load Balancing với Nginx

image-8-1024x576 Các loại Load Balancing với Nginx

Giới thiệu

Trong các hệ thống hiện đại, Load Balancing (cân bằng tải) là một trong những phương pháp quan trọng để đảm bảo hiệu suất cao và độ tin cậy. Với Nginx, bạn không chỉ thiết lập Load Balancing một cách dễ dàng mà còn có thể tận dụng sức mạnh của nó trong vai trò Reverse Proxy. Bài viết này sẽ hướng dẫn bạn cách cấu hình Load Balancing với Nginx, giúp hệ thống của bạn xử lý lưu lượng truy cập hiệu quả hơn và giảm tải cho các server backend.

Nginx hỗ trợ nhiều kỹ thuật load balancing (cân bằng tải), phổ biến trong việc phân phối lưu lượng truy cập giữa các máy chủ backend để tăng cường hiệu suất và đảm bảo tính ổn định của hệ thống. Dưới đây là các thể loại load balancing mà Nginx cung cấp:

1. Round Robin

Nguyên lý: Các yêu cầu được phân phối tuần tự đến từng máy chủ trong danh sách, không xét đến tải hoặc trạng thái của máy chủ.

Ưu điểm:

  • Đơn giản, dễ cấu hình.
  • Phù hợp với các máy chủ có cấu hình và tài nguyên tương đồng.
upstream backend {
    server server1.example.com;
    server server2.example.com;
}

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

2. Least Connections

Nguyên lý: Chuyển yêu cầu đến máy chủ có ít kết nối đang hoạt động nhất.

Ưu điểm:

  • Hiệu quả với các ứng dụng có thời gian xử lý yêu cầu không đồng nhất.
upstream backend {
    least_conn;
    server server1.example.com;
    server server2.example.com;
}

3. IP Hash

Nguyên lý: Yêu cầu từ một IP cụ thể luôn được chuyển đến cùng một máy chủ, dựa trên hàm băm của địa chỉ IP.

Ưu điểm:

  • Đảm bảo phiên làm việc (session) của người dùng được duy trì trên một máy chủ (sticky sessions).
upstream backend {
    ip_hash;
    server server1.example.com;
    server server2.example.com;
}

4. Generic Hash

Nguyên lý: Dựa trên giá trị được chỉ định (ví dụ: URL, cookie, v.v.), Nginx phân phối yêu cầu đến một máy chủ cụ thể.Ưu điểm:

  • Tùy chỉnh cao, phù hợp với các ứng dụng cần duy trì dữ liệu trên một backend cố định.
upstream backend {
    hash $request_uri consistent;
    server server1.example.com;
    server server2.example.com;
}

5. Weight-Based Load Balancing

Nguyên lý: Gán trọng số (weight) cho các máy chủ, máy chủ có trọng số cao hơn sẽ nhận nhiều yêu cầu hơn.

Ưu điểm:

  • Hữu ích khi các máy chủ có cấu hình không đồng đều.
upstream backend {
    server server1.example.com weight=3;
    server server2.example.com weight=1;
}

6. Dynamic Load Balancing (Sticky Sessions)

Nguyên lý: Duy trì yêu cầu của người dùng trên một máy chủ trong suốt thời gian làm việc bằng cách sử dụng cookie hoặc token.

Cách cấu hình (sử dụng Nginx Plus hoặc module third-party)

upstream backend {
    server server1.example.com;
    server server2.example.com;
    sticky cookie srv_id expires=1h path=/;
}

7. Active Health Check

Nguyên lý: Liên tục kiểm tra tình trạng của các máy chủ backend. Yêu cầu chỉ được gửi đến các máy chủ đang hoạt động.

Ưu điểm:

  • Giảm thiểu thời gian chết của hệ thống khi một hoặc nhiều máy chủ gặp sự cố.
upstream backend {
    server server1.example.com;
    server server2.example.com;
    health_check;
}

8. Failover

Nguyên lý: Khi một máy chủ không khả dụng, yêu cầu sẽ được chuyển đến một máy chủ khác trong danh sách.Ưu điểm:

  • Tăng tính sẵn sàng của hệ thống.

Cách cấu hình: Failover tự động được áp dụng với các loại cân bằng tải khác khi có health check.

9. Stream Load Balancing (TCP/UDP)

Nguyên lý: Cân bằng tải cho giao thức TCP và UDP, thường sử dụng cho các dịch vụ như MySQL, Redis, hoặc WebSocket.

stream {
    upstream backend {
        server server1.example.com:3306;
        server server2.example.com:3306;
    }

    server {
        listen 3306;
        proxy_pass backend;
    }
}

Tùy vào đặc điểm ứng dụng và yêu cầu hệ thống, bạn có thể chọn hoặc kết hợp các phương pháp trên để tối ưu hóa việc cân bằng tải.

I am gaining experience and developing my skills in the field of information technology. My focus areas include basic network administration, troubleshooting, and supporting IT infrastructure. I am keen on learning and growing in various aspects of IT, from system setup and maintenance to exploring new technologies and methodologies.

Post Comment