混合部署与专属主机

支持混合部署架构,通过专属主机实现计算与数据的灵活分布

混合部署与专属主机

概述

Knodo 平台采用混合部署架构,支持将 AI 对话的执行环境(沙箱)部署在不同位置的宿主机上。平台控制面(Backend)统一管理任务调度和用户交互,而数据面(Agent Service + Sandbox)可以灵活部署在本地机房、云主机或客户自有服务器上。

  • 控制面:平台 Backend 负责用户管理、任务调度、会话管理
  • 数据面:各宿主机上的 Agent Service 负责沙箱容器管理和文件操作

应用场景

数据合规

敏感数据不出客户网络,仅通过安全通道与平台通信。适用于金融、政务等对数据驻留有严格要求的行业。

连接客户本地环境

将专属主机部署在客户网络内,让 AI 沙箱直接访问客户本地资源:

场景说明
本地 Git 仓库连接客户自建的 GitLab、Gitea、Gogs 等,克隆和推送代码
内部 API调用客户内网中的业务系统接口
内部数据库通过内网直连客户的数据库进行数据查询和分析
内部文件服务访问 NAS、对象存储等内部文件系统

工作原理:沙箱容器运行在客户网络内,Agent 可以直接访问内网资源,无需额外配置代理或端口转发。

连接本地 Git 仓库

