88API88API
User GuideAI ApplicationsAPI ReferenceHelp & Support

Hướng dẫn triển khai cụm

Tài liệu này cung cấp các bước cấu hình chi tiết và các phương pháp hay nhất để triển khai cụm 88API, giúp bạn xây dựng hệ thống phân tán cân bằng tải, có tính sẵn sàng cao.

Điều kiện tiên quyết

  • Nhiều máy chủ (ít nhất hai, kiến ​​trúc master-slave)
  • Đã cài đặt Docker và Docker Compose
  • Cơ sở dữ liệu MySQL dùng chung (nút chính và nút phụ cần truy cập vào cùng một cơ sở dữ liệu)
  • Dịch vụ Redis được chia sẻ (để đồng bộ hóa dữ liệu và lưu vào bộ nhớ đệm giữa các nút)
  • Tùy chọn: Cân bằng tải (như Nginx, HAProxy hoặc dịch vụ cân bằng tải của nhà cung cấp đám mây)

Tổng quan về kiến ​​trúc cụm

Cụm 88API áp dụng thiết kế kiến ​​trúc chủ-nô lệ:

  1. Master Node: Chịu trách nhiệm xử lý tất cả các thao tác ghi và một số thao tác đọc
  2. Nút nô lệ: Chịu trách nhiệm chính trong việc xử lý các hoạt động đọc, cải thiện thông lượng tổng thể của hệ thống

Kiến trúc cụm

Cấu hình chính để triển khai cụm

Chìa khóa để triển khai cụm là tất cả các nút phải:

  1. Chia sẻ cùng một cơ sở dữ liệu: Tất cả các nút đều truy cập vào cùng một cơ sở dữ liệu MySQL
  2. Chia sẻ cùng một Redis: Dành cho bộ nhớ đệm và liên lạc giữa các nút
  3. Sử dụng các bí mật giống nhau: SESSION_SECRETCRYPTO_SECRET phải giống nhau trên tất cả các nút
  4. Cấu hình chính xác các loại nút: Nút chính là master, nút phụ là slave

Các bước triển khai

Bước 1: Chuẩn bị cơ sở dữ liệu dùng chung và Redis

Trước tiên, bạn cần chuẩn bị cơ sở dữ liệu MySQL dùng chung và các dịch vụ Redis. Đây có thể là:

  • Các dịch vụ MySQL và Redis có tính sẵn sàng cao được triển khai riêng biệt
  • Dịch vụ cơ sở dữ liệu và bộ đệm được quản lý do nhà cung cấp đám mây cung cấp
  • MySQL và Redis chạy trên các máy chủ độc lập

Đối với cơ sở dữ liệu MySQL, bạn có thể lựa chọn các giải pháp kiến ​​trúc sau:

Loại kiến ​​trúcThành phần thành phầnPhương pháp làm việcPhương pháp cấu hình ứng dụng
Sao chép Master-Slave1 cơ sở dữ liệu chính<br />N cơ sở dữ liệu nô lệXử lý chính ghi<br />Xử lý phụ ghi<br />Tự động đồng bộ hóa dữ liệu chính-phụCấu hình địa chỉ cơ sở dữ liệu chủ là SQL_DSN
Cụm cơ sở dữ liệuNhiều nút ngang hàng<br />Lớp proxy (Bộ định tuyến ProxySQL/MySQL)Tất cả các nút có thể đọc/ghi<br />Cân bằng tải thông qua lớp proxy<br />Tự động chuyển đổi dự phòngCấu hình địa chỉ lớp proxy là SQL_DSN

Lưu ý quan trọng

Bất kể bạn chọn kiến ​​trúc nào, SQL_DSN của ứng dụng cấu hình chỉ cần một địa chỉ nhập thống nhất.

Đảm bảo tất cả các nút đều có thể truy cập các dịch vụ này và có đủ hiệu suất cũng như độ tin cậy.

Bước 2: Cấu hình Master Node

Tạo một tập tin docker-compose.yml trên máy chủ nút chính:

services:
  new-api-master:
    image: calciumion/new-api:latest
    container_name: new-api-master
    restart: always
    ports:
      - '3000:3000'
    environment:
      - SQL_DSN=root:password@tcp(your-db-host:3306)/new-api
      - REDIS_CONN_STRING=redis://default:password@your-redis-host:6379
      - SESSION_SECRET=your_unique_session_secret
      - CRYPTO_SECRET=your_unique_crypto_secret
      - TZ=Asia/Shanghai
      # Optional configurations below
      - SYNC_FREQUENCY=60 # Sync frequency in seconds
      - FRONTEND_BASE_URL=https://your-domain.com # Frontend base URL for email notifications and other functions
    volumes:
      - ./data:/data
      - ./logs:/app/logs

Mẹo bảo mật

Vui lòng sử dụng mật khẩu mạnh và chuỗi bí mật được tạo ngẫu nhiên để thay thế các giá trị mẫu trong cấu hình trên.

Bắt đầu nút chính:

docker compose up -d

Bước 3: Cấu hình các nút phụ

Tạo một tập tin docker-compose.yml trên mỗi máy chủ nút phụ:

services:
  new-api-slave:
    image: calciumion/new-api:latest
    container_name: new-api-slave
    restart: always
    ports:
      - '3000:3000' # Can use the same port as master node since they're on different servers
    environment:
      - SQL_DSN=root:password@tcp(your-db-host:3306)/new-api # Same as master node
      - REDIS_CONN_STRING=redis://default:password@your-redis-host:6379 # Same as master node
      - SESSION_SECRET=your_unique_session_secret # Must be same as master node
      - CRYPTO_SECRET=your_unique_crypto_secret # Must be same as master node
      - NODE_TYPE=slave # Key configuration, specify as slave node
      - SYNC_FREQUENCY=60 # Sync frequency between slave and master nodes, in seconds
      - TZ=Asia/Shanghai
      # Optional configurations below
      - FRONTEND_BASE_URL=https://your-domain.com # Must be same as master node
    volumes:
      - ./data:/data
      - ./logs:/app/logs

