部署和维护 / 高可用部署
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
用户 --HTTP 请求--> SLB
SLB --HTTP 转发--> Server1
SLB --HTTP 转发--> Server2
Server1 --函数执行任务入队--> Redis
Server2 --> Redis
Redis --函数执行任务出队--> Worker1
Redis --函数执行任务出队--> Worker2
Redis --函数执行任务出队--> Worker3
Beat --"函数执行任务入队\n(定时)"--> Redis
2. 完全独立的主备部署
暂且先不考虑这种部署方式到底算不算「高可用」,假设确实存在这种部署需求
完全独立的主备部署实际上就是分别部署 2 套各自独立的 DataFlux Func(配置文件 user-config.yaml
中有关 Secret、 MySQL、Redis 完全相同)的部署方式。
由于主备 DataFlux Func 各自独立运行,因此主备服务器上的 Beat 服务都会在各自环境触发定期任务,这会导致定期任务重复触发。
为避免此问题,可以在平时将备用节点的 DataFlux Func 关闭,或在脚本中自行编写避免任务重复执行的处理。
flowchart TB
用户 --HTTP 请求--> SLB
SLB --HTTP 转发--> 主节点Server
SLB -.-> 备用节点Server
subgraph "备用节点 - 关闭"
direction TB
备用节点Server --函数执行任务入队--> 备用节点Redis队列
备用节点Redis队列 --函数执行任务出队--> 备用节点Worker
备用节点Beat --"函数执行任务入队\n(定时)"--> 备用节点Redis队列
end
subgraph 主节点
direction TB
主节点Server --函数执行任务入队--> 主节点Redis队列
主节点Redis队列 --函数执行任务出队--> 主节点Worker
主节点Beat --"函数执行任务入队\n(定时)"--> 主节点Redis队列
end