跳到主要内容

Langflow 企业数据库管理员指南

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

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

使用 PostgreSQL 配置 Langflow

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

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

  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)或主动-主动高可用性 PostgreSQL 配置。 建议在生产环境中使用此配置,以最小化停机时间,并在数据库服务器故障时确保持续运行,特别是当多个 Langflow 实例依赖同一数据库时。

  1. 设置流Replicate:

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

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

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

  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或Active-Active HA后,监控故障转移事件并确保副本保持同步。 Langflow通过SQLAlchemy支持重连尝试,如果LANGFLOW_DATABASE_CONNECTION_RETRY=True,确保故障转移后恢复,并在数据库重新在线后减少中断。

尽管PostgreSQL能很好地处理并发连接,但在高负载期间,您仍需监控争用、死锁或其他性能下降问题。


_40
_40
## 数据库故障的影响
_40
_40
如果PostgreSQL数据库不可用,以下Langflow功能将失败:
_40
_40
* **Flow Retrieval**: 无法从数据库加载新的或现有的流程。
_40
* **Flow Saving**: 无法保存新流程或对现有流程的更新。
_40
* **User Authentication**: 登录和用户管理功能失败。
_40
* **Project Collection Access**: 无法访问或共享社区/自定义项目集合。
_40
* **Configuration Retrieval**: 无法加载应用程序设置。
_40
* **Configuration Updates**: 无法保存设置更改。
_40
* **Execution Log Access**: 无法检索历史流程执行日志。
_40
* **Log Writing**: 无法记录新的执行或系统活动日志。
_40
* **Multi-User Collaboration**: 跨用户共享流程或项目失败。
_40
* **API Flow Loading**: 加载新流程(非缓存)的API请求失败。
_40
_40
已在内存中加载的流程可能会继续使用缓存的配置运行。
_40
但是,任何需要数据库访问的操作在数据库恢复之前都会失败。
_40
例如,缓存的流程可能会运行,但它不会将日志或消息历史记录到数据库。
_40
_40
为最小化数据库故障的可能性和影响,请使用[HA配置](#high-availability-for-postgresql)并定期记录备份。
_40
例如,您可以使用`pg_dump`创建逻辑备份,或设置带有预写日志(WAL)的连续归档以实现时间点恢复。
_40
定期测试恢复程序,确保您的团队了解如何在灾难恢复场景中执行它们。
_40
_40
## 数据库监控
_40
_40
监控您的PostgreSQL数据库以确保最佳性能和可靠性:
_40
_40
* 使用pgAdmin、带有PostgreSQL导出器的Prometheus或基于云的PostgreSQL监控工具。
_40
* 跟踪性能指标,如CPU、内存和磁盘I/O使用情况。
_40
* 监控副本的健康状况、可用性、延迟和同步。
_40
例如,使用`pg_stat_activity`监控连接数和争用情况。
_40
* 为高延迟、故障转移事件或Replicate问题设置警报和通知。
_40
* 启用PostgreSQL日志记录,如`log_connections`和`log_statements`,以跟踪访问和更改。
_40
_40
## 另请参阅
_40
_40
* [配置外部PostgreSQL数据库](/configuration-custom-database)
_40
* [Kubernetes上的Langflow架构](/deployment-architecture)
_40
* [在Kubernetes上部署Langflow生产环境](/deployment-kubernetes-prod)

Search