连接到外部 ClickHouse 数据库
ClickHouse 是一个高性能的、面向列的数据库系统。它允许快速摄取数据,并针对分析查询进行了优化。
LangSmith 使用 ClickHouse 作为跟踪和反馈的主要数据存储。默认情况下,自托管 LangSmith 将使用与 LangSmith 实例捆绑在一起的内部 ClickHouse 数据库。它作为有状态集在与 LangSmith 应用程序相同的 Kubernetes 集群中运行,或者作为 Docker 容器在与 LangSmith 应用程序相同的主机上运行。
但是,您可以将 LangSmith 配置为使用外部 ClickHouse 数据库,以便于管理和扩展。 通过配置外部 ClickHouse 数据库,您可以管理数据库的备份、扩展和其他作任务。 虽然 Clickhouse 还不是 Azure、AWS 或 Google Cloud 中的原生服务,但您可以通过以下方式使用外部 ClickHouse 数据库运行 LangSmith:
- LangSmith 托管的 ClickHouse
- 直接或通过云提供商市场配置 ClickHouse 云:
- 在云提供商的 VM 上
使用前两个选项(LangSmith 托管的 ClickHouse 或 ClickHouse Cloud)将在您的 VPC 之外预置 Clickhouse 服务。 但是,这两个选项都支持私有终端节点,这意味着您可以将流量定向到 ClickHouse 服务,而无需将其暴露到公共互联网(例如,通过 AWS PrivateLink 或 GCP 私有服务连接)。
此外,可以将敏感信息配置为不存储在 Clickhouse 中。请联系 support@langchain.dev 了解更多信息。
要求
- 您的 LangSmith 应用程序将可以访问的已配置 ClickHouse 实例(有关选项,请参阅上文)。
- 对 ClickHouse 数据库具有管理员访问权限的用户。此用户将用于创建必要的表、索引和视图。
- 我们支持独立的 ClickHouse 和外部管理的集群部署。对于集群部署,请确保所有节点都运行相同的版本。请注意,捆绑的 ClickHouse 安装不支持集群设置。
- 我们只支持 >= 23.9 的 ClickHouse 版本。使用 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 Configuration 部分设置集群设置,特别是
cluster设置以匹配您的 Clickhouse 集群名称。这将使用Replicatedtable 引擎。 - 如果除了 HA 之外,您还想在 Clickhouse 节点之间进行负载均衡(以分配读取或写入),我们建议使用负载均衡器或 DNS 负载均衡在您的 Clickhouse 服务器之间进行循环。
- 注意: 您需要启用
cluster设置,然后运行 Clickhouse 迁移。这是一项要求,因为需要将表引擎创建为ReplicatedTable engine 与 Non Replicated Engine 类型。
使用clusterenabled,则迁移将创建Replicated表引擎风格。这意味着数据将在集群中的服务器之间复制。
这是一种主-主设置,任何服务器都可以处理读取、写入或合并。
LangSmith 托管的 ClickHouse
- 如果使用 LangSmith 托管的 ClickHouse,则需要在 LangSmith VPC 和 ClickHouse VPC 之间设置 VPC 对等连接。请联系 support@langchain.dev 了解更多信息。
- 您还需要设置 Blob 存储。您可以在 Blob 存储文档中阅读有关 Blob 存储的更多信息。
由 LangSmith 管理的 ClickHouse 安装使用 SharedMerge 引擎,该引擎会自动对它们进行聚类并将计算与存储分离。
参数
您需要为 LangSmith 安装提供几个参数,以配置外部 ClickHouse 数据库。这些参数包括:
- Host:ClickHouse 数据库的主机名或 IP 地址
- HTTP 端口:ClickHouse 数据库侦听 HTTP 连接的端口
- Native Port:ClickHouse 数据库监听 Native 连接的端口
- 数据库:LangSmith 应该使用的 ClickHouse 数据库的名称
- 用户名:用于连接到 ClickHouse 数据库的用户名
- Password:用于连接到 ClickHouse 数据库的密码
- 集群(可选):如果使用外部 Clickhouse 集群,则为 ClickHouse 集群的名称。设置后,LangSmith 将在集群上运行迁移并跨实例复制数据。
群集部署的重要注意事项:
- 必须在新架构上配置群集设置 - 现有的独立 ClickHouse 实例无法转换为群集模式。
- 只有外部管理的 ClickHouse 部署才支持集群。它与捆绑的 ClickHouse 安装不兼容,因为这些安装不包括所需的 ZooKeeper 配置。
- 使用集群部署时,LangSmith 将自动:
- 跨集群中的所有节点运行数据库迁移
- 配置表以跨集群进行数据复制
请注意,当跨节点复制数据时,LangSmith 不会配置分布式表或处理查询路由 - 查询将被定向到指定的主机。如果需要,您需要在基础设施级别处理任何负载均衡或查询分配。
配置
有了这些参数,您就可以将 LangSmith 实例配置为使用预置的 ClickHouse 数据库。您可以通过修改config.yaml文件或.env文件。
- 掌舵
- 码头工人
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 数据库。