文章目录
CentOS7安装部署StarRocks
一、前言
1.简介
- Apache Doris:Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
- StarRocks:StarRocks 基于 Apache Doris (incubating) 0.13 打造;StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。
- 镜舟数据库:基于 StarRocks 发展起来的企业级商用数据库,满足金融、物流、汽车、能源、医疗等政企客户对技术支持、解决方案、生态建设、售后保障等方面的极致要求。
2.环境
- Linux 发行版:CentOS-7-x86_64-DVD-1804.iso
- JDK 版本:Java SE Development Kit 11.0.19
- StarRocks 版本:2.5.13
二、正文
1.StarRocks基础
1)架构图
- FE 是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。每个 FE 节点都会在内存保留一份完整的元数据,这样每个 FE 节点都能够提供无差别的服务。
对于 StarRocks 生产集群,建议至少部署三个 Follower FE 节点,以防止单点故障。
- BE 是 StarRocks 的后端节点,负责数据存储、SQL执行等工作。
对于 StarRocks 生产集群,建议至少部署三个 BE 节点,这些节点会自动形成一个 BE 高可用集群,避免由于发生单点故障而影响数据可靠性和服务可用性。
通过增加 BE 节点的数量来实现查询的高并发。
- Compute Node(CN)是一种无状态的计算服务,本身不存储数据,仅负责 SQL 执行;通过添加 CN 节点为查询提供额外的计算资源,而无需改变集群中的数据分布;CN 节点自 v2.4 版本起支持。
2)通讯端口
- FE 端口
端口 | 端口名称 | 端口说明 |
---|---|---|
8030 | http_port | FE HTTP Server 端口 |
9020 | rpc_port | FE Thrift Server 端口 |
9030 | query_port | FE MySQL Server 端口 |
9010 | edit_log_port | FE 内部通讯端口 |
- BE 端口
端口 | 端口名称 | 端口说明 |
---|---|---|
9060 | be_port | BE Thrift Server 端口 |
8040 | webserver_port | BE HTTP Server 端口 |
9050 | heartbeat_service_port | BE 心跳服务端口 |
8060 | brpc_port | BE BRPC 端口 |
- CN 端口
端口 | 端口名称 | 端口说明 |
---|---|---|
9060 | thrift_port | CN Thrift Server 端口 |
8040 | webserver_port | CN HTTP Server 端口 |
9050 | heartbeat_service_port | CN 心跳服务端口 |
8060 | brpc_port | CN BRPC 端口 |
- FE 元数据存放位置:
meta_dir = /data/starrocks/metadata
- BE 数据存放目录:
storage_root_path = /data/starrocks/storage
2.部署服务器
集群名 | IP 地址 | 实例 |
---|---|---|
sr001 | 192.168.249.131 | FE |
sr002 | 192.168.249.132 | BE |
sr003 | 192.168.249.133 | BE |
sr004 | 192.168.249.134 | CN |
通常,FE 服务不会消耗大量的 CPU 和内存资源。建议您为每个 FE 节点分配 8 个 CPU 内核和 16 GB RAM。
与 FE 服务不同,如果应用程序需要在大型数据集上处理高度并发或复杂的查询,BE 服务可能会使用大量 CPU 和内存资源。因此,建议为每个 BE 节点分配 16 个 CPU 内核和 64 GB RAM。
3.安装基础环境
在 4 台服务器上执行基础环境的安装和配置
1)安装JDK 11
- 参考:CentOS7安装部署Java11
- 安装目录:
/opt/java/jdk-11.0.19
2)修改机器名
- 修改 4 台服务器的机器名
cmd
#-- sr001
hostnamectl set-hostname sr001 --static
hostnamectl set-hostname sr001 --transient
#-- sr002
hostnamectl set-hostname sr002 --static
hostnamectl set-hostname sr002 --transient
#-- sr003
hostnamectl set-hostname sr003 --static
hostnamectl set-hostname sr003 --transient
#-- sr004
hostnamectl set-hostname sr004 --static
hostnamectl set-hostname sr004 --transient
3)安装GCC
cmd
yum -y install gcc
gcc --version
4)关闭交换分区(swap)
- 查询交换分区
cmd
swapon --show
- 关闭交换分区
cmd
# 备用:打开交换分区:swapon -a
swapoff -a
- 编辑
/etc/fstab
cmd
vim /etc/fstab
- 加入注释
cmd
# /dev/mapper/centos-swap swap swap defaults 0 0
5)时钟同步
- 安装 rdate 软件包
cmd
#安装rdate
yum -y install rdate
#同步时间
rdate -s time-b.nist.gov
#查看时间是否正确
date
- 安装定时器软件包
cmd
yum -y install crontab
- 创建 crontab 任务
cmd
crontab -e
- 写入内容:20 秒同步一次
cmd
*/20 * * * * /usr/bin/rdate -s time-b.nist.gov > /dev/null 2>&1
- 重启 crontab 服务
cmd
service crond reload
- 其它时间同步服务器节点
节点位置 | 节点域名 |
---|---|
东南大学 | s1d.time.edu.cn |
清华大学 | s1e.time.edu.cn |
清华大学 | s2a.time.edu.cn |
清华大学 | s2b.time.edu.cn |
北京邮电大学 | s2c.time.edu.cn |
上海交通大学 | ntp.sjtu.edu.cn |
北京邮电大学 | s1a.time.edu.cn |
北京大学 | s1c.time.edu.cn |
香港中文大学 | clock.cuhk.edu.hk |
6)关闭防火墙
- 可禁用防火墙,或配置开放的端口,后者比较安全
cmd
#--关闭防火墙
systemctl stop firewalld.service
#--开机禁用防火墙
systemctl disable firewalld.service
#--防火墙状态
systemctl status firewalld.service
7)SELinux
- 禁用 SELinux
cmd
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
sed -i 's/SELINUXTYPE/#SELINUXTYPE/' /etc/selinux/config
setenforce 0
8)LANG 变量
cmd
echo "export LANG=en_US.UTF8" >> /etc/profile
source /etc/profile
9)时区
cmd
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock
10)ulimit 设置
- 最大文件描述符
cmd
ulimit -n 655350
- 最大用户进程
cmd
ulimit -u 40960
11)网络配置
- 如果系统当前因后台进程无法处理的新连接而溢出,则允许系统重置新连接
cmd
echo 1 | sudo tee /proc/sys/net/ipv4/tcp_abort_on_overflow
- 设置监听 Socket 队列的最大连接请求数为
1024
cmd
echo 1024 | sudo tee /proc/sys/net/core/somaxconn
12)高并发配置
cmd
echo 120000 > /proc/sys/kernel/threads-max
echo 262144 > /proc/sys/vm/max_map_count
echo 200000 > /proc/sys/kernel/pid_max
4.集群部署
1)安装FE
FE 服务器:192.168.249.131
- 创建安装目录
cmd
mkdir /opt/starrocks
cd /opt/starrocks
- 下载安装包,当前安装版本:
2.5.13
cmd
wget https://releases.starrocks.io/starrocks/StarRocks-2.5.13.tar.gz
- 解压安装包
cmd
tar -xzvf StarRocks-2.5.13.tar.gz
- 移动 FE 文件夹到安装目录:
/opt/starrocks/
cmd
mv /opt/starrocks/StarRocks-2.5.13/fe/ /opt/starrocks/
- 创建 FE 元数据目录
cmd
mkdir -p /data/starrocks/metadata
chmod -R 777 /data/starrocks/metadata
- 编辑配置文件
cmd
vim ./fe/conf/fe.conf
- 修改内容:
cmd
# JAVA_OPTS 上面一行
JAVA_HOME=/opt/java/jdk-11.0.19
# 绑定 IP
priority_networks=192.168.249.131/24
# 元数据目录
meta_dir=/data/starrocks/metadata
- 启动 FE
cmd
cd /opt/starrocks
# 启动
./fe/bin/start_fe.sh --daemon
# (备用)停止
# ./fe/bin/stop_fe.sh
- 测试启动是否成功,方法一:
cmd
cat fe/log/fe.log | grep thrift
- 输出以下内容,表示启动成功
cmd
thrift server started with port 9020.
- 测试启动是否成功,方法二:
-
成功提示:
html
{"replayedJournalId":0,"queryPort":0,"rpcPort":0,"feStartTime":0,"status":"OK","msg":"Success"}
2)拷贝BE
FE 服务器:192.168.249.131
- BE 服务器和 CN 服务器创建目录
cmd
mkdir -p /opt/starrocks
- 拷贝 BE 安装包至 BE 服务器和 CN 服务器
cmd
scp -r /opt/starrocks/StarRocks-2.5.13/be root@192.168.249.132:/opt/starrocks/be
scp -r /opt/starrocks/StarRocks-2.5.13/be root@192.168.249.133:/opt/starrocks/be
scp -r /opt/starrocks/StarRocks-2.5.13/be root@192.168.249.134:/opt/starrocks/be
3)安装BE
BE 服务器:192.168.249.132、192.168.249.133
- 创建安装目录
cmd
cd /opt/starrocks
- 创建存储目录
cmd
mkdir -p /data/starrocks/storage
chmod -R 777 /data/starrocks/storage
- 修改配置文件
cmd
vim ./be/conf/be.conf
- 修改内容:
- 绑定服务器 IP;注意区分不同服务器 IP
priority_networks=192.168.249.132/24
priority_networks=192.168.249.133/24
cmd
# 绑定 IP
priority_networks=192.168.249.132/24
# 存储目录
storage_root_path=/data/starrocks/storage
# JAVA_HOME
JAVA_HOME=/opt/java/jdk-11.0.19
- 限制一个进程可以拥有的VMA(虚拟内存区域)的数量
cmd
vim /etc/sysctl.conf
- 写入内容
cmd
vm.max_map_count=2000000
fs.file-max=6553560
- 加载并应用配置文件
cmd
sysctl -p
- 启动 BE
cmd
cd /opt/starrocks
# 启动
./be/bin/start_be.sh --daemon
# (备用)停止
# ./be/bin/stop_be.sh
- 测试启动是否成功,方法一:
cmd
cat be/log/be.INFO | grep heartbeat
- 输出以下内容,表示启动成功
cmd
thrift server started with port 9020.
- 测试启动是否成功,方法二:
- 浏览器访问:
http://192.168.249.132:8040/api/health
http://192.168.249.133:8040/api/health
- 成功提示:
html
{"status": "OK","msg": "To Be Added"}
4)安装CN【可选】
BE 服务器:192.168.249.134
CN 节点是 StarRocks 的可选组件,CN 节点自 v2.4 版本起支持
- 创建安装目录
cmd
cd /opt/starrocks
- 修改配置文件
cmd
vim ./be/conf/cn.conf
- 修改内容:
- 绑定服务器 IP;注意区分不同服务器 IP
cmd
# 绑定 IP
priority_networks=192.168.249.134/24
# JAVA_HOME
JAVA_HOME=/opt/java/jdk-11.0.19
- 限制一个进程可以拥有的VMA(虚拟内存区域)的数量
cmd
vim /etc/sysctl.conf
- 写入内容
cmd
vm.max_map_count=2000000
fs.file-max=6553560
- 加载并应用配置文件
cmd
sysctl -p
- 启动 BE
cmd
cd /opt/starrocks
# 启动
./be/bin/start_cn.sh --daemon
#(备用)停止
# ./be/bin/stop_cn.sh
- 测试启动是否成功
cmd
cat be/log/cn.INFO | grep heartbeat
- 输出以下内容,表示启动成功
cmd
heartbeat has started listening port on 9050.
5)安装MySQL客户端
可忽略,使用 Navicat 替代
FE 服务器:192.168.249.131
- 创建安装目录
cmd
mkdir /opt/mysql
cd /opt/mysql
- 下载安装软件包
cmd
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-common-8.0.25-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-libs-8.0.25-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-client-8.0.25-1.el7.x86_64.rpm
- 安装 RPM 软件包
cmd
rpm -Uvh *.rpm --nodeps --force
6)集群搭建
- MySQL 客户端连接(无密码)
cmd
mysql -h 192.168.249.131 -P 9030 -uroot -p
- 新增两个 BE 和 一个 CN
cmd
# 备用(删除BE节点):ALTER SYSTEM DROPP BACKEND "192.168.249.132:9050";
ALTER SYSTEM ADD BACKEND "192.168.249.132:9050","192.168.249.133:9050";
# CN 节点(可选)
# 备用(删除CN节点):ALTER SYSTEM DROP COMPUTE NODE "192.168.249.134:9050";
ALTER SYSTEM ADD COMPUTE NODE "192.168.249.134:9050";
- 修改密码
cmd
SET PASSWORD FOR 'root' = PASSWORD('srdb123');
- 设置数据库时区
cmd
# 查询当前时间
select NOW();
# 查询时区
SHOW VARIABLES LIKE '%time_zone%';
# 设置时区
SET global time_zone = 'Asia/Shanghai';
- 节点状态
cmd
# 查询 FE 节点状态
SHOW PROC '/frontends'\G
# 查询 BE 节点状态
SHOW PROC '/backends'\G
# 查询 CN
SHOW PROC '/compute_nodes'\G
7)测试
- 创建数据库(MySQL 客户端执行)
cmd
create database demo;
- 创建数据表
cmd
CREATE TABLE IF NOT EXISTS example_tb
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
`max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
`min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_num" = "1"
);
- 输出表结构
cmd
desc example_tb;
- 插入数据
cmd
insert into example_tb values
(10000,"2017-10-01","北京",20,0,"2017-10-01 06:00:00",20,10,10),
(10000,"2017-10-01","北京",20,0,"2017-10-01 07:00:00",15,2,2),
(10001,"2017-10-01","北京",30,1,"2017-10-01 17:05:45",2,22,22),
(10002,"2017-10-02","上海",20,1,"2017-10-02 12:59:12",200,5,5),
(10003,"2017-10-02","广州",32,0,"2017-10-02 11:20:00",30,11,11),
(10004,"2017-10-01","深圳",35,0,"2017-10-01 10:00:15",100,3,3),
(10004,"2017-10-03","深圳",35,0,"2017-10-03 10:20:22",11,6,6);
- 查询数据
cmd
SELECT * FROM example_tb;
8)WebUI
- 浏览器访问:http://192.168.249.131:8030
- 账号:root
- 密码:输入客户端修改的密码(srdb123);默认无密码
5.服务自启动
1)配置FE自启动
- 创建
starrocks-fe.service
,写入内容(根据实际情况修改ExecStart
和ExecStop
)
cmd
cat > /etc/systemd/system/starrocks-fe.service <<EOF
[Unit]
Description=StarRocks FE
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=root
Group=root
LimitCORE=infinity
LimitNOFILE=200000
Restart=on-failure
RestartSec=30
StartLimitInterval=120
StartLimitBurst=3
KillMode=none
ExecStart=/opt/starrocks/fe/bin/start_fe.sh --daemon
ExecStop=/opt/starrocks/fe/bin/stop_fe.sh
[Install]
WantedBy=multi-user.target
EOF
- 查看文件
cmd
cat /etc/systemd/system/starrocks-fe.service
2)配置BE自启动
- 创建
starrocks-be.service
,写入内容(根据实际情况修改ExecStart
和ExecStop
)
cmd
cat > /etc/systemd/system/starrocks-be.service <<EOF
[Unit]
Description=StarRocks BE
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=root
Group=root
LimitCORE=infinity
LimitNOFILE=200000
Restart=on-failure
RestartSec=30
StartLimitInterval=120
StartLimitBurst=3
KillMode=none
ExecStart=/opt/starrocks/be/bin/start_be.sh --daemon
ExecStop=/opt/starrocks/be/bin/stop_be.sh
[Install]
WantedBy=multi-user.target
EOF
- 查看文件
cmd
cat /etc/systemd/system/starrocks-be.service
3)配置CN自启动
- 创建
starrocks-cn.service
,写入内容(根据实际情况修改ExecStart
和ExecStop
)
cmd
cat > /etc/systemd/system/starrocks-cn.service <<EOF
[Unit]
Description=StarRocks CN
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=root
Group=root
LimitCORE=infinity
LimitNOFILE=200000
Restart=on-failure
RestartSec=30
StartLimitInterval=120
StartLimitBurst=3
KillMode=none
ExecStart=/opt/starrocks/be/bin/start_cn.sh --daemon
ExecStop=/opt/starrocks/be/bin/stop_cn.sh
[Install]
WantedBy=multi-user.target
EOF
- 查看文件
cmd
cat /etc/systemd/system/starrocks-cn.service
4)启动服务
- 重新加载配置
cmd
systemctl daemon-reload
- 启动服务
cmd
systemctl start starrocks-fe
systemctl start starrocks-be
systemctl start starrocks-cn
- 设置开机自启动
cmd
systemctl enable starrocks-fe
systemctl enable starrocks-be
systemctl enable starrocks-cn
- 查询服务状态
cmd
systemctl status starrocks-fe
systemctl status starrocks-be
systemctl status starrocks-cn