Docker - StarRocks部署(支持集群)

StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。

官方文档:StarRocks 简介

硬件要求部署BE服务的机器 CPU 需支持 AVX2 指令集,查看命令cat /proc/cpuinfo | grep avx2 有结果输出即表明CPU支持。如果无输出,建议更换支持AVX2的机器。

概念介绍

  • FE、BE、Broker、CN
名词
描述
FEFrontEnd简称FE,是StarRocks的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。
BEBackEnd简称BE,是StarRocks的后端节点,负责数据存储,计算执行,以及compaction,副本管理等工作。
BrokerBroker,是StarRocks中和外部HDFS/对象存储等外部数据对接的中转服务,辅助提供导入导出功能。
CN【公测】CN 节点(Compute Node)是一种无状态的计算服务,自身不维护数据,可以承担部分 SQL 计算。
  • 分区、分桶、副本数
名词
描述
PARTITION BY RANGE()分区,⽤于将数据划分成不同的区间。分区的主要作⽤是将⼀张表按照分区键拆分成不同的管理单元。当前分区键仅支持日期类型和整数类型
DISTRIBUTED BY HASH()分区的下⼀级是分桶,StarRocks 采⽤ Hash 算法作为分桶算法。在同⼀分区内,分桶键哈希值相同的数据形成 Tablet。分桶数量(建议)= BE节点数量 * CPU 核数
replication_num副本数,就是同一个Tablet保存的份数。

一、拉取镜像

# 前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作
docker pull renzicu/starrocks-fe:2.5.0

# 后端节点,负责数据存储,计算执行,以及compaction,副本管理等工作
# 机器 CPU 支持 AVX2 指令集
docker pull renzicu/starrocks-be:2.5.0
# 机器 CPU 不支持 AVX2 指令集,下面的BE命令都需要换成此镜像
docker pull renzicu/starrocks-be-noavx:2.5.0

# 和外部HDFS/对象存储等外部数据对接的中转服务,辅助提供导入导出功能
docker pull renzicu/starrocks-broker:2.5.0

二、准备工作

将容器中配置文件映射到本地,方便日后调整配置参数
# 本地存储StarRocks根目录
export StarRocks_Home='/data/starrocks/'
export StarRocks_Ver='2.5.0'
# 提前创建需要保存配置文件的目录,示自己情况创建
mkdir -p $StarRocks_Home/fe/conf $StarRocks_Home/be/conf $StarRocks_Home/broker/conf

# 创建临时容器,导出FE配置文件
docker create --name starrocks-fe renzicu/starrocks-fe:${StarRocks_Ver} \
  && docker cp starrocks-fe:/starrocks/conf/fe.conf $StarRocks_Home/fe/conf/fe.conf \
  && docker rm starrocks-fe

# 创建临时容器,导出BE配置文件
docker create --name starrocks-be renzicu/starrocks-be:${StarRocks_Ver} \
  && docker cp starrocks-be:/starrocks/conf/be.conf $StarRocks_Home/be/conf/be.conf \
  && docker rm starrocks-be
  
# 创建临时容器,导出Broker配置文件
docker create --name starrocks-broker renzicu/starrocks-broker:${StarRocks_Ver} \
  && docker cp starrocks-broker:/starrocks/conf/apache_hdfs_broker.conf $StarRocks_Home/broker/conf/apache_hdfs_broker.conf \
  && docker rm starrocks-broker

三、启动程序

1. FE配置

注意

当新的FE节点首次被添加到已有集群并启动时,您需要指定集群中现有的一个节点作为 helper 节点,并从该节点获得集群的所有 FE 节点的配置信息,才能建立通信连接。因此,在首次启动新 FE 节点时候,您需要通过命令行指定 –helper 参数。详见官方文档:部署 FE 高可用集群

当一台机器拥有多个非回环 IP 地址时,需要在 FE 配置文件 conf/fe.conf 中设置 priority_networks,为该节点设定唯一 IP。

添加节点到现有集群步骤(顺序不能乱,否则会加入集群失败)

1. 先执行SQL语句添加节点 ALTER SYSTEM ADD FOLLOWER/OBSERVER "host:edit_log_port";
2. 然后再启动程序并指定 –helper 参数。

加入集群失败后,可使用如下方法重新加入

