Langflow 企业数据库管理员指南
Langflow 数据库存储了对更多 Langflow 操作至关重要的数据,包括启动、流程执行、用户交互和行政任务。 该数据库支持前端(可视化编辑器)和后端(API)操作,其可用性对 Langflow 的稳定性和功能至关重要。 有关数据库架构的详细信息,请参阅 Memory management options。
本指南面向负责在生产环境中部署和管理 Langflow 的企业数据库管理员(DBA)和运维人员。 它解释了如何配置 Langflow 以使用 PostgreSQL,包括高可用性(HA)和主动-主动配置,以及监控、维护和安全方面的最佳实践。
使用 PostgreSQL 配置 Langflow
Langflow 的默认数据库是 SQLite。 但是,由于 PostgreSQL 的可扩展性、性能和健壮性,建议在生产环境中使用它。
以下步骤说明如何为独立或容器化部署配置 Langflow 以使用 PostgreSQL。 有关更多信息,请参阅配置外部 PostgreSQL 数据库。
-
设置 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)或主动-主动高可用性 PostgreSQL 配置。 建议在生产环境中使用此配置,以最小化停机时间,并在数据库服务器故障时确保持续运行,特别是当多个 Langflow 实例依赖同一数据库时。
- 高可用性 (HA)
- 主动-主动高可用性
-
设置流Replicate:
-
配置一个主数据库用于写入。
-
配置一个或多个副本用于读取和故障转移。
根据您的延迟和一致性要求选择同步或异步Replicate。
-
-
使用以下选项之一实现自动故障转移:
-
更新您的 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 数据库或代理的单个连接字符串。
要实现主动-主动高可用性,您必须部署多个 Langflow 实例,使用负载均衡在实例间分发流量,并确保所有实例连接到同一个 HA PostgreSQL 数据库:
-
使用 Kubernetes 或 Docker Swarm 部署多个 Langflow 实例。
您必须配置实例以使用共享的 PostgreSQL 数据库。 有关更多信息,请参阅 Kubernetes 上的 Langflow 最佳实践。
-
设置流Replicate:
-
配置一个主数据库用于写入。
-
配置一个或多个副本用于读取和故障转移。
根据您的延迟和一致性要求选择同步或异步Replicate。
-
-
使用以下选项之一实现自动故障转移:
-
更新您的 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``````yaml_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或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)