跳到主要内容
版本:0.2.x

配置计算组

文档类型:教程型

文档格式:教程目的,前置准备,分步骤讲解原理 & 示例,相关文档推荐;

计算组、Worker 和 Server 的关系

资源管理器 章节我们介绍了计算组(Virtual Warehouse, 简称 VW)、计算组副本(Worker Group, 简称 WG)和计算节点等概念。一个 ByConity 集群中,计算资源被划分为多个计算组,每个计算组包含多个配置相同的计算组副本,每个计算组副本则包含多个计算节点。可以在不同级别对资源进行自由的扩缩容,实现弹性计算。以扩容为例,我们可以有不同的扩容方式:

  • 对 Worker 的 CPU、MEM 资源进行纵向扩容,以提升单节点的处理性能。
  • 增加一个计算组副本内 Worker 的数量,以提升计算组副本处理查询时的性能。
  • 增加计算组内计算组副本的数量,以提升计算组处理查询的并发能力。
  • 为新的业务或租户增加新的计算组资源,实现租户间资源隔离。

服务节点,我们也称为 server,主要承担 sql 接收,调度,和结果回传的作用。计算节点,我们也称为 worker,主要承担的是计算任务,这些任务可以是数据写入、用户查询,也可以是一些后台任务。用户查询和后台任务,可以共享相同的计算节点以提高利用率,也可以使用独立的计算节点以保证严格的资源隔离。用户可以根据计算任务的特性、优先级和业务类别不同,构建多个计算组,并设置不同的资源弹性策略,提高计算效率降低成本。

查看计算组信息

我们提供一组系统表可以查询计算组相关元信息,这些系统表只提供可观测的能力,不能通过修改表内容来更改计算组信息。如需修改计算组配置,请参考[修改计算组配置](todo:link)。

system.virtual_warehouses

该系统表展示所有计算组(VW)的元信息,主要字段及说明:

字段名含义
name该 virtual warehouse 的名称,唯一标识。
type该 virtual warehouse 的类型,Default/Write。
num_workers该 virtual warehouse 为每个 worker group 配置的 worker 数量
active_worker_groups该 virtual warehouse 中正在运行的计算组副本(worker group)数量
active_workers该 virtual warehouse 中正在健康运行的 worker 数量
min_worker_groups该 virtual warehouse 允许运行的最小计算组数量
max_worker_groups该 virtual warehouse 允许运行的最大计算组数量
max_concurrent_queries该 virtual warehouse 允许的最大查询并发数量
max_queued_queries该 virtual warehouse 允许的最大排队查询数量
max_queued_waiting_ms该 virtual warehouse 允许的排队查询最大等待时长(毫秒)

system.worker_groups

该系统表展示所有计算组副本(WG)的元信息,主要字段及说明:

字段名右对齐
vw_name该 worker group 所属的 virtual warehouse 的名称
id该 worker group 的 id,唯一标识
num_workers该 virtual warehouse 为每个 worker group 配置的 worker 数量
linked_id如果该 worker group 是一个 Shared 类型,则 linked_id 指向其引用的 Physical worker group
active_workers该 worker group 中正在健康运行的 worker 数量
min_cpu_usage该 worker group 中最小的 worker 的 cpu_usage
max_cpu_usage该 worker group 中最大的 worker 的 cpu_usage
avg_cpu_usage该 worker group 所有 worker 的 cpu_usage 均值
min_mem_usage该 worker group 中最小的 worker 的 memory_usage
max_mem_usage该 worker group 中最大的 worker 的 memory_usage
avg_mem_usage该 worker group 所有 worker 的 memory_usage 均值

system.workers

该系统表记录所有运行中的 worker 信息,主要字段及说明:

字段名含义
worker_idworker 的 id,唯一标识
vw_nameworker 所属的 virtual warehouse
worker_group_idworker 所属的 worker group
hostworker 的 host (ip)
tcp_portworker 的 tcp_port
cpu_usage当前的 cpu_usage
memory_usage当前的 memory_usage
memory_available当前可用的 memory 量(字节)
last_update_time最近的心跳更新时间

创建及使用计算组

我们提供本地模式和集群模式两种不同的配置方式来创建计算组。

本地模式可以直接在配置文件中填写计算组和计算组副本相关信息,便于调试或 demo 运行。

