检查操作系统是否符合要求,参考官方文档:https://docs.starrocks.io/zh/docs/3.1/deployment/deployment_prerequisites/
主要包括,CPU是否有 avx2 指令、内存大小、磁盘空间大小和网卡带宽。
本文介绍的是手动部署starrocks,参考官方文档:https://docs.starrocks.io/zh/docs/3.1/deployment/deploy_manually/
在存算一体架构中,StarRocks 由两种类型的节点组成:FE 和 BE。
FE:前端,负责元数据管理、客户端连接管理、查询规划和查询调度。
BE:后端,负责数据存储和 SQL 执行。
架构如下图:

这两个服务是独立运行的,需要单独监控启停。
第一步:准备
1.1、创建工作目录
命令:mkdir -p /data/starrocks/{fe/{log,meta},storage,be/log}
,目录结构如下:

其中,fe 和 be 是两个服务对应的工作目录;fe/meta 是元数据存储地址;storage 是数据存储的位置。
1.2、下载和安装
下载地址可以访问官方地址获取:https://www.starrocks.io/download/community
目前稳定版是3.1,可直接下载:
wget https://releases.starrocks.io/starrocks/StarRocks-3.1.15-ubuntu-amd64.tar.gz
wget https://releases.starrocks.io/starrocks/StarRocks-3.1.15-centos-amd64.tar.gz
解压即安装,示例安装在 /opt 目录下
命令:tar zxvf StarRocks-3.1.15-XXXXXX-amd64.tar.gz

可以修改一下解压目录的名字,建议修改成 StarRocks-3.1.15

第二步:配置FE集群
在StarRocks集群中,FE节点只需要配置1个即可,BE节点可以添加1个或者多个。但是为了实现FE节点的高可用性,推荐FE也配置成集群。在FE集群中,如果某个FE节点出现故障,其他节点也可以正常访问。
FE集群的配置方法:可以先启动一个节点,然后使用 mysql 客户端登录此节点后,添加允许加入集群的 FE 节点,然后再启动其他节点,通过 --helper
参数,自动添加到集群中。
2.1、修改FE配置文件
FE配置位置在:/opt/StarRocks-3.1.15/fe/conf/fe.conf
,文件内容如下:
LOG_DIR = /data/starrocks/fe/log
DATE = "$(date +%Y%m%d-%H%M%S)"
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -XX:+PrintGCDetails -Xloggc:${LOG_DIR}/fe.gc.log.$DATE -XX:+PrintConcurrentLocks -Djava.security.policy=${STARROCKS_HOME}/conf/udf_security.policy"
JAVA_OPTS_FOR_JDK_11="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -Xlog:gc*:${LOG_DIR}/fe.gc.log.$DATE:time"
sys_log_level = INFO
meta_dir = /data/starrocks/fe/meta
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
mysql_service_nio_enabled = true
priority_networks = xx.xx.xx.0/24;yy.yy.yy.0/24
sys_log_dir = /data/starrocks/fe/log
audit_log_dir = /data/starrocks/fe/log
配置项解释:
可参考官方文档:https://docs.starrocks.io/zh/docs/3.1/administration/management/FE_configuration/
- LOG_DIR:FE节点日志保存地址
- DATE:日期格式
- JAVA_OPT 和 JAVA_OPTS_FOR_JDK_11:启动 JVM 虚拟机的时候,添加的参数。如果是因为此项的参数导致 JVM 启动失败,则可以在此配置项中去掉对应的参数,再尝试能否启动。
- sys_log_level:系统日志级别
- meta_dir:元数据保存文件路径
- http_port:API端口
--
http协议 - rpc_port:远程过程调用端口,FE 节点上 Thrift 服务器的端口。
- query_port:数据查询端口,可用mysql客户端连接
- edit_log_port:FE 所在 StarRocks 集群中各 Leader FE、Follower FE、Observer FE 之间通信用的端口。
- mysql_service_nio_enabled:mysql连接是否启动非阻塞IO模式
nio --Non-blocking IO
,也是异步连接模式。 - priority_networks:为那些有多个 IP 地址的服务器声明一个选择策略。没有匹配这条规则的ip,会随机选择一个。如果集群是跨多个网段的,需要把所有的网段都写上,用分号分隔。
- sys_log_dir:系统日志保存路径
- audit_log_dir:审计日志保存路径
2.2、启动服务
配置 JAVA 环境变量,可参考往期文章:https://www.madbull.site/?p=1368 JAVA环境搭建
export JAVA_HOME=/xxx/xxx/jdk-xx-xx
export PATH=$JAVA_HOME/bin:$PATH
启动服务: /opt/StarRocks-3.1.15/fe/bin/start_fe.sh --daemon
加上 --daemon
是为了让服务后台运行。
查看端口是否启动成功:netstat -anlupt | grep -i listen | grep -E "90[123]0|8030"

