Skip to main content

集群扩展

本文将介绍如何为部署在 Kubernetes 的 RisingWave 集群增加或减少节点,并自定义现有节点的资源。

您可以根据工作负载的变化调整 RisingWave 的计算资源。默认情况下,RisingWave 使用每个节点上的所有 CPU 内核。如果向集群添加新节点或 CPU,您可以配置 RisingWave 以利用额外的计算能力。同样,如果可用的计算资源减少,您可以调整 RisingWave 中的并行度以优化资源利用。

目前,扩展需要手动完成,不过自动扩展功能正在研发中,以方便简化流程。

配置会话并行度

RisingWave 将其计算分布在名为streaming actors的轻量级线程上,这些线程在 CPU 内核上同时运行。

通过将这些streaming actors分布在内核上,RisingWave 实现了并行计算,从而提高了性能、可伸缩性和吞吐量。

通过调整以下命令中的会话变量,可以配置当前会话中物化视图、索引、sink 以及表格的streaming actors的并行度:

SET STREAMING_PARALLELISM={num}

默认情况下,STREAMING_PARALLELISM设置为 0,这意味着 RisingWave 会利用所有可用的 CPU 内核。

运行以下命令以获取当前配置的并行度:

dev=> SHOW STREAMING_PARALLELISM;
streaming_parallelism
-----------------------
0
(1 row)

STREAMING_PARALLELISM 的值仅适用于当前会话中创建的流。

请注意,将STREAMING_PARALLELISM 设置为某个值,比如设为 4,并不会在 4 个线程中并行所有片段。这是因为并非所有 SQL 操作符都可以分布在 CPU 内核上。

扩展

以下内容建立在已使用 Helm 在 Kubernetes 上部署了 RisingWave 的前提上。

扩展命令将通过risingwave ctl发出,RisingWave 的最新版本包含了此命令行工具。

请在 Meta 节点 Pod 中运行此命令,以避免连接问题。

kubectl exec -it my-risingwave-meta-0 -- bash -c 'cd /risingwave/bin && bash'

请记得将环境变量 RW_META_ADDR 设置为 Meta 节点的地址。若已登录到 Meta 节点 Pod,地址是 http://127.0.0.1:5690

export RW_META_ADDR=http://127.0.0.1:5690

添加或删除节点

要扩展集群(添加节点)以达到最大并行度,请运行以下命令:

/risingwave/bin/risingwave ctl scale horizon --include-workers all

运行上述命令前需要更新 Kubernetes 集群的配置文件(例如,Helm 图表的values.yml)。

要删除特定 Compute 节点,请运行以下命令:

/risingwave/bin/risingwave ctl scale horizon --exclude-workers {hostname of the compute node}

可以使用以下命令查找工作节点 ID:

dev=> select * from rw_worker_nodes;
id | host | port | type | state | parallelism | is_streaming | is_serving | is_unschedulable
----+--------------------------------------------------------------------+------+--------------+---------+-------------+--------------+------------+------------------
1 | my-risingwave-compute-0.my-risingwave-compute-headless.default.svc | 5688 | COMPUTE_NODE | RUNNING | 8 | t | t | f
(1 row)

调整工作节点的并行度(垂直扩展)

使用 vertical命令以调整特定工作节点的并行度。增加工作节点的并行度意味着为其分配更多的计算资源。

例如,运行以下命令将my-risingwave-compute-0的并行度降低到 1:

/risingwave/bin/risingwave ctl scale vertical --workers http://my-risingwave-compute-0 \
--target-parallelism-per-worker 1

检查物化视图的并行度

要查看扩展操作是否按预期运行,使用以下命令检查每个物化视图片段的运行并行度:

WITH all_objects AS (
SELECT id, name FROM rw_tables
UNION ALL
SELECT id, name FROM rw_materialized_views
UNION ALL
SELECT id, name FROM rw_sinks
UNION ALL
SELECT id, name FROM rw_indexes
),
fragment_parallelism AS (
SELECT
f.fragment_id,
COUNT(a.actor_id) AS parallelism
FROM rw_actors a
INNER JOIN rw_fragments f ON a.fragment_id = f.fragment_id
GROUP BY f.fragment_id
)
SELECT
f.*,
fp.parallelism
FROM all_objects ao
INNER JOIN rw_fragments f ON ao.id = f.table_id
INNER JOIN fragment_parallelism fp ON f.fragment_id = fp.fragment_id
ORDER BY ao.name;

为更好地理解查询的输出结果,您可以了解以下两个概念:Streaming actorsFragments