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ệ:
- 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
- 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
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:
- 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
- Chia sẻ cùng một Redis: Dành cho bộ nhớ đệm và liên lạc giữa các nút
- Sử dụng các bí mật giống nhau:
SESSION_SECRETvàCRYPTO_SECRETphải giống nhau trên tất cả các nút - 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úc | Thành phần thành phần | Phương pháp làm việc | Phương pháp cấu hình ứng dụng |
|---|---|---|---|
| Sao chép Master-Slave | 1 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ệu | Nhiề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òng | Cấ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/logsMẹ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 -dBướ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/logsBắt đầu nút nô lệ:
docker compose up -dLặ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ường | Mô tả | Giá trị đề xuất |
|---|---|---|
SYNC_FREQUENCY | Tần số đồng bộ nút (giây) | 60 |
BATCH_UPDATE_ENABLED | Cho phép cập nhật hàng loạt | true |
BATCH_UPDATE_INTERVAL | Khoả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 sizeCấ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 nodesGiá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: 3Quả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 databaseHướ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:
- Chuẩn bị máy chủ mới: Cài đặt Docker và Docker Compose
- Đị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ụ"
- 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
- 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
- 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
- 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
- Á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
- 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ố
- 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
- Hướng dẫn cấu hình biến môi trường - Chứa tất cả các biến môi trường có liên quan để triển khai nhiều nút
- Hướng dẫn cập nhật hệ thống - Chiến lược cập nhật hệ thống trong môi trường nhiều nút
- Hướng dẫn cấu hình Docker Compose - Để ghi tệp cấu hình nút cụm