StarRocks 3.0 集群安装手册
本文介绍如何以二进制安装包方式手动部署最新版 StarRocks 3.0集群。
什么是 StarRocks
StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。
StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。
StarRocks 能很好地支持实时数据分析,并能实现对实时更新数据的高效查询。StarRocks 还支持现代化物化视图,进一步加速查询。
使用 StarRocks,用户可以灵活构建包括大宽表、星型模型、雪花模型在内的各类模型。
StarRocks 兼容 MySQL 协议,支持标准 SQL 语法,易于对接使用,全系统无外部依赖,高可用,易于运维管理。StarRocks 还兼容多种主流 BI 产品,包括 Tableau、Power BI、FineBI 和 Smartbi。
适用场景
StarRocks 可以满足企业级用户的多种分析需求,包括 OLAP (Online Analytical Processing) 多维分析、定制报表、实时数据分析和 Ad-hoc 数据分析等。
OLAP 多维分析
利用 StarRocks 的 MPP 框架和向量化执行引擎,用户可以灵活的选择雪花模型,星型模型,宽表模型或者预聚合模型。适用于灵活配置的多维分析报表,业务场景包括:
-
用户行为分析
-
用户画像、标签分析、圈人
-
高维业务指标报表
-
自助式报表平台
-
业务问题探查分析
-
跨主题业务分析
-
财务报表
-
系统监控分析
实时数据仓库
StarRocks 设计和实现了 Primary-Key 模型,能够实时更新数据并极速查询,可以秒级同步 TP (Transaction Processing) 数据库的变化,构建实时数仓,业务场景包括:
-
电商大促数据分析
-
物流行业的运单分析
-
金融行业绩效分析、指标计算
-
直播质量分析
-
广告投放分析
-
管理驾驶舱
-
探针分析APM(Application Performance Management)
高并发查询
StarRocks 通过良好的数据分布特性,灵活的索引以及物化视图等特性,可以解决面向用户侧的分析场景,业务场景包括:
-
广告主报表分析
-
零售行业渠道人员分析
-
SaaS 行业面向用户分析报表
-
Dashboard 多页面分析
统一分析
-
通过使用一套系统解决多维分析、高并发查询、预计算、实时分析查询等场景,降低系统复杂度和多技术栈开发与维护成本。
-
使用 StarRocks 统一管理数据湖和数据仓库,将高并发和实时性要求很高的业务放在 StarRocks 中分析,也可以使用 External Catalog 和外部表进行数据湖上的分析。
前提条件
在部署生产环境 StarRocks 之前,请确保如下环境要求已满足。
说明
如果您想在 Ubuntu 22.04 或 ARM 架构处理器上运行 StarRocks,则需要从 StarRocks Docker Hub 下载并运行特定标签的 Docker 镜像,并从 Docker 容器目录 /data/starrocks 下复制二进制文件到您的主机。
依据不同的工作负载复杂性,StarRocks 每个 CPU 线程每秒可以处理 10M 至 100M 行数据。您可以据此估计集群中需要多少 CPU 线程能够满足您的要求。而 StarRocks 在存储数据时利用列存储和压缩,可以达到 4-10 倍的压缩比,您可以使用该数据来估计集群所需的存储量。
StarRocks 仅支持 JDK 作为依赖,不支持使用 JRE。
系统参数配置
关闭Transparent Huge Pages 与 部分内核参数
echo never > /sys/kernel/mm/transparent_hugepage/enabled
chmod +x /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >>/etc/rc.d/rc.local
echo "echo 120000 > /proc/sys/kernel/threads-max" >>/etc/rc.d/rc.local
echo "echo 60000 > /proc/sys/vm/max_map_count" >>/etc/rc.d/rc.local
echo "echo 200000 > /proc/sys/kernel/pid_max" >>/etc/rc.d/rc.local编辑 /etc/sysctl.conf ,调整内核参数
vm.overcommit_memory=1
vm.swappiness=0
vm.min_free_kbytes = 10551236
vm.max_map_count=655350
fs.aio-max-nr = 1048576
fs.nr_open=20480000
fs.file-max = 76724600
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_abort_on_overflow=1
内核参数生效
sysctl -p
安装JDK
tar -zxvf /opt/jdk1.8.0_221.tar.gz -C /opt/
添加环境变量 /root/.bash_profile
下载并解压安装包
下载 StarRocks 分发各节点并解压二进制安装包。
tar -zxvf /opt/StarRocks-3.0.0-rc02.tar.gz -C /opt
部署 FE 高可用集群
本小节介绍如何配置部署 Frontend (FE) 节点。FE 是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。
新集群中的 FE 节点在启动时默认启用 IP 地址访问。
注意
-
FE 节点之间的时钟相差不能超过 5s。如果节点之间存在较大时钟差,请使用 NTP 协议校准时间。
-
所有 FE 节点的
http_port
需保持相同,因此一台机器无法错开端口部署某个集群的多个 FE 节点。 -
配置 FE 节点
-
进入 StarRocks-x.x.x/fe 路径。
cd /opt/StarRocks-3.0.0-rc02/fe
修改 FE 配置文件 conf/fe.conf。以下示例仅添加元数据目录和 Java 目录,以保证部署成功。如需在生产环境中对集群进行详细优化配置,参考 FE 参数配置。
创建数据目录
mkdir -p /data1/startrocks/meta
mkdir -p /data1/startrocks/log
mkdir -p /data1/startrocks/log
FE参数配置
cat /opt/StarRocks-3.0.0-rc02/fe/conf/fe.conf
LOG_DIR = /data1/startrocks/log
DATE = "$(date +%Y%m%d-%H%M%S)"
JAVA_HOME = /opt/jdk1.8.0_221/
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:${LOG_DIR}/fe.gc.log.$DATE -XX:+PrintConcurrentLocks"
JAVA_OPTS_FOR_JDK_9="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:${LOG_DIR}/fe.gc.log.$DATE:time"
sys_log_level = INFO
meta_dir = /data1/startrocks/meta
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
riority_networks = 172.26.180.0/24
mysql_service_nio_enabled = true
log_roll_size_mb = 1024
sys_log_dir = /data1/startrocks/log
sys_log_roll_num = 10
sys_log_verbose_modules =
audit_log_dir = /data1/startrocks/log
audit_log_modules = slow_query, query
audit_log_roll_num = 10
meta_delay_toleration_second = 10
qe_max_connection = 1024
max_conn_per_user = 100
qe_query_timeout_second = 300
qe_slow_log_ms = 5000
注意
当一台机器拥有多个 IP 地址时,需要在 FE 配置文件 conf/fe.conf 中设置 priority_networks
,为该节点设定唯一 IP。
启动 FE 节点
运行以下命令启动 FE 节点。
/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh --daemon
-
通过运行
jps
命令查看 Java 进程,确认 StarRocksFE 进程是否存在。 -
通过在浏览器访问
FE ip:http_port
(默认http_port
为8030
),进入 StarRocks 的 WebUI,用户名为root
,密码为空。 -
添加 FE 节点
-
您可通过 MySQL 客户端连接 StarRocks 以添加 FE 节点。
-
在 FE 进程启动后,使用 MySQL 客户端连接 FE 实例。
-
mysql -h 127.0.0.1 -P9030 -uroot
-
说明
root
为 StarRocks 默认内置 user,密码为空,端口为 fe/conf/fe.conf 中的query_port
配置项,默认值为9030
。 -
查看 FE 状态。
-
SHOW PROC '/frontends'\G
-
当 Role 为 LEADER 时,当前 FE 节点为选举出的主节点。
-
当 Role 为 FOLLOWER 时,当前节点是一个能参与选主的 FE 节点。
如果 MySQL 客户端连接失败,可以通过查看 log/fe.warn.log 日志文件发现问题。
如果在初次部署时遇到任何意外问题,可以在删除并重新创建 FE 的元数据目录后,重新开始部署。
添加新 FE 节点
使用 MySQL 客户端连接已有 FE 节点,添加新 FE 节点的信息,包括角色、IP 地址、以及 Port。
-
在FE LEADER节点 添加 Follower FE 节点。
语法:/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh --helper host:port --daemon
Follower FE 节点执行:
/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh --helper 172.26.180.1:9010 --daemon
参数:
-
host
:机器的 IP 地址。如果机器存在多个 IP 地址,则该项为priority_networks
设置项下设定的唯一通信 IP 地址。 -
port
:edit_log_port
设置项下设定的端口,默认为9010
。
出于安全考虑,StarRocks 的 FE 节点和 BE 节点只会监听一个 IP 地址进行通信。如果一台机器有多块网卡,StarRocks 有可能无法自动找到正确的 IP 地址。例如,通过 ifconfig
命令查看到 eth0
IP 地址为 192.168.1.1
,docker0
IP 地址为 172.17.0.1
,您可以设置 192.168.1.0/24
子网以指定使用 eth0
作为通信 IP。此处采用 CIDR 的表示方法来指定 IP 所在子网范围,以便在所有的 BE 及 FE 节点上使用相同的配置。
连接 FE 节点
FE 节点需两两之间建立通信连接方可实现复制协议选主,投票,日志提交和复制等功能。当新的FE节点首次被添加到已有集群并启动时,您需要指定集群中现有的一个节点作为 helper 节点,并从该节点获得集群的所有 FE 节点的配置信息,才能建立通信连接。因此,在首次启动新 FE 节点时候,您需要通过命令行指定 --helper
参数。
语法:/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh --helper host:port --daemon
Follower FE 节点执行:
/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh --helper 172.26.180.1:9010 --daemon
参数:
-
host
:机器的IP 地址。如果机器存在多个 IP 地址,则该项为priority_networks
设置项下设定的唯一通信 IP 地址。 -
port
:edit_log_port
设置项下设定的端口,默认为9010
。
确认 FE 集群部署成功
查看集群状态,确认部署成功。
SHOW PROC '/frontends'\G
部署 BE 节点
本小节介绍如何配置部署 Backend (BE) 节点。BE 是 StarRocks 的后端节点,负责数据存储以及 SQL 执行等工作。
配置 BE 节点
进入 StarRocks-x.x.x/be 路径。
cd /opt/StarRocks-3.0.0-rc02/be/
修改 BE 节点配置文件 conf/be.conf
cat /opt/StarRocks-3.0.0-rc02/be/conf/be.conf
sys_log_level = INFO
be_port = 9060
be_http_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
jaeger_endpoint = localhost:6831
#priority_networks = 10.10.10.0/24;192.168.0.0/16
priority_networks = 172.26.180.0/24
#storage_root_path = /data1,medium:HDD;/data2,medium:SSD;/data3
storage_root_path = /data2/startrocks_be/storage
sys_log_dir = /data2/startrocks_be/log
sys_log_roll_mode = SIZE-MB-1024
sys_log_roll_num = 10
sys_log_verbose_modules = *
log_buffer_level = -1
JAVA_HOME = /opt/jdk1.8.0_221
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"
JAVA_OPTS_FOR_JDK_9="-Djava.security.krb5.conf=/etc/krb5.conf"
注意
当一台机器拥有多个 IP 地址时,需要在 BE 配置文件 conf/be.conf 中设置 priority_networks
,为该节点设定唯一 IP。
创建数据目录
mkdir -p /data2/startrocks_be/storagemkdir -p /data2/startrocks_be/log
添加 BE 节点
通过 MySQL 客户端连接FE节点将 BE 节点添加至 StarRocks 集群。
语法:mysql> ALTER SYSTEM decommission BACKEND "host:port";
MySQL [(none)]> ALTER SYSTEM ADD BACKEND "172.26.180.1:9050";
Query OK, 0 rows affected (0.02 sec)
MySQL [(none)]> ALTER SYSTEM ADD BACKEND "172.26.180.2:9050";
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]> ALTER SYSTEM ADD BACKEND "172.26.180.3:9050";
Query OK, 0 rows affected (0.00 sec)
注意
host
需要与priority_networks
相匹配,port
需要与 be.conf 文件中的设置的heartbeat_service_port
相同,默认为9050
。
如添加过程出现错误,需要通过以下命令将该 BE 节点从集群移除。
语法:bin/start_be.sh --daemon
/opt/StarRocks-3.0.0-rc02/be/bin/start_be.sh --daemon
说明
host
和port
与添加的 BE 节点一致。
启动 BE 节点
运行以下命令启动 BE 节点。
语法:bin/start_be.sh --daemon
/opt/StarRocks-3.0.0-rc02/be/bin/start_be.sh --daemon
确认 BE 启动成功
通过 MySQL 客户端确认 BE 节点是否启动成功。
SHOW PROC '/backends'\G
当 Alive
为 true
时,当前 BE 节点正常接入集群。
如果 BE 节点没有正常接入集群,可以通过查看 log/be.WARNING 日志文件排查问题。
如果日志中出现类似以下的信息,说明 priority_networks
的配置存在问题。
W0708 17:16:27.308156 11473 heartbeat_server.cpp:82\] backend ip saved in master does not equal to backend local ip127.0.0.1 vs. 172.16.xxx.xx
如遇到以上问题,可以通过 DROP 错误的 BE 节点,然后重新以正确的 IP 添加 BE 节点的方式来解决。
ALTER SYSTEM DROP BACKEND "172.16.xxx.xx:9050";
如果在初次部署时遇到任何意外问题,可以在删除并重新创建 BE 的数据路径后,重新开始部署。
环境数据测试:
MySQL [(none)]> CREATE DATABASE chongzh;
Query OK, 0 rows affected (0.20 sec)
MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| _statistics_ |
| chongzh |
| information_schema |
+--------------------+
3 rows in set (0.03 sec)
MySQL [(none)]> use chongzh;
MySQL [chongzh]> CREATE TABLE IF NOT EXISTS `detailDemo` (
`recruit_date` DATE NOT NULL COMMENT "YYYY-MM-DD",
`region_num` TINYINT COMMENT "range [-128, 127]",
`num_plate` SMALLINT COMMENT "range [-32768, 32767] ",
`tel` INT COMMENT "range [-2147483648, 2147483647]",
`id` BIGINT COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
`password` LARGEINT COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
`name` CHAR(
20
) NOT NULL COMMENT "range char(m),m in (1-255)",
`profile` VARCHAR(
500
) NOT NULL COMMENT "upper limit value 1048576 bytes",
`hobby` STRING NOT NULL COMMENT "upper limit value 65533 bytes",
`leave_time` DATETIME COMMENT "YYYY-MM-DD HH:MM:SS",
`channel` FLOAT COMMENT "4 bytes",
`income` DOUBLE COMMENT "8 bytes",
`account` DECIMAL(
12
,
4
) COMMENT "",
`ispass` BOOLEAN COMMENT "true/false"
) ENGINE=OLAP
DUPLICATE KEY(`recruit_date`, `region_num`)
PARTITION BY RANGE(`recruit_date`)
(
PARTITION p20220311 VALUES [('2022-03-11'), ('2022-03-12')),
PARTITION p20220312 VALUES [('2022-03-12'), ('2022-03-13')),
PARTITION p20220313 VALUES [('2022-03-13'), ('2022-03-14')),
PARTITION p20220314 VALUES [('2022-03-14'), ('2022-03-15')),
PARTITION p20220315 VALUES [('2022-03-15'), ('2022-03-16'))
)
DISTRIBUTED BY HASH(`recruit_date`, `region_num`) BUCKETS
8
PROPERTIES (
"replication_num" = "1"
);
[root@HDDC-DFNV-L3-Nredis01 ~]# cat detailDemo_data
2022-03-13,1,1212,1231231231,123412341234,123452342342343324,hello,welcome,starrocks,2022-03-15 12:21:32,123.04,21.12345,123456.123456,true
2022-03-14,2,1212,1231231231,123412341234,123452342342343324,hello,welcome,starrocks,2022-03-15 12:21:32,123.04,21.12345,123456.123456,false
[root@HDDC-DFNV-L3-Nredis01 ~]# curl --location-trusted -u root: -T /root/detailDemo_data -H "label: streamDemo" \
> -H "column_separator:," \
> http://127.0.0.1:8030/api/chongzh/detailDemo/_stream_load
{
"TxnId": 2,
"Label": "streamDemo",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 2,
"NumberLoadedRows": 2,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 281,
"LoadTimeMs": 508,
"BeginTxnTimeMs": 73,
"StreamLoadPlanTimeMs": 190,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 119,
"CommitAndPublishTimeMs": 119
MySQL [chongzh]> select * from detailDemo;
+--------------+------------+-----------+------------+--------------+--------------------+-------+---------+-----------+---------------------+---------+----------+-------------+--------+
| recruit_date | region_num | num_plate | tel | id | password | name | profile | hobby | leave_time | channel | income | account | ispass |
+--------------+------------+-----------+------------+--------------+--------------------+-------+---------+-----------+---------------------+---------+----------+-------------+--------+
| 2022-03-13 | 1 | 1212 | 1231231231 | 123412341234 | 123452342342343324 | hello | welcome | starrocks | 2022-03-15 12:21:32 | 123.04 | 21.12345 | 123456.1235 | 1 |
| 2022-03-14 | 2 | 1212 | 1231231231 | 123412341234 | 123452342342343324 | hello | welcome | starrocks | 2022-03-15 12:21:32 | 123.04 | 21.12345 | 123456.1235 | 0 |
+--------------+------------+-----------+------------+--------------+--------------------+-------+---------+-----------+---------------------+---------+----------+-------------+--------+
2 rows in set (0.33 sec)
参考: https://docs.starrocks.io/zh-cn/3.0/quick_start/Deploy