集群模式则是生产环境下推荐的使用方式,此时我们需要通过特定的 SQL 来创建计算组,并通过对应的 K8s 操作创建实际的计算组资源。

本地模式

在启动 resource manager 组件时,我们可以在配置文件(参考集群配置参数 Resource Manager 部分)中填写计算组相关信息。Resource Manager 会直接根据这些信息创建对应的计算组(以及计算组副本)。示例:

<vws>
<vw>
<name>vw_default</name>
<type>Default</type>
<num_workers>1</num_workers>
<worker_groups>
<worker_group>
<name>wg_default</name>
<type>Physical</type>
</worker_group>
</worker_groups>
</vw>
</vws>

我们配置了一个名为 vw_default 的计算组,类型为 Default,并且预期该 vw 中有 1 个 worker(num_workers 仅作为创建 vw 的一个指示信息,运行时实际 worker 数量可以查询相关系统表[查看计算组信息]获得)。同时,我们为该计算组配置了 1 个副本,名为 wg_default。

在启动 server 组件时,我们可以在配置文件中(参考集群配置参数 Server 部分)服务发现部分直接配置每个 VW 对应的 Worker 信息。

<service_discovery>
<mode>local</mode>
<vw>
<psm>data.cnch.vw_default</psm>
<node>
<vw_name>vw_default</vw_name>
<host>10.1.2.3</host>
<hostname>vw_default0</hostname>
<ports>
<!-- TCP/Primary -->
<port><name>PORT0</name><value>31067</value></port>
<!-- RPC -->
<port><name>PORT1</name><value>32099</value></port>
<!-- HTTP -->
<port><name>PORT2</name><value>35166</value></port>
<!-- Exchange -->
<port><name>PORT5</name><value>39481</value></port>
<!-- Exchange status -->
<port><name>PORT6</name><value>39482</value></port>
</ports>
</node>
</vw>
</service_discovery>

在该示例中,server 做服务发现时,会找到计算组 vw_default 有一个 ip 为 10.1.2.3 的 worker。

集群模式

我们可以在 ByConity 集群运行时,创建新的计算组。

创建计算组

CREATE WAREHOUSE
IF NOT EXISTS `vw_default`
SETTINGS num_workers = 1, type = 'Default',
auto_suspend = 3600, auto_resume = 1,
min_worker_groups = 0, max_worker_groups = 1, max_concurrent_queries=200;

CREATE WAREHOUSE IF NOT EXISTS $VW_NAME SETTINGS ... 这个SQL用于创建计算组。$VW_NAME 为该计算组的唯一标识。创建计算组时,settings 中 num_workers 和 type 为必填项,其他配置可参考[查看计算组信息]小节。

创建计算组副本

CREATE WORKER GROUP
IF NOT EXISTS `wg_default` in `vw_default`
SETTINGS type = 'Physical';

CREATE WORKER GROUP IF NOT EXISTS $WG_NAMESETTINGS ...这个SQL用于创建计算组副本。$WG_NAME 为该计算组副本的唯一标识。

创建 K8s Worker Pods

ByConity 创建计算组和计算组副本的元信息后,则可以创建对应的 K8s Worker 资源,为 worker 配置对应的环境变量 VIRTUAL_WAREHOUSE_ID=$VW_NAME, WORKER_GROUP_ID=$WG_NAME。

Worker 启动后即可自动注册到对应的 virtual warehouse 和 worker group 中。具体操作见:https://github.com/ByConity/byconity-deploy

修改计算组

除了计算组信息的查看和创建,我们还可以在运行时修改计算组相关的元信息。

DROP WAREHOUSE IF EXISTS `vw_default`;
DROP WORKER GROUP IF EXISTS `wg_default`;

上述 DROP 语句将删除指定的计算组和计算组副本。

注意:当 ByConity 元信息中找不到 worker pod 指定的 virtual warehouse 时,resource manager 将拒绝该 worker 的注册,因此该 worker 也无法被用于处理查询。

ALTER WAREHOUSE `vw_default`
SETTINGS auto_suspend = 3600, auto_resume = 0,
min_worker_groups = 0, max_worker_groups = 0, max_concurrent_queries=50;

上述 ALTER 语句可以修改计算组的配置,修改后,计算组内所有的计算组副本都将使用新的配置。

注意:我们无法通过 ALTER WORKER GROUP ... 来修改计算组副本的配置。计算组副本的所有配置都继承自所属计算组的配置,因此不存在这样的语法。