面向企业 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)。
-
设置 PostgreSQL:
- 使用本地服务器、Docker 或托管云服务部署 PostgreSQL 实例(建议版本为 12 或更高)。
- 为 Langflow 创建一个数据库。
- 创建一个具有适当、最小权限的 PostgreSQL 用户,以便管理和写入数据库,例如对您的 Langflow 表具有 CREATE、SELECT、INSERT、UPDATE、DELETE 权限。
-
获取格式为
postgresql://user:password@host:port/dbname的连接字符串,例如postgresql://langflow:securepassword@postgres:5432/langflow。对于高可 用性,请使用虚拟 IP 或代理主机名,而不是直接的数据库主机。 有关更多信息,请参阅 PostgreSQL 的高可用性。
-
使用
.env或docker-compose.yml文件配置 Langflow。- .env
- docker-compose.yml
-
在
langflow目录下创建一个.env文件:_10touch .env -
将连接字符串添加到
.env文件中:_10LANGFLOW_DATABASE_URL="postgresql://langflow:securepassword@postgres:5432/langflow"
有关更多环境变量,请参阅 Langflow 存储库中的
.env.example文件。使用来自 Langflow 存储库的示例
docker-compose.yml。 您可以根据需要使用默认值或自定义它们。_20version: '3'_20services:_20langflow:_20image: langflowai/langflow:latest_20ports:_20- "7860:7860"_20environment:_20- LANGFLOW_DATABASE_URL=postgresql://langflow:langflow@postgres:5432/langflow_20postgres:_20image: postgres:16_20ports:_20- "5432:5432"_20environment:_20- POSTGRES_USER=langflow_20- POSTGRES_PASSWORD=langflow_20- POSTGRES_DB=langflow_20volumes:_20- langflow-postgres:/var/lib/postgresql/data_20volumes:_20- langflow-postgres: -
使用您的 PostgreSQL 连接启动 Langflow:
- .env
- docker-compose.yml
_10uv run langflow run --env-file .env导航到包含
docker-compose.yml的目录,然后运行docker-compose up。 -
可选:运行迁移。
Langflow 使用迁移来管理其数据库架构。 当您第一次连接到 PostgreSQL 时,Langflow 会自动运行迁移以创建必要的表。
直接修改架构可能会与 Langflow 内置的架构管理发生冲突。 如果您需要更新架构,可以使用 Langflow CLI 手动运行迁移:
-
运行
langflow migration以预览更改。 -
检查更改以确保可以安全地进行迁移。
-
运行
langflow migration --fix以运行迁移并永久应用更改。这是一个破坏性操作,可能会删除数据。 有关更多信息,请参阅
langflow migration。
-
-
要验证配置,请使用 Langflow 可视化编辑器或 API 创建任何流,然后查询数据库以确认表和活动已记录在那里。流的内容并不重要;您只需要确认流存储在您的 PostgreSQL 数据库中。 您可以通以下两种方式查询数据库:
-
查询数据库容器:
_10docker exec -it <postgres-container> psql -U langflow -d langflow -
使用 SQL:
_10SELECT * FROM pg_stat_activity WHERE datname = 'langflow';
-
PostgreSQL 的高可用性
为了进一步提高性能、可靠性和可扩展性,请使用高可用性 (HA) 或双活 HA PostgreSQL 配置。 建议在生产部署中使用此配置,以最大程度地减少停机时间,并在数据库服务器发生故障时确保连续运行,尤其是在多个 Langflow 实例依赖同一个数据库时。
- 高可用性 (HA)
- 双活高可用 (Active-Active HA)
-
设置流复制:
-
配置一个主数据库用于写入。
-
配置一个或多个副本用于读取和故障转移。
根据您的延迟和一致性要求,选择同步或异步复制。
-
-
使用以下选项之一实现自动故障转移:
-
更新您的 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。
- 使用解析为当前主数据库的虚拟 IP 或 DNS 名称,例如
-
可选:为读取密集型工作负载实现负载均衡:
- 使用像 PgBouncer 这样的连接池器将读取查询分发到副本。
- 配置 Langflow 以使用指向主 PostgreSQL 数据库或代理的单个连接字符串。
要实现双活高可用 (Active-Active HA),您必须部署多个 Langflow 实例,使用负载均衡在实例之间分配流量,并确保所有实例都连接到同一个 HA PostgreSQL 数据库:
-
使用 Kubernetes 或 Docker Swarm 部署多个 Langflow 实例。
您必须配置实例以使用共享的 PostgreSQL 数据库。 有关更多信息,请参阅 在 Kubernetes 上运行 Langflow 的最佳实践 (Best practices for Langflow on Kubernetes)。
-
设置流复制:
-
配置一个主数据库用于写入。
-
配置一个或多个副本用于读取和故障转移。
根据您的延迟和一致性要求,选择同步或异步复制。
-
-
使用以下选项之一实现自动故障转移:
-
更新您的 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。
- 使用解析为当前主数据库的虚拟 IP 或 DNS 名称,例如
-
使用负载均衡器在实例之间分配请求。
以下示例配置适用于具有三个 langflow-runtime 副本的生产部署,使用 Kubernetes 负载均衡器服务将流量分发到健康的 Pod,并使用 HA PostgreSQL 数据库连接字符串。
_34apiVersion: apps/v1_34kind: Deployment_34metadata:_34 name: langflow-runtime_34spec:_34 replicas: 3_34 selector:_34 matchLabels:_34 app: langflow-runtime_34 template:_34 metadata:_34 labels:_34 app: langflow-runtime_34 spec:_34 containers:_34 - name: langflow_34 image: langflowai/langflow:latest_34 ports:_34 - containerPort: 7860_34 env:_34 - name: LANGFLOW_DATABASE_URL_34 value: "postgresql://langflow:securepassword@db-proxy:5432/langflow?sslmode=require"_34---_34apiVersion: v1_34kind: Service_34metadata:_34 name: langflow-runtime_34spec:_34 selector:_34 app: langflow-runtime_34 ports:_34 - port: 80_34 targetPort: 7860_34 type: LoadBalancer
在实现 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_connections和log_statements,以跟踪访问和更改。