BYOC (自带云) for AWS - Beta
概述
BYOC (自带云) 允许您在自己的云基础设施上部署 ClickHouse Cloud。如果您有特定的需求或约束,阻止您使用 ClickHouse Cloud 托管服务,这将非常有用。
BYOC 目前处于 Beta 阶段。如果您想获得访问权限,请联系 支持。 有关更多信息,请参阅我们的 服务条款。
BYOC 目前仅支持 AWS,GCP 和 Microsoft Azure 正在开发中。
BYOC 专为大规模部署而设计。
词汇表
- ClickHouse VPC: 由 ClickHouse Cloud 拥有的 VPC。
- 客户 BYOC VPC: 由客户云账户拥有的 VPC,由 ClickHouse Cloud 预配置和管理,专用于 ClickHouse Cloud BYOC 部署。
- 客户 VPC 由客户云账户拥有的其他 VPC,用于需要连接到客户 BYOC VPC 的应用程序。
架构
指标和日志存储在客户的 BYOC VPC 中。日志目前本地存储在 EBS 中。在未来的更新中,日志将存储在 LogHouse 中,LogHouse 是客户 BYOC VPC 中的 ClickHouse 服务。指标通过 Prometheus 和 Thanos 堆栈实现,这些堆栈本地存储在客户的 BYOC VPC 中。

