集群扩展
本文将介绍如何为部署在 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 actors 和 Fragments