Cài đặt và triển khai Nginx load balancing server

Cài đặt và triển khai Nginx load balancing server
Read Time:7 Minute, 2 Second

Cài đặt và triển khai Nginx load balancing server

Trong bài này mình sẽ làm demo cài đặt và triển khai NGINX như một load balancing server (cân bằng tải). 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.

1. Mô hình triển khai

– Nginx server: 10.10.10.100

– Server01: 10.10.10.10

– Server02: 10.10.10.15

– Server03: 10.10.10.20

2. Tiến hành cài đặt và triển khai load balancing server

2.1 Cài đặt nginx

+ Đối với CentOs7/ Redhat7/ Oracle Linux7:
# yum -y install nginx 
+ Đối với CentOs8/ Redhat8/ Oracle Linux8: 
# yum -y install epel-release
# dnf -y install nginx 
+ Đối với Debian: 
# apt -y install nginx 
+ Đối với Ubuntu: 
# apt-get install nginx

– Cho phép nginx tạo kết nối mạng

# setsebool httpd_can_network_connect on -P

– Khởi động nginx

# service nginx start

– Cấu hình firewall và reload lại dịch vụ:

# firewall-cmd --zone=public --add-port=80/tcp --permanent 
# firewall-cmd --zone=public --add-port=443/tcp --permanent 
# firewall-cmd –reload

2.2 Quy ước cấu hình

– Mở file /etc/nginx/nginx.conf thêm dòng sau

include /etc/nginx/conf.d/upstream;

– Nôi dung tóm tắc file sẽ như sau:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
...
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/conf.d/upstream;
}

– Tạo file tương ứng /etc/nginx/conf.d/upstream File này sẽ khai báo thông tin các cụm load balancer và thuật toán load balancer.

+ Ở đây mình khai báo 2 cụm server cần được load balancer là backends_01backends_02.

+ Ở 2 cụm này được khai báo với thuật toán mặc đinh là Round Robin.

upstream backends_01 {
   server 10.10.10.10:7001;
   server 10.10.10.15:7001;
   server 10.10.10.20:7001;
}
upstream backends_02 {
   server 10.10.10.25:80;
   server 10.10.10.30:80;
}

2.2.1 Thuật toán Round Robin

– Round Robin là thuật toán mặc định của nginx khi chúng ta không có cấu hình gì thêm trong block HTTP.

– Đặc điểm của thuật toán này là các request sẽ được luân phiên liên tục giữa các server 1:1:1 , điều này sẽ làm giải tải cho các hệ thống có lượng request lớn.

+ Tại file /etc/nginx/conf.d/upstream ta sẽ khai báo cấu hình như sau:

upstream backends_01 {
   server 10.10.10.10:7001;
   server 10.10.10.15:7001;
   server 10.10.10.20:7001;
}

2.2.2 Thuật toán Weighted load balancing

– Đây là một thuật toán quan trọng trong loadbalancing, khi sử dụng thuật toán này sẽ giúp chúng ta giải quyết đươc bài toán phân chia các server xử lý.

– Với mặc định của nginx sử dụng thuật toán round-robin thì các request sẽ được chuyển luân phiên đến các server để xử lý, tuy nhiên đối với Weighted load balancing thì chúng ta sẽ phân ra được khối lượng xử lý giữa các server.

– Ví dụ chúng ta có 3 server dùng để load balancing muốn cứ 5 request đến thì:

+ 3 request sẽ dành cho server01 xử lý.

+ 1 request dành cho server02.

+ 1 request dành cho server03.

Các trường hợp tương tự thì weighted load balancing là sự lựa chọn hợp lý.

+ Tại file /etc/nginx/conf.d/upstream ta sẽ khai báo cấu hình như sau:

upstream backends_01 {
   server 10.10.10.10:7001 weight=3;
   server 10.10.10.15:7001 weight=1;
   server 10.10.10.20:7001 weight=1;
}

2.2.3 Thuật toán Least connection

– Đây là thuật toán nâng cấp của round robin và weighted load balancing, thuật toán này sẽ giúp tối ưu hóa cân bằng tải cho hệ thống.

– Đặc điểm của thuật toán này là sẽ chuyển request đến cho server đang xử lý ít hơn làm việc, thích hợp đối với các hệ thống mà có các session duy trì trong thời gian dài, tránh được trường hợp các session duy trì quá lâu mà các request được chuyển luân phiên theo quy tắc định sẵn , dễ bị down 1 server nào đó do xử lý quá khả năng của nó.