加入流程
在 Beta 期间,通过联系 ClickHouse 支持 启动加入流程。客户需要拥有专用的 AWS 账户,并知道他们将使用的区域。目前,我们仅允许用户在我们为 ClickHouse Cloud 支持的区域中启动 BYOC 服务。
BYOC 设置通过 CloudFormation 堆栈进行管理。此 CloudFormation 堆栈仅创建一个角色,以允许 ClickHouse Cloud 的 BYOC 控制器设置和管理基础设施。用于运行 ClickHouse 的 S3、VPC 和计算资源不属于 CloudFormation 堆栈的一部分。
升级流程
我们定期升级软件,包括 ClickHouse 数据库版本升级、ClickHouse Operator、EKS 和其他组件。
虽然我们尽力使升级尽可能无缝(例如,滚动升级和重启),但某些升级,例如 ClickHouse 版本更改和 EKS 节点升级,可能仍然会影响服务。在这种情况下,客户可以指定维护窗口(例如,每周二凌晨 1:00 PDT)。我们确保此类升级仅在计划的维护窗口期间执行。
请注意,维护窗口不适用于安全和漏洞修复。这些将作为周期外升级处理,我们将及时与客户沟通,采取必要措施并协调合适的时间进行升级,以最大限度地减少对运营的影响。
CloudFormation IAM 角色
Bootstrap IAM 角色
bootstrap IAM 角色具有以下权限
- 设置 VPC 和 EKS 集群需要 EC2 和 VPC 操作。
- 设置 ClickHouse BYOC 存储桶需要 S3 操作,例如
s3:CreateBucket
。 - 外部 DNS 在 route53 中设置记录需要
route53:*
。 - 控制器创建其他角色需要 IAM 相关操作,例如
iam:CreatePolicy
。有关详细信息,请参阅下一节。 - eks:xx操作仅限于以
clickhouse-cloud
前缀开头的资源。
控制器创建的其他 IAM 角色
除了通过 CloudFormation 创建的 ClickHouseManagementRole
之外,控制器还将创建几个角色。
这些角色旨在由客户 EKS 集群中运行的应用程序承担。
- 状态导出器角色
- ClickHouse 组件,用于将服务健康信息报告回 ClickHouse Cloud。
- 需要写入 ClickHouse Cloud 拥有的 SQS 的权限
- 负载均衡器控制器
- 标准 AWS 负载均衡器控制器
- EBS CSI 控制器,用于管理 ClickHouse 服务所需的卷
- External-dns,将 DNS 配置传播到 route53
- Cert-manager,为 BYOC 服务域配置 TLS 证书
- Cluster autoscaler,相应地扩展节点组
K8s-control-plane 和 k8s-worker 角色旨在由 AWS EKS 服务承担。
最后,data-plane-mgmt 允许 ClickHouse Cloud 控制平面组件协调必要的自定义资源,例如 ClickHouseCluster
和 Istio Virtual Service/Gateway。
网络边界
本节重点介绍进出客户 BYOC VPC 的不同网络流量。
- 入站:进入客户 BYOC VPC 的流量。
- 出站:源自客户 BYOC VPC 并发送到该 VPC 外部目的地的流量
- 公共:可供公共互联网访问的网络端点地址
- 私有:仅可通过私有方式访问的网络端点地址,例如通过 VPC 对等连接、VPC Private Link 和 Tailscale
Istio 入口部署在 AWS NLB 后,以接受 ClickHouse 客户端流量
入站,公共(可以是私有)
Istio 入口网关终止 TLS。证书由 CertManager 使用 Let's Encrypt 预配置,并作为密钥存储在 EKS 集群中。Istio 和 ClickHouse 之间的流量由 AWS 加密,因为它们在同一个 VPC 中。默认情况下,入口对公共互联网可用,并带有 IP 允许列表过滤。客户可以选择设置 VPC 对等连接使其私有并禁用公共连接。我们强烈建议您配置 IP 过滤器 以限制访问。
故障排除访问
ClickHouse Cloud 工程师需要通过 Tailscale 进行故障排除访问。他们将被配置为使用基于证书的即时身份验证来访问 BYOC 部署。
入站,公共(可以是私有)
计费抓取器
出站,私有
计费抓取器从 ClickHouse 收集计费数据,并将其发送到 ClickHouse Cloud 拥有的 S3 存储桶。抓取器是一个组件,充当 ClickHouse 服务器容器旁边的边车。它定期从 ClickHouse 抓取 CPU 和内存指标。对同一区域的请求将通过 VPC 网关服务端点完成。
警报
出站,公共
当客户 ClickHouse 集群不健康时,AlertManager 配置为向 ClickHouse Cloud 发送警报。指标和日志存储在客户的 BYOC VPC 中。日志目前本地存储在 EBS 中。在未来的更新中,日志将存储在 LogHouse 中,LogHouse 是客户 BYOC VPC 中的 ClickHouse 服务。指标通过 Prometheus 和 Thanos 堆栈实现,这些堆栈本地存储在客户的 BYOC VPC 中。
服务状态
出站
状态导出器将 ClickHouse 服务状态信息发送到 ClickHouse Cloud 拥有的 SQS。
功能特性
支持的功能特性
- SharedMergeTree:ClickHouse Cloud 和 BYOC 使用相同的二进制文件和配置
- 用于管理服务状态的控制台访问
- 支持的操作包括启动、停止和终止
- 查看服务和服务状态
- 备份和恢复
- 手动垂直和水平扩展
- 通过 Falco (falco-metrics) 进行运行时安全监控和警报
- 通过 Tailscale 实现零信任网络
- 监控:云控制台配备内置的健康状况仪表板,允许用户监控服务健康状况
- Prometheus 抓取,供选择使用集中式仪表板进行监控的用户使用。我们今天支持 Prometheus、Grafana 和 Datadog。有关设置的详细说明,请参阅 Prometheus 文档
- VPC 对等连接
- 在 此页面 列出的集成
- 安全 S3
- AWS PrivateLink
计划中的功能特性(目前不支持)
- AWS KMS 又名 CMEK(客户管理的加密密钥)
- 用于摄取的 ClickPipes
- 自动伸缩
- 空闲
- MySQL 接口
常见问题解答
计算
**我可以在这个单一的 EKS 集群中创建多个服务吗?**
可以。基础设施只需要为每个 AWS 账户和区域组合配置一次。
BYOC 支持哪些区域?
BYOC 支持与 ClickHouse Cloud 相同的 区域 集。
是否会有一些资源开销?运行 ClickHouse 实例以外的服务需要哪些资源?
除了 Clickhouse 实例(ClickHouse 服务器和 ClickHouse Keeper)之外,我们还运行诸如 clickhouse-operator、aws-cluster-autoscaler、Istio 等服务以及我们的监控堆栈。
目前,我们在专用节点组中有 3 个 m5.xlarge 节点(每个可用区一个)来运行这些工作负载。
网络和安全
安装完成后,我们可以撤销安装期间设置的权限吗?
目前不可能。
您是否考虑过未来 ClickHouse 工程师访问客户基础设施进行故障排除的安全控制措施?
是的。实施客户控制的机制(客户可以批准工程师访问集群)已在我们的路线图上。目前,工程师必须经过我们的内部升级流程才能获得对集群的即时访问权限。这由我们的安全团队记录和审计。
如何设置 VPC 对等连接?
VPC 对等连接的创建和删除可以通过支持升级来完成。前提条件是我们需要在对等 VPC 之间具有不重叠的 CIDR 范围。
一旦 ClickHouse 支持完成 VPC 对等连接配置,用户需要完成几个操作。
-
您将在对等 VPC 的 AWS 账户中收到 VPC 对等连接请求,并且需要接受该请求。请导航到 VPC -> 对等连接 -> 操作 -> 接受请求。
-
调整对等 VPC 的路由表。在需要连接到 ClickHouse 实例的对等 VPC 中找到子网。编辑子网的路由表,添加一个路由,配置如下
- 目标:ClickHouse BYOC VPC CIDR(例如 10.0.0.0/16)
- 目标:对等连接,pcx-12345678(实际 ID 将在下拉列表中弹出)

