连接到外部 ClickHouse 数据库
ClickHouse 是一款高性能的列式数据库系统,支持数据的快速写入,并针对分析型查询进行了优化。
LangSmith 使用 ClickHouse 作为追踪数据和反馈信息的主要数据存储。默认情况下,自托管的 LangSmith 将使用一个与 LangSmith 实例捆绑的内部 ClickHouse 数据库。该数据库以有状态集(StatefulSet)的形式运行,与 LangSmith 应用程序位于同一 Kubernetes 集群中;或者以 Docker 容器的形式运行,与 LangSmith 应用程序位于同一主机上。
然而,您可以将 LangSmith 配置为使用外部 ClickHouse 数据库,以便更轻松地进行管理和扩展。 通过配置外部 ClickHouse 数据库,您可以管理数据库的备份、扩展及其他运维任务。 尽管 ClickHouse 尚未成为 Azure、AWS 或 Google Cloud 中的原生服务,您仍可通过以下方式在外部 ClickHouse 数据库上运行 LangSmith:
- 由LangSmith管理的ClickHouse
- 配置ClickHouse 云或直接通过云服务提供商的应用市场:
- 在您的云服务提供商的虚拟机中
使用前两种选项(由 LangSmith 托管的 ClickHouse 或 ClickHouse Cloud)将在您的 VPC 外部署一个 ClickHouse 服务。 然而,这两种选项均支持私有终端节点,这意味着您可以将流量定向至 ClickHouse 服务,而无需将其暴露在公共互联网上(例如通过 AWS PrivateLink 或 GCP Private Service Connect)。
此外,敏感信息可配置为不存储在 ClickHouse 中。如需了解更多信息,请联系 support@langchain.dev。
要求
- 您的 LangSmith 应用程序可访问网络的已配置 ClickHouse 实例(参见上文选项)。
- 拥有 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 集群。
如需为高可用性(HA)使用多节点 ClickHouse 集群,我们支持该配置,但需要额外的必要设置。此配置可使用多个节点组成的 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 表引擎类型。这意味着数据将在集群中的各服务器之间进行复制。
这是一种主-主(Master-Master)架构,其中任意服务器均可处理读取、写入或合并操作。
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 将在该集群上运行迁移操作,并在各实例之间复制数据。
集群部署的重要注意事项:
- 集群化部署必须在全新的数据库模式下进行配置——现有的独立 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 数据库。