Load Balancing Apache2, Nginx

image-7-1024x634 Load Balancing Apache2, Nginx

Giới thiệu

Trong các hệ thống có lưu lượng truy cập cao, Load Balancing (cân bằng tải) là yếu tố cần thiết để đảm bảo hiệu suất và tính ổn định. nginx, với khả năng thiết lập Load Balancing mạnh mẽ, giúp phân phối lưu lượng truy cập giữa các server backend một cách đồng đều, giảm tải cho hệ thống và tăng cường trải nghiệm người dùng. Bài viết này sẽ hướng dẫn bạn chi tiết cách cấu hình Load Balancing với Apache2, giúp hệ thống của bạn hoạt động hiệu quả hơn.

Yêu cầu ở bài này

  • 2 Node xử lý
  • 1 Node Source Code
  • 1 Node Redis Cache
  • 1 Node MySql

1. Thiết lập sử dụng chung Share Source Code

Thiết lập sử dụng chung Share Source Code cho Load Balancing là một phương pháp tối ưu hóa việc quản lý mã nguồn trong hệ thống cân bằng tải. Trong kiến trúc Load Balancing, các máy chủ backend (backend servers) xử lý lưu lượng truy cập được phân phối đều từ Load Balancer. Để đảm bảo tính đồng nhất trong việc xử lý, các máy chủ này cần sử dụng chung một bộ mã nguồn (source code).

Mục đích của việc chia sẻ Source Code trong Load Balancing:

  1. Đảm bảo Tính Đồng Nhất:
    Tất cả các máy chủ backend sử dụng cùng một phiên bản mã nguồn, tránh tình trạng khác biệt giữa các máy chủ.
  2. Dễ Dàng Cập Nhật:
    Khi cần cập nhật hoặc triển khai phiên bản mới, bạn chỉ cần thực hiện trên một thư mục được chia sẻ thay vì cập nhật từng máy chủ riêng lẻ.
  3. Tăng Tính Hiệu Quả:
    Việc chia sẻ mã nguồn giúp giảm thiểu chi phí quản trị, nhất là với số lượng lớn máy chủ backend.

Cài đặt NFS Server ở nơi quản lý Source Code (Node Source Code)

sudo apt update
sudo apt install nfs-kernel-server

Tạo thư mục chia sẻ

sudo mkdir /var/nfs/general
sudo chown nobody:nogroup /var/nfs/general

Cấu hình NFS Export

sudo nano /etc/exports
/var/nfs/general 192.168.1.10(rw,sync,no_subtree_check) 192.168.1.11(rw,sync,no_subtree_check) 192.168.1.12(rw,sync,no_subtree_check)
  • Replace 192.168.1.10, 192.168.1.11, and 192.168.1.12 with the IP addresses of your load-balanced servers.
  • rw: Read/write permission.
  • sync: Ensures changes are written to disk before responses are sent.
  • no_subtree_check: Improves reliability.

Apply cấu hình

sudo exportfs -a
sudo systemctl restart nfs-kernel-server

Cấu hình FIrewall (Tuỳ chọn)

sudo ufw allow from 192.168.1.0/24 to any port nfs

Cấu hình NFS Clients (các node xử lý source code)

Cài đặt NFS Client

sudo apt update
sudo apt install nfs-common

Mount vào thư mục được chia sẻ ở trên

sudo mkdir /mnt/nfs/general
sudo mount 192.168.1.100:/var/nfs/general /mnt/nfs/general
  • Replace 192.168.1.100 with the IP address of your control server

Đảm bảo thư mục được Mount vĩnh viễn

sudo nano /etc/fstab

192.168.1.11:/var/nfs/general /mnt/nfs/general nfs rw,sync,hard,intr 0 0
192.168.1.12:/var/nfs/general /mnt/nfs/general nfs rw,sync,hard,intr 0 0

mount -a

Cấu hình nâng cao (optional)

