仓库 (Warehouses)
什么是计算-计算分离?
计算-计算分离适用于 Scale 和 Enterprise 级别。
每个 ClickHouse Cloud 服务包括
- 需要一个包含两个或多个 ClickHouse 节点(或副本)的组,但子服务可以是单副本。
- 一个端点(或通过 ClickHouse Cloud UI 控制台创建的多个端点),这是一个服务 URL,您用于连接到该服务(例如,
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443)。 - 一个对象存储文件夹,服务将所有数据和部分元数据存储在其中
与单个父服务不同,子单服务可以垂直扩展。
图 1 - ClickHouse Cloud 中的当前服务
计算-计算分离允许您创建多个计算节点组,每个组都有自己的端点,它们使用相同的对象存储文件夹,因此具有相同的表、视图等。
每个计算节点组将拥有自己的端点,因此您可以选择使用哪一组副本来处理您的工作负载。您的一些工作负载可能只需要一个小型副本就能满足,而另一些工作负载可能需要完全的高可用性 (HA) 和数百 GB 的内存。计算-计算分离还允许您将读取操作与写入操作分离,以避免它们相互干扰
图 2 - ClickHouse Cloud 中的计算分离
您可以创建与现有服务共享相同数据的额外服务,或者创建一个全新的设置,其中多个服务共享相同的数据。
什么是仓库?
在 ClickHouse Cloud 中,仓库是一组共享相同数据的服务。每个仓库都有一个主服务(这是首先创建的服务)和一个或多个辅助服务。例如,在下面的截图中,您可以看到一个名为“DWH Prod”的仓库,其中包含两个服务
- 主服务
DWH Prod - 辅助服务
DWH Prod Subservice
图 3 - 仓库示例
仓库中的所有服务共享相同的
- 区域(例如,us-east1)
- 云服务提供商(AWS、GCP 或 Azure)
- ClickHouse 数据库版本
您可以按服务所属的仓库对服务进行排序。
访问控制
数据库凭证
由于仓库中的所有服务共享相同的表集,因此它们也共享对这些其他服务的访问控制。这意味着在服务 1 中创建的所有数据库用户也将能够使用服务 2,并具有相同的权限(表、视图等的授权)。您将为每个服务使用另一个端点,但将使用相同的用户名和密码。换句话说,用户在共享相同存储的服务之间共享:
图 4 - 用户 Alice 在服务 1 中创建,但她可以使用相同的凭证访问共享相同数据的任何服务
网络访问控制
通常,限制其他应用程序或临时用户使用特定服务是有用的。这可以通过使用网络限制来完成,类似于当前为常规服务配置的方式(导航到 ClickHouse Cloud 控制台中特定服务的服务选项卡中的 设置)。
您可以为每个服务单独应用 IP 过滤设置,这意味着您可以控制哪些应用程序可以访问哪个服务。这允许您限制用户使用特定服务
图 5 - 由于网络设置,Alice 被限制访问服务 2
读取与读写
有时,限制对特定服务的写入访问并仅允许仓库中部分服务进行写入是有用的。这可以在创建第二个和第 n 个服务时完成(第一个服务应始终为读写)。
图 6 - 仓库中的读写和只读服务
- 只读服务当前允许用户管理操作(创建、删除等)。此行为将来可能会更改。
- 可刷新物化视图仅在仓库中的读写 (RW) 服务上运行。它们不会在只读 (RO) 服务上执行。
扩展
仓库中的每个服务都可以根据您的工作负载进行调整,包括
- 节点(副本)数量。仓库中的主服务(仓库中首先创建的服务)应具有 2 个或更多节点。每个辅助服务可以具有 1 个或更多节点。
- 节点(副本)大小
- 服务是否应自动扩展
- 如果服务应在不活动时处于空闲状态(不能应用于组中的第一个服务 - 请参阅 限制 部分)
行为变化
一旦为服务启用了计算-计算分离(创建了至少一个辅助服务),则使用 default 集群名称的 clusterAllReplicas() 函数调用将仅使用调用该函数的服务的副本。这意味着,如果两个服务连接到相同的数据集,并且从服务 1 调用 clusterAllReplicas(default, system, processes),则只会显示在服务 1 上运行的进程。如果需要,您可以调用 clusterAllReplicas('all_groups.default', system, processes) 等来访问所有副本。
限制
-
主服务应始终处于运行状态,并且不应处于空闲状态(限制将在 GA 后一段时间内删除)。 在私有预览和 GA 后一段时间内,主服务(通常是您想要通过添加其他服务来扩展的现有服务)将始终处于运行状态,并且将禁用空闲设置。如果至少有一个辅助服务,您将无法停止或使主服务处于空闲状态。删除所有辅助服务后,您可以再次停止或使原始服务处于空闲状态。
-
有时无法隔离工作负载。 虽然目标是为您提供隔离数据库工作负载的选项,但可能会出现一些极端情况,即一个服务中的工作负载会影响共享相同数据的另一个服务。这些情况非常罕见,主要与 OLTP 类似的工作负载有关。
-
所有读写服务都在执行后台合并操作。 将数据插入 ClickHouse 时,数据库首先将数据插入到一些暂存分区,然后执行后台合并。这些合并会消耗内存和 CPU 资源。当两个读写服务共享相同的存储时,它们都在执行后台操作。这意味着可能会出现以下情况:服务 1 中有一个
INSERT查询,但合并操作由服务 2 完成。请注意,只读服务不执行后台合并,因此它们不会将资源花在该操作上。 -
所有读写服务都在执行 S3Queue 表引擎插入操作。 在 RW 服务上创建 S3Queue 表时,WH 中的所有其他 RW 服务可能会执行从 S3 读取数据并将其写入数据库的操作。
-
一个读写服务中的插入可能会阻止另一个读写服务在启用空闲状态时进入空闲状态。 结果是,第二个服务为第一个服务执行后台合并操作。这些后台操作可能会阻止第二个服务在进入空闲状态。完成后台操作后,该服务将进入空闲状态。只读服务不受影响,并且将立即进入空闲状态。
-
CREATE/RENAME/DROP DATABASE 查询默认情况下可能会被处于空闲/停止状态的服务阻止。 这些查询可能会挂起。要绕过此限制,您可以在会话级别或每个查询级别运行数据库管理查询,并设置
settings distributed_ddl_task_timeout=0。例如
- 当前每个仓库的服务数量有限制为 5 个。 如果您需要在单个仓库中拥有超过 5 个服务,请联系支持团队。
定价
仓库中所有服务(主服务和辅助服务)的计算价格相同。存储仅计费一次 - 它包含在第一个(原始)服务中。
请参阅 定价 页面上的定价计算器,它将帮助您根据工作负载大小和级别选择估算成本。
备份
- 由于仓库中的所有服务共享相同的存储,因此备份仅在主服务(初始服务)上进行。通过这种方式,仓库中所有服务的备份数据。
- 如果您从仓库的主服务的备份中恢复数据,它将被恢复到完全新的服务,该服务未连接到现有的仓库。完成恢复后,您可以立即向新服务添加更多服务。
使用仓库
创建仓库
要创建仓库,您需要创建一个与现有服务共享数据的第二个服务。这可以通过单击任何现有服务的加号来完成
图 7 - 单击加号以在仓库中创建新服务
在服务创建屏幕上,原始服务将在下拉列表中被选中作为新服务的数据源。创建后,这两个服务将形成一个仓库。
重命名仓库
有两种方法可以重命名仓库
- 您可以在服务页面的右上角选择“按仓库排序”,然后点击仓库名称旁边的铅笔图标
- 您可以点击任何服务的仓库名称来重命名该仓库
删除仓库
删除仓库意味着删除所有计算服务和数据(表、视图、用户等)。此操作无法撤销。您只能通过删除首先创建的服务来删除仓库。为此
- 删除除了首先创建的服务之外的所有服务;
- 删除第一个服务(警告:此步骤将删除仓库的所有数据)。