Bắt đầu nút nô lệ:

docker compose up -d

Lặp lại bước này cho mỗi máy chủ nút nô lệ.

Bước 4: Cấu hình Load Balancing

Để đạt được sự phân phối lưu lượng truy cập cân bằng, bạn cần thiết lập bộ cân bằng tải. Đây là cấu hình ví dụ sử dụng Nginx làm bộ cân bằng tải:

upstream new_api_cluster {
    server master-node-ip:3000 weight=3;
    server slave-node1-ip:3000 weight=5;
    server slave-node2-ip:3000 weight=5;
    # Can add more slave nodes
}

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://new_api_cluster;
        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-Proto $scheme;
    }
}

Cấu hình này đặt trọng số nút chính thành 3 và trọng số nút phụ thành 5, nghĩa là các nút phụ sẽ xử lý nhiều yêu cầu hơn. Bạn có thể điều chỉnh các trọng lượng này dựa trên nhu cầu thực tế của mình.

Tùy chọn cấu hình nâng cao

Cài đặt đồng bộ hóa dữ liệu

Đồng bộ hóa dữ liệu giữa các nút cụm phụ thuộc vào các biến môi trường sau:

Biến môi trườngMô tảGiá trị đề xuất
SYNC_FREQUENCYTần số đồng bộ nút (giây)60
BATCH_UPDATE_ENABLEDCho phép cập nhật hàng loạttrue
BATCH_UPDATE_INTERVALKhoảng thời gian cập nhật hàng loạt (giây)5

Cấu hình sẵn sàng cao của Redis

Để cải thiện tính khả dụng của Redis, bạn có thể định cấu hình cụm Redis hoặc chế độ canh gác:

environment:
  - REDIS_CONN_STRING=redis://your-redis-host:6379
  - REDIS_PASSWORD=your_redis_password
  - REDIS_MASTER_NAME=mymaster # Master node name in sentinel mode
  - REDIS_CONN_POOL_SIZE=10 # Redis connection pool size

Cấu hình bảo mật phiên

Đảm bảo tất cả các nút trong cụm sử dụng cùng một bí mật phiên và mã hóa:

environment:
  - SESSION_SECRET=your_unique_session_secret # Must be same on all nodes
  - CRYPTO_SECRET=your_unique_crypto_secret # Must be same on all nodes

Giám sát và bảo trì

Kiểm tra sức khỏe

Định cấu hình kiểm tra tình trạng thường xuyên để theo dõi trạng thái nút:

healthcheck:
  test:
    [
      'CMD-SHELL',
      "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $$2}'",
    ]
  interval: 30s
  timeout: 10s
  retries: 3

Quản lý nhật ký

Đối với các cụm quy mô lớn, nên sử dụng quản lý nhật ký tập trung:

environment:
  - LOG_SQL_DSN=root:password@tcp(log-db-host:3306)/new_api_logs # Independent log database

Hướng dẫn chia tỷ lệ

Khi doanh nghiệp của bạn phát triển, bạn có thể cần mở rộng quy mô cụm. Các bước chia tỷ lệ như sau:

  1. Chuẩn bị máy chủ mới: Cài đặt Docker và Docker Compose
  2. Định cấu hình các nút phụ: Định cấu hình các nút phụ mới theo "Bước 3: Định cấu hình các nút phụ"
  3. Cập nhật cấu hình cân bằng tải: Thêm nút mới vào cấu hình cân bằng tải
  4. Kiểm tra các nút mới: Đảm bảo các nút mới hoạt động bình thường và tham gia cân bằng tải

Các phương pháp hay nhất

  1. Sao lưu cơ sở dữ liệu thường xuyên: Ngay cả trong môi trường cụm, hãy thường xuyên sao lưu cơ sở dữ liệu
  2. Giám sát việc sử dụng tài nguyên: Giám sát chặt chẽ việc sử dụng CPU, bộ nhớ và ổ đĩa
  3. Áp dụng chiến lược cập nhật luân phiên: Khi cập nhật, trước tiên hãy cập nhật các nút phụ, xác nhận tính ổn định trước khi cập nhật nút chính
  4. Cấu hình hệ thống cảnh báo: Theo dõi trạng thái nút và thông báo kịp thời cho quản trị viên khi xảy ra sự cố
  5. Triển khai phân phối theo địa lý: Nếu có thể, hãy triển khai các nút ở các vị trí địa lý khác nhau để cải thiện tính khả dụng

Khắc phục sự cố

Nút không thể đồng bộ dữ liệu

  • Kiểm tra kết nối Redis có bình thường không
  • Xác nhận rằng SESSION_SECRET và CRYPTO_SECRET giống hệt nhau trên tất cả các nút
  • Xác minh cấu hình kết nối cơ sở dữ liệu là chính xác

Mất cân bằng tải

  • Kiểm tra cấu hình cân bằng tải và cài đặt trọng lượng
  • Giám sát việc sử dụng tài nguyên của từng nút để đảm bảo không có nút nào bị quá tải
  • Có thể cần điều chỉnh trọng số nút hoặc thêm nhiều nút hơn

Vấn đề mất phiên

  • Đảm bảo tất cả các nút sử dụng cùng SESSION_SECRET
  • Xác minh cấu hình Redis là chính xác và có thể truy cập được
  • Kiểm tra xem khách hàng có xử lý cookie chính xác không

Tài liệu liên quan