如果启动失败,可以把 --daemon
参数去掉,前台执行查看报错,也可以在 /data/starrocks/fe/log
目录下查看原因。
2.3、增加允许加入的节点
用mysql客户端登录:mysql -P9030 -h127.0.0.1 -uroot

查看 FE 节点状态,命令:SHOW PROC '/frontends'\G

当前FE节点已经在系统里了,所以不需要添加。但是 其他FE节点需要手动添加 。
FE的角色role包括三种:LEADER、FOLLOWER、OBSERVER,区别如下:
FE 角色 | 元数据管理 | 节点选主 |
---|---|---|
Leader | Leader FE 负责读写元数据。Follower 节点和 Observer 节点只能读取元数据,并将元数据写请求路由到 Leader FE。Leader FE 更新元数据,然后使用 BDE JE 将元数据更改同步到 Follower 节点和 Observer 节点。只有在元数据更改同步到超过一半的Follower 节点后,数据写入才被认为成功。 | Leader FE 技术上也是一个 Follower 节点,是从Follower 节点中选举出来的。要执行主节点选举,集群中必须有超过一半的Follower 节点处于活动状态。当 Leader FE 发生故障时,Follower 节点将开始另一轮主节点选举。 |
Follower | Follower 节点只能读取元数据。它们从 Leader FE 同步和重放日志以更新元数据。 | |
Observer | Observer 节点从 Leader FE 同步和重放日志以更新元数据。 | Observer 节点 主要用于增加集群的查询并发性。 Observer 节点不参与主节点选举,因此不会增加集群的主节点选举压力。 |
添加允许接入的 FE 节点,命令:ALTER SYSTEM ADD FOLLOWER "xx.xx.xx.xx:nnnn"
;此处 FOLLOWER
也可以换成 OBSERVER
,那么该节点就不参与选举了。