+ Tại file /etc/nginx/conf.d/upstream ta sẽ khai báo cấu hình như sau:

upstream backends_01 {
   least_conn;
   server 10.10.10.10:7001;
   server 10.10.10.15:7001;
   server 10.10.10.20:7001;
}

2.3.4 Thuật toán Health check

– Thuật toán này xác định máy chủ sẵn sàng xử lý request để gửi request đến server , điều này tránh được việc phải loại bỏ thủ công một máy chủ không sẵn sàng xử lý.

– Các hoạt động của thuật toán này là nó sẽ gửi một kết nối TCP đến máy chủ , nếu như máy chủ đó lắng nghe trên địa chỉ và port đã cấu hình thì nó mới gửi request đến cho server xử lý.

– Đối với các máy chủ cơ sở dữ liệu thì health check không thể làm điều này.

+ Tại file /etc/nginx/conf.d/upstream ta sẽ khai báo cấu hình như sau:

upstream backends_01 {
   server 10.10.10.10:7001 max_fails=3 fail_timeout=5s;
   server 10.10.10.15:7001;
   server 10.10.10.20:7001;
}

2.3 Cấu hình vhost

– Để sử dụng được file cấu hình dưới dây bạn cần tiến hành cấu hình và cài đặt thêm các yêu cầu sau đây

+ Để client truy cập sử dụng SSL bạn có thể sử dụng SSL bạn mua từ các nhà cung cấp khác hoặc sử dụng SSL miễn phi bằng cách cài đặt thêm SSL Let’s Encrypt.

+ Tạo thư mục và các file log.

2.3.1 Cài đặt và cấu hình

– Mục dích dùng để mã hóa các yêu cầu từ phía client đến server.

# sudo yum install certbot -y

– Để phát hành chứng chỉ SSL Let’s Encrypt cho domain có rất nhiều cách:

# service nginx stop
# certbot certonly --standalone -d weblogic.system.info.vn --staple-ocsp -m admin@weblogic.system.info.vn --agree-tos

+ File SSL được lưu trữ tại đường dẫn: /etc/letsencrypt/live/weblogic.system.info.vn/

[root@weblogic ~]# ls /etc/letsencrypt/live/weblogic.system.info.vn/
fullchain.pem privkey.pem

2.3.2  Tạo thư mục và các file log

# mkdir -p /var/log/nginx/weblogic.system.info.vn
# cd /var/log/nginx/weblogic.system.info.vn
# touch error.log access.log

2.3.3 File cấu hình Vhost cơ bản

+ Tạo file tương ứng /etc/nginx/conf.d/<ten file>.conf File này sẽ khai báo các cấu hình vhost của backends như IP, server name và Port client truy cập, access_log, access_log, SSL,…

+ Bạn có thể tạo nhiều file cấu hình khác nhau cho cụm server cần load balancing ở đây mình sử dụng cụm upstream backends_01 được khai báo ở trên:

# vi /etc/nginx/conf.d/weblogic.system.info.vn.conf
server {
   # Listen on port 80 and 443 on both IPv4 and IPv6
   listen 80;
   listen 443 ssl;
   #listen [::]:80 ipv6only=on;
   #listen [::]:443 ipv6only=on ssl;

   # Server name
   server_name weblogic.system.info.vn;

   #Log
   access_log /var/log/nginx/weblogic.system.info.vn/access.log;
   error_log /var/log/nginx/weblogic.system.info.vn/error.log;

   # Enable SSL
   ssl_certificate /etc/letsencrypt/live/weblogic.system.info.vn/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/weblogic.system.info.vn/privkey.pem;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
   ssl_prefer_server_ciphers on;

   # Proxy
   proxy_redirect off;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $http_host;

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

– Kiểm tra file cấu hình

# nginx -t
[root@weblogic ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

– Restart nginx để áp dụng cấu hình Vhost

# service nginx restart

Kiến Thức System chúc các bạn thành công!

✏️ Tác giả bài viết

Admin KTSYSTEM

Xin Chào mình là quản trị Viên Website system.info.vn Mình rất thích tìm hiểu về công nghệ mới, học hỏi và tìm tòi nghiên cứu về quản trị và bảo mật về hệ thống.
administrator
Happy
Happy
100 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *