连接到外部 ClickHouse 数据库
ClickHouse 是一个高性能、面向列的数据库系统。它允许快速摄取数据,并针对分析查询进行了优化。
LangSmith 使用 ClickHouse 作为跟踪和反馈的主要数据存储。默认情况下,自托管的 LangSmith 将使用与 LangSmith 实例捆绑在一起的内部 ClickHouse 数据库。它在与 LangSmith 应用程序相同的 Kubernetes 集群中作为有状态集运行,或者在与 LangSmith 应用程序相同的主机上作为 Docker 容器运行。
但是,您可以配置 LangSmith 以使用外部 ClickHouse 数据库,以便更轻松地进行管理和扩展。通过配置外部 ClickHouse 数据库,您可以管理数据库的备份、扩展和其他操作任务。虽然 Clickhouse 尚不是 Azure、AWS 或 Google Cloud 中的原生服务,但您可以通过以下方式在外部 ClickHouse 数据库中运行 LangSmith
- LangSmith 管理的 ClickHouse
- 直接或通过云提供商市场配置 ClickHouse Cloud
- 在您的云提供商的 VM 上
使用前两个选项(LangSmith 管理的 ClickHouse 或 ClickHouse Cloud)将在您的 VPC 外部配置 Clickhouse 服务。但是,这两个选项都支持私有端点,这意味着您可以将流量定向到 ClickHouse 服务,而无需将其暴露于公共互联网(例如,通过 AWS PrivateLink 或 GCP Private Service Connect)。
此外,敏感信息可以配置为不存储在 Clickhouse 中。请联系 support@langchain.dev 获取更多信息。
要求
- 已配置的 ClickHouse 实例,您的 LangSmith 应用程序可以对其进行网络访问(有关选项,请参见上文)。
- 具有对 ClickHouse 数据库管理员访问权限的用户。此用户将用于创建必要的表、索引和视图。
- 我们支持独立的 ClickHouse 和外部管理的集群部署。对于集群部署,请确保所有节点都运行相同的版本。请注意,捆绑的 ClickHouse 安装不支持集群设置。
- 我们仅支持 ClickHouse 版本 >= 23.9。使用 ClickHouse 版本 >= 24.2 需要 LangSmith v0.6 或更高版本。有关更多信息,请参阅 LangSmith 发行说明。
- 我们依赖于 ClickHouse 实例上设置的一些配置参数。这些参数在下面详细介绍
<profiles>
<default>
<async_insert>1</async_insert> # Turn on async insert
<async_insert_max_data_size>25000000</async_insert_max_data_size> # Flush data to disk after 25MB. You may need to adjust this based on your workload.
<wait_for_async_insert>0</wait_for_async_insert> # Disable waiting for async insert by default
<parallel_view_processing>1</parallel_view_processing> # Enable parallel view processing
<materialize_ttl_after_modify>0</materialize_ttl_after_modify> # Disable TTL materialization after modify
<wait_for_async_insert_timeout>120</wait_for_async_insert_timeout> # Set the timeout for waiting for async insert
<lightweight_deletes_sync>0</lightweight_deletes_sync> # Disable lightweight deletes sync
</default>
</profiles>
我们的系统已经过调整,可以与上述配置参数一起使用。更改这些参数可能会导致意外行为。
HA 复制的 Clickhouse 集群
默认情况下,上面的设置过程仅适用于单节点 Clickhouse 集群。
如果您想使用多节点 Clickhouse 集群来实现 HA,我们支持这种方式,但需要额外的配置。此设置可以使用具有多个节点的 Clickhouse 集群,其中数据通过 Zookeeper 或 Clickhouse Keeper 复制。有关 Clickhouse 复制的更多信息,请参阅 Clickhouse 数据复制文档。
为了使用复制的多节点 Clickhouse 设置来设置 LangSmith
- 您需要拥有一个使用 Keeper 或 Zookeeper 进行数据复制并具有适当设置的 Clickhouse 集群。请参阅 Clickhouse 复制设置文档。
- 您需要在 LangSmith 配置部分中设置集群设置,特别是将
cluster
设置设置为与您的 Clickhouse 集群名称匹配。这将在运行 Clickhouse 迁移时使用Replicated
表引擎。 - 如果除了 HA 之外,您还想在 Clickhouse 节点之间进行负载均衡(以分配读取或写入),我们建议使用负载均衡器或 DNS 负载均衡在您的 Clickhouse 服务器之间进行轮询。
- 注意:您需要在首次启动 LangSmith 并运行 Clickhouse 迁移之前启用
cluster
设置。这是一个要求,因为表引擎需要创建为Replicated
表引擎,而不是非复制的引擎类型。
当启用 cluster
运行迁移时,迁移将创建 Replicated
表引擎类型。这意味着数据将在集群中的服务器之间复制。这是一个主-主设置,其中任何服务器都可以处理读取、写入或合并。
LangSmith 管理的 ClickHouse
- 如果使用 LangSmith 管理的 ClickHouse,您将需要在 LangSmith VPC 和 ClickHouse VPC 之间建立 VPC 对等连接。请联系 support@langchain.dev 获取更多信息。
- 您还需要设置 Blob 存储。您可以在 Blob 存储文档中阅读有关 Blob 存储的更多信息。
由 LangSmith 管理的 ClickHouse 安装使用 SharedMerge 引擎,该引擎自动对其进行集群并分离计算和存储。
参数
您需要为您的 LangSmith 安装提供几个参数,以配置外部 ClickHouse 数据库。这些参数包括
- 主机名:ClickHouse 数据库的主机名或 IP 地址
- HTTP 端口:ClickHouse 数据库侦听 HTTP 连接的端口
- 原生端口:ClickHouse 数据库侦听 原生连接 的端口
- 数据库:LangSmith 应使用的 ClickHouse 数据库的名称
- 用户名:用于连接到 ClickHouse 数据库的用户名
- 密码:用于连接到 ClickHouse 数据库的密码
- 集群(可选):如果使用外部 Clickhouse 集群,则为 ClickHouse 集群的名称。设置后,LangSmith 将在集群上运行迁移并在实例之间复制数据。
集群部署的重要注意事项
- 集群设置必须在新 schema 上配置 - 现有的独立 ClickHouse 实例无法转换为集群模式。
- 集群仅在外部管理的 ClickHouse 部署中受支持。它与捆绑的 ClickHouse 安装不兼容,因为这些安装不包含必需的 ZooKeeper 配置。
- 当使用集群部署时,LangSmith 将自动
- 在集群中的所有节点上运行数据库迁移
- 配置表以在集群中进行数据复制
请注意,虽然数据在节点之间复制,但 LangSmith 不配置分布式表或处理查询路由 - 查询将定向到指定的主机。如果需要,您需要在基础设施级别处理任何负载均衡或查询分发。
配置
有了这些参数,您可以配置您的 LangSmith 实例以使用已配置的 ClickHouse 数据库。您可以通过修改 LangSmith Helm Chart 安装的 config.yaml
文件或 Docker 安装的 .env
文件来完成此操作。
- Helm
- Docker
clickhouse:
external:
enabled: true
host: "host"
port: "http port"
nativePort: "native port"
user: "default"
password: "password"
database: "default"
tls: false
cluster: "my_cluster_name" # Optional: Set this if using an external Clickhouse cluster
# In your .env file
CLICKHOUSE_HOST=langchain-clickhouse # Change to your Clickhouse host if using external Clickhouse. Otherwise, leave it as is
CLICKHOUSE_USER=default # Change to your Clickhouse user if needed
CLICKHOUSE_DB=default # Change to your Clickhouse database if needed
CLICKHOUSE_PORT=8123 # Change to your Clickhouse port if needed
CLICKHOUSE_TLS=false # Change to true if you are using TLS to connect to Clickhouse. Otherwise, leave it as is
CLICKHOUSE_PASSWORD=password # Change to your Clickhouse password if needed
CLICKHOUSE_NATIVE_PORT=9000 # Change to your Clickhouse native port if needed
CLICKHOUSE_CLUSTER=my_cluster_name # Optional: Set this if using an external Clickhouse cluster
配置完成后,您应该能够重新安装您的 LangSmith 实例。如果一切配置正确,您的 LangSmith 实例现在应该正在使用您的外部 ClickHouse 数据库。