自动扩展
扩展是指调整可用资源以满足客户需求的能力。服务可以通过调用 API 以编程方式进行手动扩展,或者更改 UI 上的设置以调整系统资源。或者,服务可以**自动扩展**以满足应用程序需求。
扩展仅适用于**生产**层服务。**开发**层服务不支持扩展。您可以将服务从**开发**层升级到**生产**层以进行扩展。升级**开发**服务后,无法降级。
ClickHouse 云中的扩展工作原理
**生产**服务可以垂直扩展(切换到更大的副本),也可以水平扩展(添加相同大小的副本)。默认情况下,ClickHouse 云**生产**服务在 3 个不同的可用区运行 3 个副本。垂直扩展通常有助于需要大量内存才能进行长时间运行的插入/读取的查询,而水平扩展可以帮助并行化以支持并发查询。
目前,ClickHouse 云仅垂直扩展服务。要水平扩展服务(目前处于私人预览阶段),您需要使用 ClickHouse 云控制台或云 API。要启用服务的水平扩展,请联系 [email protected] 并查看部分 自助服务水平扩展。
垂直自动扩展
**生产**服务根据 CPU 和内存使用情况进行自动扩展。我们持续监控服务在回溯窗口(跨越过去 30 小时)内的历史使用情况以做出扩展决策。如果使用率上升到或下降到特定阈值以上或以下,我们将适当扩展服务以满足需求。
基于 CPU 的自动扩展在 CPU 使用率超过 50-75% 范围内的上限时启动(实际阈值取决于集群的大小)。此时,分配给集群的 CPU 将翻倍。如果 CPU 使用率降至上限的一半以下(例如,上限为 50% 时为 25%),则 CPU 分配将减半。
基于内存的自动扩展将集群扩展到最大内存使用量的 125%,如果遇到 OOM(内存不足错误),则扩展到 150%。
选择 CPU 或内存建议的**较大**值,并且分配给服务的 CPU 和内存以1
个 CPU 和4 GiB
内存的锁定步长递增进行扩展。
注意:在当前实现中,垂直自动扩展在内存和 CPU 需求缓慢增长的情况下运行良好,并且倾向于保守。我们正在努力改进它以使其更加动态,以便我们能够更好地处理工作负载突发,对扩展使用更积极的 CPU/内存阈值,以及使用适当的回溯窗口以在两个方向上做出垂直扩展决策。
配置垂直自动扩展
具有**管理员**角色的组织成员可以调整 ClickHouse 云生产服务的扩展。要配置垂直自动扩展,请转到服务详细信息页面的**设置**选项卡,并调整最小和最大内存以及 CPU 设置,如下所示。
将副本的**最大内存**设置为高于**最小内存**的值。然后,服务将在这些范围内根据需要进行扩展。这些设置在初始服务创建流程中也可用。服务中的每个副本将分配相同的内存和 CPU 资源。
您也可以选择将这些值设置为相同,从而实质上将服务固定到特定配置。这样做会立即强制扩展到您选择的所需大小。重要的是要注意,这将禁用集群上的任何自动扩展,并且您的服务不会受到超出这些设置的 CPU 或内存使用量增加的保护。
自助服务水平扩展
ClickHouse 云水平扩展处于**私人预览**阶段。在服务上启用水平扩展后,您可以使用 ClickHouse 云 公共 API 通过更新服务的扩展设置来扩展服务。
- 如果服务上尚未启用该功能,则请求将被拒绝,并显示错误
BAD_REQUEST: Adjusting number of replicas is not enabled for your instance".
如果您看到此错误,并且您认为您的服务已经启用了扩展,请联系 ClickHouse 云支持。 - **生产**ClickHouse 服务至少需要
3
个副本。目前,**生产**服务可以扩展到的最大副本数为20
。这些限制将在将来逐渐提高。如果您目前需要更高的限制,请联系 ClickHouse 云支持团队。 - 目前,在缩减操作期间删除的副本的系统表数据不会被保留。这可能会影响可能利用系统表数据的任何仪表板或其他功能。
通过 API 进行水平扩展
要水平扩展集群,请通过 API 发出PATCH
请求以调整副本数量。以下屏幕截图显示了一个将3
副本集群扩展到6
个副本的 API 调用,以及相应的响应。
PATCH
请求以更新numReplicas
来自PATCH
请求的响应
如果您在某个请求正在进行时发出新的扩展请求或多个连续的请求,则扩展服务将忽略中间状态,并收敛到最终副本数量。
通过 UI 进行水平扩展
要从 UI 水平扩展服务,您可以在**设置**页面上调整服务的节点数量。
来自 ClickHouse 云控制台的服务扩展设置
服务扩展后,云控制台中的指标仪表板应显示服务正确的分配。以下屏幕截图显示集群已扩展到总内存96 GiB
,即6
个副本,每个副本具有 GiB 内存分配。
自动空闲
在**设置**页面上,您还可以选择是否允许服务在不活动时自动空闲,如上图所示(即服务未执行任何用户提交的查询)。自动空闲可降低服务成本,因为服务暂停时不会对计算资源计费。
仅当您的用例能够处理响应查询之前的延迟时,才使用自动空闲,因为当服务暂停时,与服务的连接将超时。自动空闲非常适合不常使用且可以容忍延迟的服务。不建议用于为经常使用的面向客户的功能提供支持的服务。
处理突发工作负载
如果您即将迎来预期的工作负载激增,您可以使用 ClickHouse 云 API 预先扩展服务以处理激增,并在需求消退后将其缩减。要了解每个副本当前使用的 CPU 内核和内存,您可以运行以下查询
SELECT *
FROM clusterAllReplicas('default', view(
SELECT
hostname() AS server,
anyIf(value, metric = 'CGroupMaxCPU') AS cpu_cores,
formatReadableSize(anyIf(value, metric = 'CGroupMemoryTotal')) AS memory
FROM system.asynchronous_metrics
))
ORDER BY server ASC
SETTINGS skip_unavailable_shards = 1