2.4、其他FE节点加入集群。
对于其他节点,先按照 2.1节 配置FE节点,然后运行命令:
./fe/bin/start_fe.sh --helper xx.xx.xx.xx:nnnn --daemon
就可以自动加入的 FE 集群中。其中 xx.xx.xx.xx:nnnn
就是2.1到2.3步骤一直配置的FE节点,也是FE第一个节点。
注意:
1、此命令是首次加入集群运行的指令,对于已经建立好的FE集群,重启单个FE节点,则不需要加 --helper
参数。加了也没用,因为FE 节点会尝试加入之前已经部署好的集群。
2、正式因为第1个原因,所以在运行此命令之前,/data/starrocks/fe/meta
目录不能存在之前搭建 FE 节点的数据,否则,不会自动添加新集群。数据清空:rm -rf /data/starrocks/fe/meta/*

可登录 FE 9030端口查看状态。

如果有更多FE节点,只需要重复按照这个方法添加即可。
至此,FE节点集群已经完成。
2.5、增加systemd监控
为了方便启停和监控,可以增加 systemd 监控配置文件 /lib/systemd/system/srfe.service,内容如下:
[Unit]
Description=StarRocks
Documentation=https://www.starrocks.io/
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
NotifyAccess=all
RuntimeDirectory=StarRocks-3.1.15-fe
PrivateTmp=true
WorkingDirectory=/opt/StarRocks-3.1.15/fe
Environment=JAVA_HOME=/usr/share/elasticsearch/jdk
Environment=PATH=/usr/share/elasticsearch/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
ExecStart=/opt/StarRocks-3.1.15/fe/bin/start_fe.sh
ExecStop=/opt/StarRocks-3.1.15/fe/bin/stop_fe.sh
StandardOutput=journal
StandardError=inherit
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
MemoryLimit=20G
[Install]
WantedBy=multi-user.target
重现加载 systemd 配置:systemctl daemon-reload
启动StarRocks:systemctl start srfe
如果想给 集群访问 增加密码,可使用 mysql 客户端登录 9030 端口。然后参考往期文章:https://www.madbull.site/?p=33 MySql修改登录密码的几种方法。
第三步:配置BE集群
3.1、修改BE配置文件
BE配置位置在:/opt/StarRocks-3.1.15/be/conf/be.conf
,文件内容如下:
sys_log_level = INFO
be_port = 9060
be_http_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
starlet_port = 9070
priority_networks = xx.xx.xx.0/24;yy.yy.yy.0/24
storage_root_path = /data/starrocks/storage
sys_log_dir = /data/starrocks/be/log
JAVA_HOME=/xxx/xxx/jdk-xx-xx
配置项解释:
可参考官方文档:https://docs.starrocks.io/zh/docs/3.1/administration/management/BE_configuration/
- sys_log_level:系统日志级别。
- be_port:BE 上 Thrift Server 的端口,用于接收来自 FE 的请求。
- be_http_port:BE HTTP Server 端口。
- heartbeat_service_port:BE 心跳服务端口,用于接收来自 FE 的心跳。
- brpt_port:bRPC 的端口,可以查看 bRPC 的一些网络统计信息。
- starlet_port:BE 和 CN 的额外 Agent 服务端口。
- priority_networks:以 CIDR 形式指定 BE IP 地址,适用于机器有多个 IP,需要指定优先使用的网络。如果集群是跨多个网段的,需要把所有的网段都写上,用分号分隔。
- storage_root_path:存储数据的目录以及存储介质类型。示例:
/data1,medium:hdd;/data2,medium:ssd
。 - sys_log_dir:系统日志保存路径。
- JAVA_HOME:会根据此配置寻找java的路径。
直接启动即可,指令:/opt/StarRocks-3.1.15/be/bin/start_be.sh --daemon

其他BE节点也按照此方法启动即可。
如果BE启动不了,可以查看 /opt/StarRocks-3.1.15/be/log
和 /data/starrocks/be/log
两个位置的日志。
注意:如果是新加入集群,/data/starrocks/storage 目录下不能有数据,尤其是 /data/starrocks/storage/meta 目录
3.2、增加允许加入的节点
需要登录 FE 节点,用mysql客户端登录:mysql -P9030 -h127.0.0.1 -uroot
查看 BE 节点状态,命令:SHOW PROC '/backends' \G

添加允许接入的 FE 节点,命令:ALTER SYSTEM ADD FOLLOWER "xx.xx.xx.xx:nnnn"
;

稍等,BE就会一个个连接过来。

3.3、增加systemd监控
为了方便启停和监控,可以增加 systemd 监控配置文件 /lib/systemd/system/srbe.service
,内容如下:
[Unit]
Description=StarRocks
Documentation=https://www.starrocks.io/
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
NotifyAccess=all
RuntimeDirectory=StarRocks-3.1.15-be
PrivateTmp=true
WorkingDirectory=/opt/StarRocks-3.1.15/be
ExecStart=/opt/StarRocks-3.1.15/be/bin/start_be.sh
ExecStop=/opt/StarRocks-3.1.15/be/bin/stop_be.sh
StandardOutput=journal
StandardError=inherit
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
MemoryLimit=20G
[Install]
WantedBy=multi-user.target
重现加载 systemd 配置:systemctl daemon-reload
启动StarRocks:systemctl start srbe
发表回复