跳到主要内容

面向企业 DBA 的 Langflow 数据库指南

Langflow 数据库存储了对大多数 Langflow 操作至关重要的数据,包括启动、流执行、用户交互和管理任务。 该数据库支持前端(可视化编辑器)和后端(API)操作,其可用性对 Langflow 的稳定性和功能至关重要。 有关数据库架构的详细信息,请参阅 记忆管理选项 (Memory management options)

本指南专为负责在生产环境中部署和管理 Langflow 的企业数据库管理员 (DBA) 和运维人员设计。 它解释了如何配置 Langflow 以使用 PostgreSQL(包括高可用性 (HA) 和双活配置),以及监控、维护和安全方面的最佳实践。

为 Langflow 配置 PostgreSQL

Langflow 的默认数据库是 SQLite。 然而,由于 PostgreSQL 的可扩展性、性能和稳健性,建议在生产环境部署中使用它。

以下步骤说明了如何为独立或容器化部署配置 Langflow 以使用 PostgreSQL。 有关更多信息,请参阅 配置外部 PostgreSQL 数据库 (Configure an external PostgreSQL database)

  1. 设置 PostgreSQL:

    1. 使用本地服务器、Docker 或托管云服务部署 PostgreSQL 实例(建议版本为 12 或更高)。
    2. 为 Langflow 创建一个数据库。
    3. 创建一个具有适当、最小权限的 PostgreSQL 用户,以便管理和写入数据库,例如对您的 Langflow 表具有 CREATE、SELECT、INSERT、UPDATE、DELETE 权限。
  2. 获取格式为 postgresql://user:password@host:port/dbname 的连接字符串,例如 postgresql://langflow:securepassword@postgres:5432/langflow

    对于高可用性,请使用虚拟 IP 或代理主机名,而不是直接的数据库主机。 有关更多信息,请参阅 PostgreSQL 的高可用性

  3. 使用 .envdocker-compose.yml 文件配置 Langflow。

    1. langflow 目录下创建一个 .env 文件:


      _10
      touch .env

    2. 将连接字符串添加到 .env 文件中:


      _10
      LANGFLOW_DATABASE_URL="postgresql://langflow:securepassword@postgres:5432/langflow"

    有关更多环境变量,请参阅 Langflow 存储库中的 .env.example 文件。

  4. 使用您的 PostgreSQL 连接启动 Langflow:


    _10
    uv run langflow run --env-file .env

  5. 可选:运行迁移。

    Langflow 使用迁移来管理其数据库架构。 当您第一次连接到 PostgreSQL 时,Langflow 会自动运行迁移以创建必要的表。

    直接修改架构可能会与 Langflow 内置的架构管理发生冲突。 如果您需要更新架构,可以使用 Langflow CLI 手动运行迁移:

    1. 运行 langflow migration 以预览更改。

    2. 检查更改以确保可以安全地进行迁移。

    3. 运行 langflow migration --fix 以运行迁移并永久应用更改。

      这是一个破坏性操作,可能会删除数据。 有关更多信息,请参阅 langflow migration

  6. 要验证配置,请使用 Langflow 可视化编辑器或 API 创建任何流,然后查询数据库以确认表和活动已记录在那里。流的内容并不重要;您只需要确认流存储在您的 PostgreSQL 数据库中。 您可以通以下两种方式查询数据库:

    • 查询数据库容器:


      _10
      docker exec -it <postgres-container> psql -U langflow -d langflow

    • 使用 SQL:


      _10
      SELECT * FROM pg_stat_activity WHERE datname = 'langflow';

PostgreSQL 的高可用性

为了进一步提高性能、可靠性和可扩展性,请使用高可用性 (HA) 或双活 HA PostgreSQL 配置。 建议在生产部署中使用此配置,以最大程度地减少停机时间,并在数据库服务器发生故障时确保连续运行,尤其是在多个 Langflow 实例依赖同一个数据库时。

  1. 设置流复制:

    1. 配置一个主数据库用于写入。

    2. 配置一个或多个副本用于读取和故障转移。

      根据您的延迟和一致性要求,选择同步或异步复制。

  2. 使用以下选项之一实现自动故障转移:

    • 使用 HA 编排器、分布式配置存储和流量路由器,例如 Patroni、etcd 或 Consul 以及 HAProxy
    • 单独使用 Pgpool-II 或添加支持服务以获得更强大的 HA 支持。
    • 使用提供内置 HA 和自动故障转移的托管服务,例如 AWS RDS 或 Google Cloud SQL。
  3. 更新您的 PostgreSQL 连接字符串以指向 HA 设置。 如果您有多个实例的部署,请确保所有 Langflow 实例都连接到同一个 HA PostgreSQL 数据库。

    您使用的连接字符串取决于您的 HA 配置和服务。

    • 使用解析为当前主数据库的虚拟 IP 或 DNS 名称,例如 postgresql://langflow:securepassword@db-proxy:5432/langflow?sslmode=require
    • 使用托管服务提供的端点,例如 langflow.cluster-xyz.us-east-1.rds.amazonaws.com
  4. 可选:为读取密集型工作负载实现负载均衡:

    1. 使用像 PgBouncer 这样的连接池器将读取查询分发到副本。
    2. 配置 Langflow 以使用指向主 PostgreSQL 数据库或代理的单个连接字符串。

在实现 HA 或双活 HA 之后,监控故障转移事件并确保副本保持同步。 Langflow 通过 SQLAlchemy 支持重连尝试(如果 LANGFLOW_DATABASE_CONNECTION_RETRY=True),确保故障转移后的恢复,并在数据库重新上线后减少中断。

虽然 PostgreSQL 能很好地处理并发连接,但您仍必须在高负载期间监控争用、死锁或其他性能下降情况。

数据库故障的影响

如果 PostgreSQL 数据库不可用,以下 Langflow 功能将失效:

  • 流检索: 无法从数据库加载新的或现有的流。
  • 流保存: 无法保存新流或对现有流的更新。
  • 用户身份验证: 登录和用户管理功能失效。
  • 项目集合访问: 无法访问或共享社区/自定义项目集合。
  • 配置检索: 无法加载应用程序设置。
  • 配置更新: 无法保存对设置的更改。
  • 执行日志访问: 无法检索历史流执行日志。
  • 日志写入: 无法记录新的执行或系统活动日志。
  • 多用户协作: 无法在用户之间共享流或项目。
  • API 流加载: 加载新流(非缓存)的 API 请求失效。

已经加载到内存中的流可能会使用缓存的配置继续运行。 然而,任何需要数据库访问的操作都会失败,直到数据库恢复。 例如,缓存的流可能会运行,但它不会向数据库记录日志或消息历史。

为了尽量减少数据库故障的可能性和影响,请使用 HA 配置 并定期备份。 例如,您可以使用 pg_dump 创建逻辑备份,或者使用预写日志 (WAL) 设置连续归档以进行点到点恢复。 定期测试恢复程序,以确保您的团队了解如何在灾难恢复方案中执行这些程序。

数据库监控

监控您的 PostgreSQL 数据库以确保最佳性能和可靠性:

  • 使用 pgAdmin、Prometheus 与 PostgreSQL exporter 或基于云的 PostgreSQL 监控等工具。
  • 跟踪 CPU、内存和磁盘 I/O 使用情况等性能指标。
  • 监控副本健康状况、可用性、延迟和同步情况。 例如,使用 pg_stat_activity 监控连接数和争用情况。
  • 为高延迟、故障转移事件或复制问题设置警报和通知。
  • 启用 PostgreSQL 日志记录,如 log_connectionslog_statements,以跟踪访问和更改。

另请参阅

Search