StarRocks:存算一体模式部署

embedded/2024/12/19 23:21:57/

目录

一、StarRocks 简介        

二、StarRocks 架构

2.1 存算一体

2.2 存算分离

三、前期准备

3.1前提条件

3.2 集群规划

3.3 配置环境

3.4 准备部署文件

四、手动部署

4.1 部署FE节点

4.2 部署BE节点

4.3 部署CN节点(可选)

4.4 FE高可用

4.5 故障排除

五、集群管理

5.1 启动集群

5.2 停止集群


一、StarRocks 简介        

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

二、StarRocks 架构

        StarRocks 架构简洁明了,整个系统仅由两种组件组成:前端和后端。前端节点称为 FE。后端节点有两种类型,BE 和 CN (计算节点)。当使用本地存储数据时,您需要部署 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内存存储
FE1~38核+16G+100 GB+
BE3+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

节点端口名称默认端口说明
FEhttp_port8030FE HTTP Server 端口
rpc_port9020FE Thrift Server 端口
query_port9030FE MySQL Server 端口
edit_log_port9010FE 内部通讯端口
cloud_native_meta_port6090FE 云原生元数据服务 RPC 监听端口
BEbe_port9060BE Thrift Server 端口
be_http_portbe_http_port8040BE HTTP Server 端口
heartbeat_service_port9050BE 心跳服务端口
brpc_port8060BE bRPC 端口
starlet_port9070BE 和 CN 的额外 Agent 服务端口
CNbe_port9060CN Thrift Server 端口
be_http_port8040CN HTTP Server 端口
heartbeat_service_port9050CN 心跳服务端口
brpc_port8060CN bRPC 端口
starlet_port9070BE 和 CN 的额外 Agent 服务端口
  • 主机名

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

  • JDK 设置​

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

  • 文件系统配置​

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

  • 关闭透明大页(Transparent Huge Pages

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

# 临时变更。
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; thenecho madvise > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; thenecho 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 运行可能会出现问题。建议将系统资源上限调大。

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
EOFcat >> /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_num 为 1

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


http://www.ppmy.cn/embedded/147134.html

相关文章

OpenAI 正式赋予 ChatGPT 通过视频实时与用户互动的能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

1 JVM JDK JRE之间的区别以及使用字节码的好处

JDK jdk是编译java源文件成class文件的&#xff0c;我们使用javac命令把java源文件编译成class文件。 我们在java安装的目录下找到bin文件夹&#xff0c;如下图所示: 遵循着编译原理&#xff0c;把java源文件编译成JVM可识别的机器码。 其中还包括jar打包工具等。主要是针对…

idea中各种for循环的快捷键

写for循环快捷生成方式 1.普通for循环 快捷键方式&#xff1a;len.fori回车键(其中len为循环长度) 例如&#xff1a;编写10次循环 10.fori回车键得到的效果&#xff1a; for (int i 0; i < 10; i) {}2.增强for循环 快捷键方式&#xff1a;arr.for回车键(其中arr为需要…

java服务器中,如何判定是该使用单例系统,还是微服务架构,多库分布式,服务分布式,前端分布式

在设计Java服务器架构时&#xff0c;选择单例系统、微服务架构、多库分布式、服务分布式还是前端分布式&#xff0c;需要根据具体的业务需求、技术栈、团队规模和项目复杂度等因素进行综合考虑。以下是各个架构模式的适用场景和优缺点分析&#xff0c;帮助你做出决策。 1. 单例…

“包” 管理工具

文章目录 包管理工具之-npm,cnpm,pnpm,yarn包管理工具之源头依赖下载安装的完整性node 与 npm 之间的关系如何手动管理依赖手动管理依赖的优优缺点镜像源安装及下载cnpmpnpm(add(new),remove,install(配置文件下载))yarn(add(new),remove,install(配置文件下载)) 包管理工具之-…

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…

K8s 如何自己实现云上的proxy代理

在Kubernetes&#xff08;K8s&#xff09;内部实现一个网络代理&#xff08;proxy&#xff09;进程时&#xff0c;该进程需要满足一定的功能&#xff0c;以适应 K8s 的架构和网络模型。以下是实现网络代理时需要考虑的关键功能&#xff1a; 1. 网络流量的转发功能 基本转发&am…

微服务SpringCloud链路追踪之Micrometer+Zipkin

视频教程&#xff1a; https://www.bilibili.com/video/BV12LBFYjEvR 效果演示 当我们发送一个请求给 Gateway 的时候&#xff0c;由 Micrometer trace 进行链路追踪和数据收集&#xff0c;由 Zipkin 进行数据展示。可以清楚的看到微服务的调用过程&#xff0c;以及每个微服务…