Docker - StarRocks部署(支持集群)
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。
官方文档:StarRocks 简介
注1:所有配置参数
注2:部署常见问题
注3:分区分桶原则(CSDN:流木随风)
硬件要求:部署BE服务的机器 CPU 需支持 AVX2 指令集,查看命令cat /proc/cpuinfo | grep avx2
有结果输出即表明CPU支持。如果无输出,建议更换支持AVX2的机器。
概念介绍
- FE、BE、Broker、CN
名词 | 描述 |
---|---|
FE | FrontEnd简称FE,是StarRocks的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。 |
BE | BackEnd简称BE,是StarRocks的后端节点,负责数据存储,计算执行,以及compaction,副本管理等工作。 |
Broker | Broker,是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端口访问。
附:相关端口介绍
实例对象 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
FE | http_port | 8030 | FE <–> FE FE <–> 用户 | FE 节点上 HTTP 服务器的端口。 |
FE | query_port | 9030 | FE <–> 用户 | FE 节点上 MySQL 服务器的端口。 |
FE | edit_log_port | 9010 | FE <–> FE | FE 所在 StarRocks 集群中各 Leader FE、Follower FE、Observer FE 之间通信端口。 |
FE | rpc_port | 9020 | BE <–> FE FE <–> FE | FE 节点上 Thrift 服务器的端口。 |
BE | heartbeat_port | 9050 | FE <–> BE | BE上心跳服务端口(thrift),用于接收来自FE的心跳。 |
BE | be_port | 9060 | FE <–> BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求。 |
BE | webserver_port | 8040 | BE <–> BE | BE上的HTTP Server 端口。 |
BE | brpc_port | 8060 | FE <–> BE BE <–> BE | BE上的 BRPC 端口,可以查看 BRPC 的一些网络统计信息。 |
Broker | broker_ipc_port | 8000 | FE <–> Broker BE <–> Broker | Broker上的thrift server,用于接收请求。 |
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
共有 0 条评论