跳转至

部署和维护 / 高可用部署

DataFlux Func 支持多份部署以满足高可用要求。

本文主要介绍如何在服务器上直接安装、部署高可用 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