一、硬件配置
虚拟机数量: 3台(1 FE + 3 BE)
每台虚拟机配置:
CPU: 10核
在终端中运行以下命令来检查 CPU 是否支持 AVX2 指令集:
cat /proc/cpuinfo | grep avx2
内存: 14GB
存储: 400GB SSD
网络: 1Gbps
二、 软件配置
操作系统: CentOS 7.9
StarRocks版本: 待测试的三个版本(如2.5.22,3.3.13,3.4.3)
三、安装部署
3.1 3台CentOS虚拟机安装 Java 11
sudo yum install java-11-openjdk
java -version
3.2 将压缩包上传至虚拟机后进行解压
tar -zxvf StarRocks-3.3.13-centos-amd64.tar.gz
#这里解压后的文件夹名为“StarRocks-3.3.13-centos-amd64”,为了后续方便,建议重命名为StarRocks-版本号
mv StarRocks-3.3.13-centos-amd64 StarRocks-3.3.13
#解压完成后进入StarRocks-3.3.13路径
cd /home/bigdata/StarRocks-3.3.13
3.3 创建目录
#为FE创建的元数据目录
mkdir -p ./fe/meta
#为创建的数据存储路径
mkdir -p ./be/storage
3.3 部署FE节点
#修改FE配置文件
vi ./fe/conf/fe.conf
#修改以下四个地方
1、取消对“LOG DIR = ${STARROCKS_HOME}/log”的注释
2、修改jvm内存为1024
3、取消对“meta_dir = ${STARROCKS_HOME}/xxx”的注释,并将xxx替换为已创建的元数据目录meta
4、将priority_networks修改为本机ip
3.4 部署BE节点
#修改FE配置文件
vi ./be/conf/be.conf
#修改以下三个地方
1、将priority_networks修改为本机ip
2、取消对“storage_root_path = ${STARROCKS HOME}/xxx”的注释,并将xxx替换为创建的数据存储路径storage
3、增加了限制jvm的内存 JAVA_OPTS="-Xmx1024"
3.5 关闭防火墙
#因为是fe+be所以端口多点,可以直接关闭防火墙
#停掉防火墙
systemctl stop firewalld
#永久关闭防火墙
systemctl disable firewalld
#查看防火墙状态,显示Active: inactive (dead)证明操作成功
systemctl status firewalld
3.6 启动FE和BE节点
./fe/bin/start_fe.sh --daemon
./be/bin/start_be.sh --daemon
3.7 查看FE和BE节点是否启动成功
cat ./fe/log/fe.log | grep thrift
cat ./be/log/be.INFO | grep heartbeat
如果日志打印以下内容,则说明该 FE 节点启动成功:
"2025-05-12 16:12:29,911 INFO (UNKNOWN x.x.x.x_9010_1660119137253(-1)|1) [FeServer.start():52] thrift server started with port 9020."
如果日志打印以下内容,则说明该 BE 节点启动成功:
"I0614 17:41:39.782819 3717531 thrift_server.cpp:388] heartbeat has started listening port on 9050"
以上述同样的方式启动另外两个ip的FE和BE节点
3.8 使用前面安装的MySQL登录
mysql -h 10.8.15.153 -P 9030 -u root
#查看fe节点状态
SHOW PROC '/frontends'\G
#将BE节点加入集群
ALTER SYSTEM ADD BACKEND "10.8.15.153:9050", "10.8.15.154:9050", "10.8.15.156:9050";
#查看be节点状态
SHOW PROC '/backends'\G
对应网址: StarRocks Cluster
#停止FE和BE节点
./fe/bin/stop_fe.sh
./be/bin/stop_be.sh
四、安装部署过程可能会出现的问题
4.1 端口被占用导致启动节点失败
以BE节点的 HeartBeat 服务未能启动,原因是端口 9050 被占用为例:
运行以下命令确认端口 9050 是否被其他进程占用:
netstat -tlnp | grep 9050
杀掉占用端口9050的进程
kill -9 <进程id>
再次使用第一条命令来确认端口9050是否被其他进程占用,如果此时没有显示任何进程占用端口,说明端口已被释放,即可重新启动BE节点
4.2 启动FE节点时遇到拒绝连接的问题
[bigdata@localhost StarRocks-3.3.13]$ cat ./fe/log/fe.log | grep thrift org.apache.thrift.TException: java.net.ConnectException: 拒绝连接 (Connection refused)2025-05-09 13:13:13.936+08:00 INFO (UNKNOWN 10.8.15.153_9010_1746767585018(-1)|1) [FrontendThriftServer.start():65] thrift server started with port 9020.org.apache.thrift.TException: java.net.ConnectException: 拒绝连接 (Connection refused)2025-05-09 13:15:38.527+08:00 INFO (UNKNOWN 10.8.15.153_9010_1746767585018(-1)|1) [FrontendThriftServer.start():65] thrift server started with port 9020.
可能原因:
-
端口冲突: FE 服务的端口(如 9010 或 9020)被其他进程占用。
-
BE服务不可达: FE 需要与 BE 通信,但 BE 未启动或未正确配置。
-
网络问题: 防火墙规则未正确配置,或网络不通。
-
配置文件错误: FE 的配置文件中指定了错误的 BE 地址或端口。
4.3 复制已配置好的文件到其他虚拟机
在 StarRocks集群部署中,直接复制第一个节点的配置文件夹到其他节点并简单修改部分配置可能会导致集群无法正常运行,原因如下:
1. 节点唯一标识冲突
-
FE(Frontend)节点:
-
每个 FE 节点需要唯一的 node_id (在元数据目录 meta_dir 中生成)。
-
直接复制会导致所有 FE 节点共享相同的元数据标识,导致集群脑裂(split-brain)或启动失败。
-
FE 的元数据目录 ( meta_dir ) 必须独立初始化,不能直接复制。
-
-
BE(Backend)节点:
-
每个 BE 节点在集群中有唯一的 be_id (由 FE 分配),直接复制可能导致 BE 标识冲突。
-
2. 配置文件中的网络参数未更新
-
IP 地址和端口:
-
每个节点的 fe.conf 或 be.conf 中需要配置 本机 IP 和端口。
-
如果直接复制第一个节点的配置,其他节点的 IP 可能未正确修改,导致节点间无法通信。
-
-
集群配置依赖:
-
FE 节点的 priority_networks 参数需要绑定本机 IP。
-
BE 节点的 be_port 、 webserver_port 等端口需避免冲突。
-
3. 元数据与数据目录的在独立性
-
FE 元数据目录 ( meta_dir ):
-
FE 节点的元数据存储了集群拓扑、表结构、权限等信息。如果直接复制,其他 FE 会误以为自己已经是 Leader,导致元数据不一致。
-
-
BE 数据目录 ( storage_root_path ):
-
BE 的数据目录存储了分片(Tablet)的物理数据。直接复制会导致数据分片与集群元数据不一致,可能引发数据损坏。
-
!!!不要图方便,一定要在每台虚拟机下解压后分别安装部署