一、StarRocks 集群模型搭建
上篇文章对 StarRocks
进行了简单的介绍及使用 Docker
进行了快速体验,本篇文章进行StarRocks
集群模型的搭建,下面是上篇文章的地址:
StarRocks 极速全场景 MPP 数据库介绍及使用
部署规划
host | 主机名 | 角色 |
---|---|---|
192.168.244.128 | node1 | FE Leader、BE |
192.168.244.130 | node2 | FE Follower、BE |
192.168.244.131 | node3 | FE Follower、BE |
StarRocks
依赖于 JVM
,因此确保安装前已经安装好 Java
环境。
关闭防火墙(可选):
临时:
systemctl stop firewalld
永久:
systemctl disable firewalld
三台服务分别设置 hosts
:
cat >> /etc/hosts << EOF
192.168.244.128 node1
192.168.244.130 node2
192.168.244.131 node3
EOF
下载安装包
https://www.starrocks.io/download/community
下载后上传至其中一台服务器中,这里我上传至 node1
服务器中。
解压:
tar -zxvf StarRocks-3.0.0.tar.gz
部署 FE
进入到解压目录下的 fe
下,修改 conf/fe.conf
中 JVM
的堆大小,根据实际的大小设置:
vi conf/fe.conf
注意:如果电脑有多个网卡,可以通过修改 priority_networks
指定:
创建元数据目录:
mkdir meta
进入到解压目录的 be
下,创建数据存储目录:
mkdir storage
回到解压位置,将改好的 StarRocks
包分发至node2
、node3
服务器中:
scp -r StarRocks-3.0.0 root@node2:/opt/
scp -r StarRocks-3.0.0 root@node3:/opt/
启动 FE Leader
在 node1
中启动FE
节点,进入到解压目录的 fe
目录下:
bin/start_fe.sh --daemon
查看进程是否存在:
jps
此时可以使用 MySQL
客户端连接FE
,用户名:root
,密码为空,端口:9030
:
mysql -h node1 -u root -P 9030
查看FE
状况,alive
为true
表示正常运行::
SHOW PROC '/frontends'\G
启动 FE Follower、Observer
下面分别启动 node2
、node3
节点的 fe
,第一次启动需指定--helper
参数,后续再启动无需指定此参数 :
bin/start_fe.sh --helper node1:9010 --daemon
前部启动后,回到 MySQL 客户端:
添加node2
、node3
服务的 FE
节点,角色也分为FOLLOWER
、OBSERVER
:
ALTER SYSTEM ADD FOLLOWER "node2:9010";
ALTER SYSTEM ADD FOLLOWER "node3:9010";
补充:如果需要添加 observer 可以使用下面指令:
ALTER SYSTEM ADD OBSERVER "node4:9010";
再次查看FE
状况,alive
为true
表示正常运行:
SHOW PROC '/frontends'\G
启动 BE
进入到解压目录的 be
下,分别启动三台服务的 BE
节点:
bin/start_be.sh --daemon
在 MySQL
客户端连接中加入 BE
:
ALTER SYSTEM ADD BACKEND "node1:9050";
ALTER SYSTEM ADD BACKEND "node2:9050";
ALTER SYSTEM ADD BACKEND "node3:9050";
查看BE
状况,同样 alive
为 true
表示正常运行:
SHOW PROC '/backends'\G
二、环境测试
创建数据库:
create database testdb;
使用数据库:
use testdb;
创建一个主键模型表 :
CREATE TABLE IF NOT EXISTS grade (
id BIGINT NOT NULL,
name STRING NOT NULL,
sex TINYINT NULL,
grade INT NULL
) PRIMARY KEY (id)
DISTRIBUTED BY HASH(id) BUCKETS 4;
创建一个聚合模型表:
CREATE TABLE IF NOT EXISTS agg_grade (
name VARCHAR(20) NOT NULL COMMENT "name",
sum_grade BIGINT SUM DEFAULT "0",
max_grade BIGINT MAX DEFAULT "0"
)
DISTRIBUTED BY HASH(name) BUCKETS 8;
查看表:
SHOW TABLES;
写入测试数据:
INSERT INTO grade(id, name, sex, grade) VALUES(1,'小明',1,90);
INSERT INTO grade(id, name, sex, grade) VALUES(1,'小明',1,100);
INSERT INTO grade(id, name, sex, grade) VALUES(2,'小红',1,90);
INSERT INTO grade(id, name, sex, grade) VALUES(3,'小兰',1,90);
INSERT INTO grade(id, name, sex, grade) VALUES(4,'小六',1,90);
INSERT INTO agg_grade(name, sum_grade, max_grade) VALUES('张三',90,90);
INSERT INTO agg_grade(name, sum_grade, max_grade) VALUES('张三',90,90);
INSERT INTO agg_grade(name, sum_grade, max_grade) VALUES('张三',90,90);
INSERT INTO agg_grade(name, sum_grade, max_grade) VALUES('李四',90,90);
INSERT INTO agg_grade(name, sum_grade, max_grade) VALUES('李四',90,90);
INSERT INTO agg_grade(name, sum_grade, max_grade) VALUES('李四',90,90);
INSERT INTO agg_grade(name, sum_grade, max_grade) VALUES('李四',90,90);
查询 grade
表:
SELECT * FROM grade;
查询 agg_grade
表:
SELECT * FROM agg_grade;