部署和維護 / 高可用部署
DataFlux Func 支持多份部署以滿足高可用要求。
本文主要介紹如何在服務器上直接安裝、部署高可用 DataFlux Func。
- 有關在 k8s 中使用 Helm 安裝 DataFlux Func,請參考 部署和維護 / 安裝部署 / Helm 部署
- 有關函數具體執行的過程,請參考 部署和維護 / 函數執行過程
- 有關 DataFlux Func 系統擴容的信息,請參考部署和維護 / 架構、擴容與限制資源
選擇 Redis 的高可用方案時,請勿使用「集羣版 Redis」,可以使用「主從版 Redis」
如之前已經使用單機方式安裝過 DataFlux Func,在切換為高可用部署時,請參考 部署和維護 / 日常維護 / 遷移數據庫 進行遷移
1. 多副本部署
DataFlux Func 的 Server 和 Worker 服務都支持多份部署以實現高可用、擴容等需求。
一般來説,函數的執行效率瓶頸在 Worker 服務上(即 Python 代碼),因此 Server 服務只需要避免單點即可,而 Worker 服務則需要根據實際業務量增加副本數量。
多副本部署時,需要保證所有的服務 user-config.yaml
文件內容完全一致,且都連接到同一套 MySQL 和 Redis,資源目錄掛在了同一個存儲。
同時,Beat 服務作為定時任務的觸發器,能且只能運行 1 個副本,否則可能會產生重複的定期任務。
flowchart TB
USER[用户]
SERVER_1[Server 1]
SERVER_2[Server 2]
WORKER_1[Worker 1]
WORKER_2[Worker 2]
WORKER_3[Worker 3]
BEAT[Beat]
REDIS[Redis]
USER --HTTP 請求--> SLB
SLB --HTTP 轉發--> SERVER_1
SLB --HTTP 轉發--> SERVER_2
SERVER_1 --函數執行任務入隊--> REDIS
SERVER_2 --> REDIS
REDIS --函數執行任務出隊--> WORKER_1
REDIS --函數執行任務出隊--> WORKER_2
REDIS --函數執行任務出隊--> WORKER_3
BEAT --"函數執行任務入隊\n(定時)"--> REDIS
2. 完全獨立的主備部署
暫且先不考慮這種部署方式到底算不算「高可用」,假設確實存在這種部署需求
完全獨立的主備部署實際上就是分別部署 2 套各自獨立的 DataFlux Func(配置文件 user-config.yaml
中有關 Secret、 MySQL、Redis 完全相同)的部署方式。
由於主備 DataFlux Func 各自獨立運行,因此主備服務器上的 Beat 服務都會在各自環境觸發定期任務,這會導致定期任務重複觸發。
為避免此問題,可以在平時將備用節點的 DataFlux Func 關閉,或在腳本中自行編寫避免任務重複執行的處理。
flowchart TB
USER[用户]
MAIN_NODE_SERVER[主節點 Server]
MAIN_NODE_WORKER[主節點 Worker]
MAIN_NODE_BEAT[主節點 Beat]
MAIN_NODE_REDIS_QUEUE[主節點 Redis 隊列]
BACKUP_NODE_SERVER[備用節點 Server]
BACKUP_NODE_WORKER[備用節點 Worker]
BACKUP_NODE_BEAT[備用節點 Beat]
BACKUP_NODE_REDIS_QUEUE[備用節點 Redis 隊列]
USER --HTTP 請求--> SLB
SLB --HTTP 轉發--> MAIN_NODE_SERVER
SLB -.-> BACKUP_NODE_SERVER
subgraph "備用節點 - 關閉"
direction TB
BACKUP_NODE_SERVER --函數執行任務入隊--> BACKUP_NODE_REDIS_QUEUE
BACKUP_NODE_REDIS_QUEUE --函數執行任務出隊--> BACKUP_NODE_WORKER
BACKUP_NODE_BEAT --"函數執行任務入隊\n(定時)"--> BACKUP_NODE_REDIS_QUEUE
end
subgraph 主節點
direction TB
MAIN_NODE_SERVER --函數執行任務入隊--> MAIN_NODE_REDIS_QUEUE
MAIN_NODE_REDIS_QUEUE --函數執行任務出隊--> MAIN_NODE_WORKER
MAIN_NODE_BEAT --"函數執行任務入隊\n(定時)"--> MAIN_NODE_REDIS_QUEUE
end