1. 执行SQL语句删除节点 ALTER SYSTEM DROP FOLLOWER/OBSERVER "host:edit_log_port";
2. 清除容器内/starrocks/meta/*目录和/starrocks/HELPER_READY文件。
3. 执行SQL语句添加节点 ALTER SYSTEM ADD FOLLOWER/OBSERVER "host:edit_log_port";
4. 重启先前创建的容器

作者封装的镜像对参数做了包装,见示例中-e OPTS=参数
docker run -d \
# http_port、query_port
-p 8030:8030 -p 9030:9030 \
# edit_log_port、rpc_port
-p 9010:9010 -p 9020:9020 \
--restart unless-stopped \
--name starrocks-fe1 \
# -e OPTS="--helper 172.17.0.1:9010" \
-v /etc/localtime:/etc/localtime:ro \
-v /data/starrocks/fe/conf/fe.conf:/starrocks/conf/fe.conf \
-v /data/starrocks/fe/meta:/starrocks/meta \
-v /data/starrocks/fe/log:/starrocks/log \
renzicu/starrocks-fe:2.5.0
当 Docker 容器成功启动后,(在容器内)运行以下命令连接 StarRocks。详细权限配置见官网:用户权限及认证
-- 容器内已集成mysql,可在容器内执行。默认用户root,密码为空
mysql -u root -h 127.0.0.1 -P 9030
-- 修改root密码
SET PASSWORD FOR 'root' = PASSWORD('xxxxxxxxxxxxxxx');

-- 创建新用户manong
CREATE USER manong@'%' IDENTIFIED WITH mysql_native_password BY 'xxxxxxxxxxxx';  -- 删除用户 DROP USER 'user_identity';
-- 授予所有权限
GRANT SELECT_PRIV ON *.* TO 'manong'@'%';

-- -----------------------添加/删除 FE、BE、Broker-------------------
-- 添加 Follower FE 节点
ALTER SYSTEM ADD FOLLOWER "fe_host:edit_log_port"; -- 删除 ALTER SYSTEM DROP FOLLOWER "fe_host:edit_log_port";
-- 添加 Observer FE 节点
ALTER SYSTEM ADD OBSERVER "fe_host:edit_log_port"; -- 删除 ALTER SYSTEM DROP OBSERVER "fe_host:edit_log_port";
-- 查看 FE 节点状态
SHOW PROC '/frontends'\G

-- 添加 BE 节点
ALTER SYSTEM ADD BACKEND "be_host:heartbeat_port"; -- 删除 ALTER SYSTEM DROP BACKEND "be_host:heartbeat_port";
-- 查看 BE 节点状态
SHOW PROC '/backends'\G

-- 添加 Broker 节点
ALTER SYSTEM ADD BROKER broker_name "broker_host:port"; -- 删除 ALTER SYSTEM DROP BROKER broker_name "broker_host:port";
-- 查看 Broker 节点状态
SHOW PROC '/brokers'\G

2. BE配置

注意
当一台机器拥有多个非回环 IP 地址时,需要在 BE 配置文件 conf/be.conf 中设置 priority_networks,为该节点设定唯一 IP。
特别说明:CPU 不支持 AVX2,需使用renzicu/starrocks-be-noavx相对应版本镜像。
docker run -d \
# heartbeat_port、be_port
-p 9050:9050 -p 9060:9060 \
# webserver_port、brpc_port
-p 8040:8040 -p 8060:8060 \
--restart unless-stopped \
--name starrocks-be1 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/starrocks/be/conf/be.conf:/starrocks/conf/be.conf \
-v /data/starrocks/be/storage:/starrocks/storage \
-v /data/starrocks/be/log:/starrocks/log \
renzicu/starrocks-be:2.5.0

3. Broker配置

docker run -d \
-p 8000:8000 \
--restart unless-stopped \
--name starrocks-broker1 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/starrocks/broker/conf/apache_hdfs_broker.conf:/starrocks/conf/apache_hdfs_broker.conf \
renzicu/starrocks-broker:2.5.0

四、访问测试

注:访问需要开放相应防火墙端口。
通过StarRocks自带WebUI,8030端口访问

注:当使用Mysql等连接工具时,需要使用9030端口访问。

附:相关端口介绍

实例对象
端口名称
默认端口
通讯方向
说明
FEhttp_port8030FE <–> FE
FE <–> 用户
FE 节点上 HTTP 服务器的端口。
FEquery_port9030FE <–> 用户FE 节点上 MySQL 服务器的端口。
FEedit_log_port9010FE <–> FEFE 所在 StarRocks 集群中各 Leader FE、Follower FE、Observer FE 之间通信端口。
FErpc_port9020BE <–> FE
FE <–> FE
FE 节点上 Thrift 服务器的端口。
BEheartbeat_port9050FE <–> BEBE上心跳服务端口(thrift),用于接收来自FE的心跳。
BEbe_port9060FE <–> BEBE 上 thrift server 的端口,用于接收来自 FE 的请求。
BEwebserver_port8040BE <–> BEBE上的HTTP Server 端口。
BEbrpc_port8060FE <–> BE
BE <–> BE
BE上的 BRPC 端口,可以查看 BRPC 的一些网络统计信息。
Brokerbroker_ipc_port8000FE <–> Broker
BE <–> Broker
Broker上的thrift server,用于接收请求。
分享到:
本文链接:https://blog.renzicu.com/2023/starrocks/index.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
THE END
二维码
打赏
文章目录
关闭
目 录