- 检查现有的安全组,并确保没有规则阻止访问 BYOC VPC。
现在应该可以从对等 VPC 访问 ClickHouse 服务了。
要私有地访问 ClickHouse 服务,将为用户配置一个私有负载均衡器和端点,以便用户从用户的对等 VPC 私有地连接。端点类似于公共端点,带有 -private
后缀。例如,如果公共端点是 h5ju65kv87.mhp0y4dmph.us-west-2.aws.byoc.clickhouse.cloud
,则私有端点将是 h5ju65kv87-private.mhp0y4dmph.us-west-2.aws.byoc.clickhouse.cloud
。
我可以选择为 EKS 集群创建的 VPC IP 范围吗?
您可以选择 VPC CIDR 范围,因为这会影响 VPC 对等连接功能。请在加入支持票证时提及这一点。
创建的 VPC IP 范围的大小是多少?
我们建议至少保留 /22 以用于潜在的未来扩展,但如果您希望限制大小,如果您的服务器 Pod 可能限制为 30 个,则可以使用 /23。
我可以决定维护频率吗?
请联系支持部门以安排维护窗口。请预计至少每两周更新一次。
可观测性
内置监控工具
可观测性仪表板
ClickHouse Cloud 包括一个高级可观测性仪表板,该仪表板显示内存使用率、查询速率和 I/O 等指标。可以在 ClickHouse Cloud Web 控制台界面的 监控 部分访问此仪表板。

高级仪表板
您可以使用来自系统表(如 system.metrics
、system.events
和 system.asynchronous_metrics
等)的指标自定义仪表板,以详细监控服务器性能和资源利用率。

Prometheus 集成
ClickHouse Cloud 提供了一个 Prometheus 端点,您可以使用该端点抓取指标进行监控。这允许与 Grafana 和 Datadog 等工具集成以进行可视化。
通过 https 端点 /metrics_all 的示例请求
curl --user <username>:<password> https://i6ro4qarho.mhp0y4dmph.us-west-2.aws.byoc.clickhouse.cloud:8443/metrics_all
示例响应
# HELP ClickHouse_CustomMetric_StorageSystemTablesS3DiskBytes The amount of bytes stored on disk `s3disk` in system database
# TYPE ClickHouse_CustomMetric_StorageSystemTablesS3DiskBytes gauge
ClickHouse_CustomMetric_StorageSystemTablesS3DiskBytes{hostname="c-jet-ax-16-server-43d5baj-0"} 62660929
# HELP ClickHouse_CustomMetric_NumberOfBrokenDetachedParts The number of broken detached parts
# TYPE ClickHouse_CustomMetric_NumberOfBrokenDetachedParts gauge
ClickHouse_CustomMetric_NumberOfBrokenDetachedParts{hostname="c-jet-ax-16-server-43d5baj-0"} 0
# HELP ClickHouse_CustomMetric_LostPartCount The age of the oldest mutation (in seconds)
# TYPE ClickHouse_CustomMetric_LostPartCount gauge
ClickHouse_CustomMetric_LostPartCount{hostname="c-jet-ax-16-server-43d5baj-0"} 0
# HELP ClickHouse_CustomMetric_NumberOfWarnings The number of warnings issued by the server. It usually indicates about possible misconfiguration
# TYPE ClickHouse_CustomMetric_NumberOfWarnings gauge
ClickHouse_CustomMetric_NumberOfWarnings{hostname="c-jet-ax-16-server-43d5baj-0"} 2
# HELP ClickHouseErrorMetric_FILE_DOESNT_EXIST FILE_DOESNT_EXIST
# TYPE ClickHouseErrorMetric_FILE_DOESNT_EXIST counter
ClickHouseErrorMetric_FILE_DOESNT_EXIST{hostname="c-jet-ax-16-server-43d5baj-0",table="system.errors"} 1
# HELP ClickHouseErrorMetric_UNKNOWN_ACCESS_TYPE UNKNOWN_ACCESS_TYPE
# TYPE ClickHouseErrorMetric_UNKNOWN_ACCESS_TYPE counter
ClickHouseErrorMetric_UNKNOWN_ACCESS_TYPE{hostname="c-jet-ax-16-server-43d5baj-0",table="system.errors"} 8
# HELP ClickHouse_CustomMetric_TotalNumberOfErrors The total number of errors on server since the last restart
# TYPE ClickHouse_CustomMetric_TotalNumberOfErrors gauge
ClickHouse_CustomMetric_TotalNumberOfErrors{hostname="c-jet-ax-16-server-43d5baj-0"} 9
身份验证
ClickHouse 用户名和密码对可用于身份验证。我们建议创建一个具有最低权限的专用用户来抓取指标。最低限度,需要对跨副本的 system.custom_metrics
表具有 READ
权限。例如
GRANT REMOTE ON *.* TO scraping_user
GRANT SELECT ON system.custom_metrics TO scraping_user
配置 Prometheus
下面显示了一个示例配置。targets
端点与用于访问 ClickHouse 服务的端点相同。
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "clickhouse"
static_configs:
- targets: ["<subdomain1>.<subdomain2>.aws.byoc.clickhouse.cloud:8443"]
scheme: https
metrics_path: "/metrics_all"
basic_auth:
username: <KEY_ID>
password: <KEY_SECRET>
honor_labels: true
另请参阅 这篇博客文章 和 ClickHouse 的 Prometheus 设置文档。