192.168.1.11:/var/nfs/general /mnt/nfs/general nfs defaults,retry=5,timeo=14,hard,intr 0 0
  • retry=5: Tùy chọn này cố gắng kết nối lại với máy chủ NFS trong một số phút nhất định nếu kết nối bị mất.
  • timeo=14: Điều chỉnh khoảng thời gian chờ cho các yêu cầu NFS. Giá trị thấp hơn có nghĩa là phát hiện lỗi nhanh hơn.
  • hard: Điều này đảm bảo rằng máy khách sẽ tiếp tục cố gắng kết nối lại vô thời hạn cho đến khi máy chủ trực tuyến trở lại. Đối với các ứng dụng yêu cầu độ tin cậy, tùy chọn này được ưu tiên vì nó chờ máy chủ hoạt động trở lại
  • intr: Cho phép ngắt kết nối NFS, giúp ngăn máy khách không phản hồi trong thời gian máy chủ ngừng hoạt động.
  • Hard Mount (Khuyến nghị): Với tùy chọn cứng, nếu máy chủ NFS ngừng hoạt động, máy khách sẽ bị treo và tiếp tục cố gắng kết nối lại cho đến khi máy chủ trực tuyến trở lại. Điều này tốt hơn để đảm bảo tính toàn vẹn của dữ liệu vì nó tránh mất dữ liệu âm thầm nhưng có thể khiến các quy trình phải đợi cho đến khi máy chủ khả dụng trở lại.
  • Soft Mount: Với tùy chọn mềm, NFS sẽ cố gắng kết nối lại một vài lần và sau đó trả về lỗi nếu không thể kết nối với máy chủ. Điều này có thể gây mất dữ liệu nhưng có thể tốt hơn cho các ứng dụng ít quan trọng hơn.

Automatic Remount với systemd (optional)

Tạo mới 1 systemd

sudo nano /etc/systemd/system/remount-nfs.service
[Unit]
Description=Remount NFS on connection failure
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/mount -a

[Install]
WantedBy=multi-user.target

Enable Service:

sudo systemctl enable remount-nfs.service

NGINX Reverse Proxy

Truy cập Virtual Host Nginx:

cd /etc/nginx/sites-available
nano virtualhost.conf
server {
        listen 80;
        listen [::]:80;
        server_name virtualhost;

        return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name virtualhost;

    ssl_certificate /etc/letsencrypt/live/virtualhost/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/virtualhost/privkey.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    #block Googlebot
    if ($http_user_agent ~ "Googlebot") {
        return 410;
    }

    location / {

        auth_basic           "Private’s Area";
        auth_basic_user_file /etc/nginx/.htpasswd;

        #access_log off;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        proxy_set_header Accept-Encoding "";

        proxy_buffers 4 256k;
        proxy_buffer_size 128k;
        proxy_busy_buffers_size   256k;

        #1 hour timeout
        proxy_read_timeout 3600;
        #proxy_connect_timeout 600;
        #proxy_send_timeout 600;
        #send_timeout 600;
        proxy_pass http://virtualhost;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-SSL on;
        proxy_set_header X-Forwarded-Proto $scheme;
        # Add HSTS header with preload.
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    }
}

upstream virtualhost {
    ip_hash;

    # Primary servers
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.12 max_fails=3 fail_timeout=30s;

    # Backup server
    server backup.example.com:80 backup;
}

Về cụ thể các thể loại Load Balancing, mình sẽ viết 1 bài riêng nhé

Load Balancing Nginx mang lại sự linh hoạt và hiệu quả trong việc quản lý lưu lượng truy cập lớn, đảm bảo hệ thống hoạt động ổn định và tối ưu. Với các tính năng mạnh mẽ như upstream, health checks, và khả năng hỗ trợ nhiều phương pháp cân bằng tải, Nginx là công cụ lý tưởng cho mọi ứng dụng web. Hãy áp dụng ngay hôm nay để cải thiện hiệu suất và khả năng mở rộng của hệ thống bạn!

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