StarRocks:存算一体模式部署

目录

[一、StarRocks 简介](#一、StarRocks 简介)

[二、StarRocks 架构](#二、StarRocks 架构)

[2.1 存算一体](#2.1 存算一体)

[2.2 存算分离](#2.2 存算分离)

三、前期准备

3.1前提条件

[3.2 集群规划](#3.2 集群规划)

[3.3 配置环境](#3.3 配置环境)

[3.4 准备部署文件](#3.4 准备部署文件)

四、手动部署

[4.1 部署FE节点](#4.1 部署FE节点)

[4.2 部署BE节点](#4.2 部署BE节点)

[4.3 部署CN节点(可选)](#4.3 部署CN节点(可选))

[4.4 FE高可用](#4.4 FE高可用)

[4.5 故障排除](#4.5 故障排除)

五、集群管理

[5.1 启动集群](#5.1 启动集群)

[5.2 停止集群](#5.2 停止集群)


一、StarRocks 简介

StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,支持标准 SQL,用户可以轻松地通过 MySQL 客户端连接到 StarRocks 实时查询分析数据。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。

二、StarRocks 架构

StarRocks 架构简洁明了,整个系统仅由两种组件组成:前端和后端。前端节点称为 FE 。后端节点有两种类型,BECN (计算节点)。当使用本地存储数据时,您需要部署 BE;当数据存储在对象存储或 HDFS 时,需要部署 CN。StarRocks 不依赖任何外部组件,简化了部署和维护。节点可以水平扩展而不影响服务正常运行。此外,StarRocks 具有元数据和服务数据副本机制,提高了数据可靠性,有效防止单点故障 (SPOF)。

2.1 存算一体

作为典型的大规模并行处理 (MPP) 数据库,StarRocks 支持存算一体架构。在存算一体架构中,FE 负责元数据管理和构建执行计划;BE 执行查询计划并存储数据。将数据存储在 BE 中使得数据可以在当前节点中计算,避免了数据传输和复制,从而提供极快的查询和分析性能。该架构支持多副本数据存储,增强了集群处理高并发查询的能力并确保数据可靠性,非常适合追求最佳查询性能的场景。

  • FE​

FE 负责元数据管理、客户端连接管理、查询规划和查询调度。每个 FE 在其内存中存储和维护一份完整的元数据副本,保证 FE 之间服务的一致性。FE 分为 Leader FE 节点、Follower 节点和 Observer 节点。Follower 节点可以根据类似 Paxos 的 BDB JE(Berkeley DB Java Edition)协议选举主节点。

  • BE

BE 负责数据存储和 SQL 执行。

**1)数据存储:**BE 具有等效的数据存储能力。FE 根据预定义规则将数据分发到各个 BE。BE 转换导入的数据,将数据写入所需格式,并为数据生成索引。

**2)SQL 执行:**FE 根据查询的语义将每个 SQL 查询解析为逻辑执行计划,然后将逻辑计划转换为可以在 BE 上执行的物理执行计划。BE 在本地存储数据以及执行查询,避免了数据传输和复制,极大地提高了查询性能。

2.2 存算分离

在存算分离架构中,BE 被"计算节点 (CN)"取代,后者仅负责数据计算任务和缓存热数据。数据存储在低成本且可靠的远端存储系统中,如 Amazon S3、GCP、Azure Blob Storage、MinIO 等。当缓存命中时,查询性能可与存算一体架构相媲美。CN 节点可以根据需要在几秒钟内添加或删除。这种架构降低了存储成本,确保更好的资源隔离,并具有高度的弹性和可扩展性。

存算分离架构与存算一体架构一样简单。它仅由两种类型的节点组成:FE 和 CN。唯一的区别是用户必须配置后端对象存储。

  • 节点

在存算分离架构中,FE 提供的功能与存算一体架构中的相同。

BE 被 CN (计算节点) 取代,存储功能被转移到对象存储或 HDFS。CN 是无状态的计算节点,可以执行除存储数据外所有 BE 的功能。

  • 存储

StarRocks 存算分离集群支持两种存储解决方案:对象存储 (例如,AWS S3、Google GCS、Azure Blob Storage 或 MinIO) 和 HDFS。

在存算分离集群中,数据文件格式与存算一体集群 (存储和计算耦合) 保持一致。数据存储为 Segment 文件,云原生表(专门用于存算分离集群的表)也可以利用存算一体架构中支持的各种索引技术。

  • 缓存

StarRocks 存算分离集群将数据存储与计算分离,使两方都能够独立扩展,从而降低成本并提高系统弹性扩展能力。然而,这种架构会影响查询性能。 为减少架构对于性能的影响,StarRocks 建立了包含内存、本地磁盘和远端存储的多层数据访问系统,以便更好地满足各种业务需求。

对于针对热数据的查询,StarRocks 会先扫描缓存,然后扫描本地磁盘。而针对冷数据的查询,需要先将数据从对象存储中加载到本地缓存中,加速后续查询。通过将热数据缓存在计算单元内,StarRocks 实现了真正的高计算性能和高性价比存储。此外,还通过数据预取策略优化了对冷数据的访问,有效消除了查询的性能限制。

可以在建表时启用缓存。启用缓存后,数据将同时写入本地磁盘和后端对象存储。在查询过程中,CN 节点首先从本地磁盘读取数据。如果未找到数据,将从后端对象存储中检索,并将数据缓存到本地磁盘中。

三、前期准备

3.1前提条件

  • CPU

StarRocks 依靠 AVX2 指令集充分发挥其矢量化能力。因此,在生产环境中,强烈建议您将 StarRocks 部署于 x86 架构 CPU 的服务器上。

#在终端中运行以下命令来检查 CPU 是否支持 AVX2 指令集

cat /proc/cpuinfo | grep avx2

  • 内存

StarRocks 对内存没有特定要求。关于推荐的内存大小,请参考集群规划章节的CPU 和内存部分。

  • 存储

StarRocks 支持 HDD 和 SSD 作为存储介质。 在实时数据分析场景、以及涉及大量数据扫描或随机磁盘访问的场景下,强烈建议您选择 SSD 作为存储介质。

  • 网络

建议使用万兆网络连接(10 Gigabit Ethernet,简称 10 GE)确保 StarRocks 集群内数据能够跨节点高效传输。

  • 操作系统

StarRocks 支持在 CentOS Linux 7.9 和 Ubuntu Linux 22.04 上部署。

  • JDK

必须在服务器上安装 JDK 8 以运行 StarRocks。v2.5 及以上版本建议安装 JDK 11。

3.2 集群规划

节点 实例数 CPU 内存 存储
FE 1~3 8核+ 16G+ 100 GB+
BE 3+ 16核+ 64G+ 预估 BE 初始存储空间

1. FE规划

  • 测试环境可以部署1个节点;生产环境建议至少部署3个节点,防止单节点故障。
  • FE 节点主要负责元数据管理、客户端连接管理、查询计划和查询调度,不会消耗大量的 CPU 和内存资源。生产环境建议为每个 FE 节点分配 8 个 CPU 内核和 16 GB RAM。
  • 由于 FE 节点仅在其存储中维护 StarRocks 的元数据,因此在大多数场景下,每个 FE 节点只需要 100 GB 的存储。

2. BE规划

  • 测试环境可以部署1个节点,生产环境建议您至少部署三个 BE 节点,这些节点会自动形成一个 BE 高可用集群,避免由于发生单点故障而影响数据可靠性和服务可用性。
  • BE 节点负责数据存储和 SQL 执行,需要使用大量 CPU 和内存资源。生产环境建议为每个 BE 节点分配 16 个 CPU 内核和 64 GB RAM。
  • StarRocks 默认维护三个副本,提供 3:1 到 5:1 的数据压缩比。 通过计算得到总存储空间后,可以简单地将之除以集群中的 BE 节点数,估算出每个 BE 节点所需的平均初始存储空间
  • 如果 BE 存储空间随着原始数据的增长而耗尽,可以通过在 BE 节点上添加额外的存储卷在 StarRocks 集群中添加新的 BE 节点以补充存储空间。

3.3 配置环境

  • 端口规划

StarRocks 为不同的服务使用特定的端口,请检查这些端口是否被占用。

#检查端口是否被占用

netstat -tunlp | grep 8030

节点 端口名称 默认端口 说明
FE http_port 8030 FE HTTP Server 端口
FE rpc_port 9020 FE Thrift Server 端口
FE query_port 9030 FE MySQL Server 端口
FE edit_log_port 9010 FE 内部通讯端口
FE cloud_native_meta_port 6090 FE 云原生元数据服务 RPC 监听端口
BE be_port 9060 BE Thrift Server 端口
BE be_http_portbe_http_port 8040 BE HTTP Server 端口
BE heartbeat_service_port 9050 BE 心跳服务端口
BE brpc_port 8060 BE bRPC 端口
BE starlet_port 9070 BE 和 CN 的额外 Agent 服务端口
CN be_port 9060 CN Thrift Server 端口
CN be_http_port 8040 CN HTTP Server 端口
CN heartbeat_service_port 9050 CN 心跳服务端口
CN brpc_port 8060 CN bRPC 端口
CN starlet_port 9070 BE 和 CN 的额外 Agent 服务端口
  • 主机名

如果StarRocks 集群 启用 FQDN 访问,则必须为每个实例设置一个主机名。 在每个实例的 /etc/hosts 文件中,必须指定集群中其他实例的 IP 地址和相应的主机名。

  • JDK 设置​

StarRocks 依靠环境变量 JAVA_HOME 定位实例上的 Java 依赖项。

  • 文件系统配置​

建议使用 ext4 或 xfs 日志文件系。

  • 关闭透明大页( Transparent Huge Pages**)**

Transparent Huge Pages 默认启用。因其会干扰内存分配,进而导致性能下降,建议您禁用此功能。

bash 复制代码
# 临时变更。
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo madvise > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local
  • 关闭 Swap Space

/etc/fstab 文件中注释掉或者直接删除 Swap Space 信息。

/<path_to_swap_space> swap swap defaults 0 0

  • 禁用 SELinux

临时变更。

setenforce 0

永久变更。

sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

sed -i 's/SELINUXTYPE/#SELINUXTYPE/' /etc/selinux/config

  • 关闭防火墙

如果启用了防火墙,请为 FE、BE 和 Broker 开启内部端口,内网环境可以直接关闭防火墙。

#停掉防火墙

systemctl stop firewalld

#永久关闭防火墙

systemctl disable firewalld

#查看防火墙状态,显示Active: inactive (dead)证明操作成功

systemctl status firewalld

  • ulimit 设置

如果最大文件描述符和最大用户进程的值设置得过小,StarRocks 运行可能会出现问题。建议将系统资源上限调大。

bash 复制代码
cat >> /etc/security/limits.conf << EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* hard memlock unlimited
* soft memlock unlimited
EOF

cat >> /etc/security/limits.d/20-nproc.conf << EOF 
*          soft    nproc     65535
root       soft    nproc     65535
EOF
  • 修改系统内核参数

#如果系统当前因后台进程无法处理的新连接而溢出,则允许系统重置新连接

net.ipv4.tcp_abort_on_overflow=1

#设置监听 Socket 队列的最大连接请求数为 1024

net.core.somaxconn=1024

#允许操作系统将额外的内存资源分配给进程,建议启用。

vm.overcommit_memory=1

#Swappiness 会对性能造成影响,因此建议禁用 Swappiness。

vm.swappiness=0

#进程可以拥有的 VMA(虚拟内存区域)的数量。将该值调整为 262144

vm.max_map_count = 262144

#最大线程数

kernel.threads-max = 120000

#进程标识符(PID)最大值

kernel.pid_max = 200000

3.4 准备部署文件

目前 镜舟官网提供的 StarRocks 软件包仅支持在 x86 架构的 CPU 上部署。如需在 ARM 架构 CPU 上部署 StarRocks,您需要通过StarRocks Docker 镜像获取部署文件。

四、手动部署

4.1 部署FE节点

1.修改 FE 配置文件

vi fe/conf/fe.conf

将 <meta_dir> 替换为已创建的元数据目录。

meta_dir = <meta_dir>

#为 FE 节点分配一个专有的 IP 地址(CIDR格式)

priority_networks = x.x.x.x/x

如须,可修改jdk版本;将 <path_to_JDK> 替换为所选 JDK 的安装路径。

JAVA_HOME = <path_to_JDK>

2.启动FE节点

./fe/bin/start_fe.sh --daemon

3.登录FE节点

通过 MySQL 客户端连接到 StarRocks。您需要使用初始用户 root 登录,密码默认为空。

将 <fe_address> 替换为 Leader FE 节点的 IP 地址(priority_networks),

并将 <query_port>(默认:9030)替换为您在 fe.conf 中指定的 query_port。

mysql -h <fe_address> -P<query_port> -uroot

执行以下 SQL 查看 Leader FE 节点状态:

SHOW PROC '/frontends'\G

4.2 部署BE节点

1.修改BE配置文件

vi be/conf/be.conf

将 <storage_root_path> 替换为已创建的数据存储路径。

storage_root_path = <storage_root_path>

为 BE 节点分配一个专有的 IP 地址(CIDR格式)

priority_networks = x.x.x.x/x

如须,可修改jdk版本;将 <path_to_JDK> 替换为所选 JDK 的安装路径。

JAVA_HOME = <path_to_JDK>

2.启动BE节点

./be/bin/start_be.sh --daemon

3.将BE节点加入集群

登录FE节点后,通过以下命令将BE加入集群:

-- 将 <be_address> 替换为 BE 节点的 IP 地址(priority_networks)

-- 并将 <heartbeat_service_port>(默认:9050)替换为在 be.conf 中指定的 heartbeat_service_port。

ALTER SYSTEM ADD BACKEND "<be_address>:<heartbeat_service_port>";

执行以下 SQL 查看 BE 节点状态:

SHOW PROC '/backends'\G

4.在其他 BE 实例上重复以上步骤,即可启动新的 BE 节点

在一个 StarRocks 集群中部署并添加至少 3 个 BE 节点,形成一个 BE 高可用集群。 如果只想部署一个 BE 节点,必须在 FE 配置文件 fe/conf/fe.conf 中设置 default_replication_num1

4.3 部署CN节点(可选)

Compute Node(CN)是一种无状态的计算服务,本身不存储数据。可以通过添加 CN 节点为查询提供额外的计算资源。自 v2.4 版本起支持使用 BE 部署文件部署 CN 节点。

1.修改CN配置文件

#为 CN 节点分配一个专有的 IP 地址(CIDR格式)

priority_networks = x.x.x.x/x

如须,可修改jdk版本;将 <path_to_JDK> 替换为所选 JDK 的安装路径。

JAVA_HOME = <path_to_JDK>

2.启动CN节点

./be/bin/start_cn.sh --daemon

3.将CN节点加入集群

登录FE节点后,通过以下命令将CN加入集群:

-- 将 <cn_address> 替换为 CN 节点的 IP 地址(priority_networks)或 FQDN,

-- 并将 <heartbeat_service_port>(默认:9050)替换为您在 cn.conf 中指定的 heartbeat_service_port。

ALTER SYSTEM ADD COMPUTE NODE "<cn_address>:<heartbeat_service_port>";

执行以下 SQL 查看 CN 节点状态

SHOW PROC '/compute_nodes'\G

4.在其他实例上重复以上步骤,即可启动新的 CN 节点

4.4 FE高可用

高可用的 FE 集群需要在 StarRocks 集群中部署至少三个 Follower FE 节点。如需部署高可用的 FE 集群,需要额外再启动两个新的 FE 节点。

1.参考4.1部署FE节点,部署两个新的FE节点

2.将新部署的FE节点加入集群

-- 将 <new_fe_address> 替换为需要添加的新 FE 节点的 IP 地址(priority_networks)

-- 并将 <edit_log_port>(默认:9010)替换为在新 FE 节点的 fe.conf 中指定的 edit_log_port。

ALTER SYSTEM ADD FOLLOWER "<new_fe_address>:<edit_log_port>","<new_fe_address>:<edit_log_port>";

4.5 故障排除

如果启动 FE、BE 或 CN 节点失败,尝试以下步骤来发现问题:

  • 如果 FE 节点没有正常启动,您可以通过查看 fe/log/fe.warn.log 中的日志来确定问题所在。

cat fe/log/fe.warn.log

确定并解决问题后,首先需要终止当前 FE 进程,删除现有的 meta 路径下的所有文件,然后以正确的配置重启该 FE 节点。

  • 如果 BE 节点没有正常启动,您可以通过查看 be/log/be.WARNING 中的日志来确定问题所在。

cat be/log/be.WARNING

确定并解决问题后,首先需要终止当前 BE 进程,删除现有的 storage 路径下的所有文件,然后以正确的配置重启该 BE 节点。

  • 如果 CN 节点没有正常启动,您可以通过查看 be/log/cn.WARNING 中的日志来确定问题所在。

cat be/log/cn.WARNING

确定并解决问题后,首先需要终止当前 CN 进程,然后以正确的配置重启该 CN 节点。

五、集群管理

5.1 启动集群

  • 启动FE节点

sh fe/bin/start_fe.sh --daemon

  • 启动BE节点

sh be/bin/start_be.sh --daemon

  • 启动CN节点

sh be/bin/start_cn.sh --daemon

5.2 停止集群

  • 停止FE节点

./fe/bin/stop_fe.sh --daemon

  • 停止BE节点

./be/bin/stop_be.sh --daemon

  • 停止CN节点

./be/bin/stop_cn.sh --daemon

相关推荐
京河小蚁14 小时前
[bug] StarRocks borker load意向之外的bug
starrocks·broker
一条路上的咸鱼15 天前
离线数据同步变迁
starrocks·数据同步
hankl199018 天前
StarRocks-同步hive数据
starrocks·数据仓库
一条路上的咸鱼22 天前
一种小资源情况下RDS数据实时同步StarRocks方案
starrocks·数据同步
roman_日积跬步-终至千里25 天前
【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署
starrocks
crossoverJie1 个月前
推荐一些值得学习的开源项目和框架
starrocks·开源·pulsar
houzhizhen1 个月前
StarRocks 架构
starrocks
crossoverJie1 个月前
StarRocks 物化视图刷新流程及原理
数据库·starrocks
Double@加贝2 个月前
Starrocks部署前期准备
starrocks