将工作空间的远程仓库指向客户自建的 Git 服务:

  1. 在工作空间设置中,找到 Git 远程仓库 配置
  2. 填写客户内网 Git 仓库地址(如 http://gitlab.internal.com/group/project.git
  3. 配置访问凭据:
    • 用户名 + 密码:适用于基础认证
    • Personal Access Token:适用于 GitLab、Gitea 等支持 PAT 的平台
  4. 点击 测试连接 确认可访问后保存

网络要求

确保专属主机上的 Agent Service 能访问目标资源:

要求说明
网络可达Agent Service 所在服务器需与目标服务在同一内网,或有路由可达
DNS 解析如使用域名访问,需确保 DNS 可正确解析
防火墙放行目标服务的端口需对 Agent Service 所在网段放行
凭据配置各服务的访问令牌、账号密码需正确配置

就近计算

将执行环境部署在靠近数据源的位置,减少传输延迟。适用于需要频繁访问本地数据或与本地系统交互的场景。

弹性扩展

按需增加宿主机节点,水平扩展并发处理能力。适用于用户量增长或需要更多计算资源的场景。

资源隔离

不同组织使用独立的计算和存储资源,互不干扰。适用于多租户环境或对资源独占性有要求的客户。

宿主机连接模式

根据网络环境,宿主机支持两种连接模式:

Outbound 模式

Backend 主动连接宿主机上的 Agent Service,适用于平台可直接访问宿主机的场景(同一内网、VPN 互通等)。

  • 配置简单:填写宿主机地址和 API Token 即可
  • 实时通信:通过 HTTP/WebSocket 双向交互
  • 适合内网部署和云上扩展节点

Inbound 模式(反向连接)

宿主机上的 Agent Service 主动连接平台的 WebSocket 网关,适用于宿主机在外网、防火墙内或客户机房等无法被平台直接访问的场景。

  • 无需开放宿主机端口:由宿主机主动建立出站连接
  • 穿透防火墙:只需宿主机能访问平台地址即可
  • 适合跨网络部署和客户自有服务器场景

管理与配置

添加宿主机

  1. 以管理员身份进入 平台管理宿主机管理
  2. 点击 添加宿主机
  3. 填写信息:
    • 名称:宿主机显示名称
    • 连接模式:Outbound 或 Inbound
    • URL(Outbound 模式):Agent Service 地址
    • API Token(Outbound 模式):认证令牌
    • 外网主机:是否为外网部署(影响镜像拉取策略)
  4. 测试连接确认连通后保存

一键部署宿主机

对于 Inbound 模式的宿主机,平台提供一键安装能力(系统要求):

  1. 在宿主机列表中点击"连接 Token"
  2. 生成安装命令
  3. 在目标服务器上执行安装命令,自动完成 Docker 安装、镜像拉取、服务启动

详见 远程主机一键安装

分配组织

  1. 在宿主机操作菜单中选择 组织分配
  2. 选择需要绑定的组织
  3. 绑定后该组织的所有沙箱将自动调度到此主机

一台宿主机可分配给多个组织,一个组织同时只绑定一台宿主机。未分配专属主机的组织使用平台默认主机。

资源监控

宿主机列表会展示每台机器的资源摘要,帮助管理员判断当前节点是否还能继续承载任务:

  • 资源健康:根据负载、内存和数据盘使用率展示正常、紧张、危险、无数据或已过期
  • 负载 / core:展示 1 分钟负载除以逻辑核心数,便于跨机器比较
  • 内存:展示使用率和可用内存
  • 数据盘:展示主数据盘使用率和剩余空间
  • 容器数:展示当前运行的 Sandbox 数量
  • 最近心跳:用于判断指标是否新鲜

点击资源摘要可查看趋势图和磁盘明细。历史趋势默认保留 7 天,管理员可在系统配置中关闭历史指标存储,关闭后仍会保留最新资源状态。

数据与资源隔离

组织绑定专属主机后:

  • 文件隔离:工作空间文件、知识库、插件等数据存储在专属主机本地
  • 计算隔离:沙箱容器运行在专属主机上,不与其他组织共享计算资源
  • 网络隔离:仅控制指令和会话数据经过平台,文件内容不离开宿主机

数据迁移

当组织需要从默认主机迁移到专属主机(或反向迁移)时:

  1. 进入 宿主机管理数据迁移
  2. 选择组织和目标主机,启动迁移
  3. 迁移过程中读操作不受影响,系统后台异步拷贝文件
  4. 迁移完成后自动切换绑定,后续操作透明路由到新主机

备份节点

对于专属主机部署场景,建议配置备份节点以保障数据安全和业务连续性。备份节点通过 rsync 定时同步专属主机的最新数据目录,并使用 Borg 在备份节点本地保留历史快照。默认每 30 分钟同步最新镜像,每 4 小时创建一次历史快照。主节点故障时可以使用最新镜像快速接管;发生误删、误改时可以从历史快照导出或恢复指定目录。

架构

部署方式

纯数据备份

仅定时同步数据,不在备份节点上运行 Agent Service。适用于只需数据容灾、不需要自动故障切换的场景。该方式会保留:

  • /data/knodo/data:最新数据镜像,用于快速接管
  • /data/knodo/borg-repo:历史快照仓库,用于找回旧版本数据

第一步:下载备份脚本

在备份机上执行:

mkdir -p /data/knodo wget -O /data/knodo/backup.sh https://knodo.vip/scripts/remote-host-backup.sh chmod +x /data/knodo/backup.sh

第二步:修改配置

编辑 backup.sh,修改前 3 行为专属主机的实际信息:

SOURCE_HOST="<专属主机IP>" # 替换为专属主机的实际 IP SOURCE_USER="root" SOURCE_DIR="/opt/knodo/data"

脚本已内置 Borg 版本选择、sha256 和下载镜像 fallback,会按系统 glibc 自动选择尽可能新的兼容版本。CentOS 7 / glibc 2.17 默认使用 Borg 1.2.9,较新的系统默认使用 Borg 1.4.4。正常情况下优先使用 gh.llkk.cc 镜像源,无需手工下载 Borg,也无需手工配置 GitHub 镜像;如果系统已存在且可运行的 borg 命令会自动跳过安装。需要优先 GitHub 时,可执行 BORG_DOWNLOAD_PREFER=github /data/knodo/backup.sh install

第三步:配置 SSH 免密

ssh-keygen -t ed25519 -N '' ssh-copy-id root@<专属主机IP>

第四步:一键初始化

/data/knodo/backup.sh install

install 是可重入命令,重复执行不会覆盖 Borg 仓库口令、不会重置 Borg 仓库、不会重复写入定时任务。它会自动完成:

  • 安装 Borg,已安装则跳过
  • 初始化 Borg 仓库,已初始化则跳过
  • 执行环境检查
  • 安装每 30 分钟一次的定时同步任务,已存在则跳过。该任务每次执行 rsync,默认每 4 小时创建一次 Borg 快照

初始化会生成 Borg 仓库口令文件 /data/knodo/.borg-passphrase,必须妥善备份。该文件丢失后,历史快照无法恢复。

默认 Borg 快照使用 lz4 压缩,并通过 nice/ionice 降低 CPU 和 IO 调度优先级。可通过 BORG_SNAPSHOT_INTERVAL_SECONDSBORG_COMPRESSIONBORG_NICEBORG_IONICE_CLASSBORG_IONICE_LEVEL 调整。

第五步:首次同步

# 预览同步内容 /data/knodo/backup.sh dry-run # 后台执行一次正式同步并创建历史快照(推荐,避免 SSH 断开影响) /data/knodo/backup.sh -d

-d 表示后台执行一次 sync,进度可通过 tail -f /data/knodo/logs/backup-daemon.log 查看。安装后定时任务会每 30 分钟自动同步最新镜像,默认每 4 小时创建一次 Borg 历史快照。

历史查询、导出与恢复

查看备份状态和历史快照:

/data/knodo/backup.sh status /data/knodo/backup.sh snapshots

查找某个文件或目录在哪些快照中存在:

/data/knodo/backup.sh find org/main/workspaces/<workspace-id>/path/to/file

从历史快照导出目录,不影响最新镜像:

/data/knodo/backup.sh export <snapshot-id> org/main/workspaces/<workspace-id> /data/knodo/backup.sh export-tar <snapshot-id> org/main/workspaces/<workspace-id> --to /data/knodo/exports/workspace.tar.gz

从历史快照恢复目录到指定目录,不影响最新镜像:

/data/knodo/backup.sh restore-preview <snapshot-id> org/main/workspaces/<workspace-id> --to /data/knodo/restore/<workspace-id> /data/knodo/backup.sh restore <snapshot-id> org/main/workspaces/<workspace-id> --to /data/knodo/restore/<workspace-id>

热备节点

在数据备份的基础上,备份节点同时部署 Agent Service 并连接平台。适用于需要快速接管、缩短故障恢复时间的场景。

  1. 按纯数据备份方式配置数据同步
  2. 在备份节点上安装 Agent Service(Inbound 模式连接平台),详见 远程主机一键安装
  3. 备份节点不分配给任何组织,作为备用宿主机

故障恢复

当专属主机不可用时:

  1. 确认故障:在平台管理中确认专属主机状态为离线
  2. 切换组织绑定:将组织从故障主机重新分配到备份节点(或平台默认主机)
  3. 恢复数据:如备份节点已同步最新数据,工作空间可直接使用;如需要找回历史数据,可先从 Borg 快照导出或恢复指定目录
  4. 恢复主节点:修复后重新部署 Agent Service,通过数据迁移切回

注意事项

  • rsync 同步期间会短暂占用网络带宽,建议在业务低峰期安排首次全量同步
  • Borg 快照会扫描本地镜像目录,大量小文件场景下耗时较长;默认通过 4 小时间隔、lz4niceionice 降低持续负载
  • 备份节点的磁盘空间应大于专属主机数据目录,需额外预留 Borg 历史快照空间
  • Borg 仓库口令文件必须妥善备份,丢失后无法恢复历史快照
  • 备份脚本下载地址:https://knodo.vip/scripts/remote-host-backup.sh

运维监控

心跳检测

系统对所有宿主机进行定期心跳检测:

  • Outbound 模式:通过 HTTP 健康检查
  • Inbound 模式:通过 WebSocket 心跳帧
  • 连续失败超过阈值后自动标记为离线

运行指标

心跳响应中包含宿主机运行状态:

  • CPU / 内存 / 磁盘使用率
  • 运行中的容器数量

管理员可在宿主机列表中直观查看各节点状态,及时发现异常。

常见问题

Q:沙箱能访问客户内网的任意服务吗?

A:沙箱容器与 Agent Service 在同一 Docker 网络内,默认可访问 Agent Service 能访问的所有网络资源。如需限制,可通过 Docker 网络策略或防火墙规则进行管控。

Q:Git 仓库地址需要是内网 IP 还是域名?

A:都可以。只要 Agent Service 所在主机能解析和访问即可。

Q:如何排查连接失败?

A:1) 确认专属主机状态为在线;2) 在宿主机上手动测试目标地址的连通性(如 curlping);3) 检查防火墙和 DNS 配置。

Q:一台宿主机能分配给多少个组织?

A:不设上限,但建议根据主机硬件资源合理规划,避免资源争抢。

Q:数据迁移期间服务会中断吗?

A:不会。迁移采用异步拷贝方式,读写操作不受影响,迁移完成后自动切换。