一、StarRocks简介
1、StarRocks概述
- StarRocks是新一代极速全场景MPP数据库。
- StarRocks充分吸收关系型
OLAP
数据库和分布式存储系统在大数据时代的优秀研究成果,在业界实践的基础上,进一步改进优化、升级架构,并增添了众多全新功能,形成了全新的企业级产品。 - StarRocks致力于构建极速统一分析体验,满足企业用户的多种数据分析场景,支持多种数据模型(明细模型、聚合模型、更新模型),多种导入方式(批量和实时),支持导入多达10000列的数据,可整合和接入多种现有系统(Spark、Flink、Hive、 ElasticSearch)。
- StarRocks兼容MySQL协议,可使用MySQL客户端和常用BI工具对接StarRocks来进行数据分析。
- StarRocks采用分布式架构,对数据表进行水平划分并以多副本存储。集群规模可以灵活伸缩,能够支持10PB级别的数据分析; 支持MPP框架,并行加速计算; 支持多副本,具有弹性容错能力。
- StarRocks采用关系模型,使用严格的数据类型和列式存储引擎,通过编码和压缩技术,降低读写放大;使用向量化执行方式,充分挖掘多核CPU的并行计算能力,从而显著提升查询性能。
2、StarRocks特性
StarRocks的架构设计融合了MPP数据库,以及分布式系统的设计思想,具有以下特性:
架构精简
StarRocks内部
全面向量化引擎
StarRocks的计算层全面采用了向量化技术,将所有算子、函数、扫描过滤和导入导出模块进行了系统性优化。通过列式的内存布局、适配CPU的SIMD指令集等手段,充分发挥了现代CPU的并行计算能力,从而实现亚秒级别的多维分析能力。
智能查询优化
StarRocks通过CBO优化器(Cost Based Optimizer)可以对复杂查询自动优化。无需人工干预,就可以通过统计信息合理估算执行成本,生成更优的执行计划,大大提高了Adhoc和ETL场景的数据分析效率。
联邦查询
StarRocks支持使用外表的方式进行联邦查询,当前可以支持Hive、MySQL、Elasticsearch三种类型的外表,用户无需通过数据导入,可以直接进行数据查询加速。
高
StarRocks支持多种数据模型,其中更新模型可以按照主键进行upsert/delete操作,通过存储和索引的优化可以在并发更新的同时实现高效的查询优化,更好的服务实时数仓的场景。
智能物化视图
StarRocks支持智能的物化视图。用户可以通过创建物化视图,预先计算生成预聚合表用于加速聚合类查询请求。StarRocks的物化视图能够在数据导入时自动完成汇聚,与原始表数据保持一致。并且在查询的时候,用户无需指定物化视图,StarRocks能够自动选择最优的物化视图来满足查询请求。
标准SQL
StarRocks支持标准的SQL语法,包括聚合、JOIN、排序、窗口函数和自定义函数等功能。StarRocks可以完整支持TPC-H的22个SQL和TPC-DS的99个SQL。此外,StarRocks还兼容MySQL协议语法,可使用现有的各种客户端工具、BI软件访问StarRocks,对StarRocks中的数据进行拖拽式分析。
流批一体
StarRocks支持实时和批量两种数据导入方式,支持的数据源有Kafka、HDFS、本地文件,支持的数据格式有ORC、Parquet和CSV等,支持导入多达10000列的数据。StarRocks可以实时消费Kafka数据来完成数据导入,保证数据不丢不重(exactly once)。StarRocks也可以从本地或者远程(HDFS)批量导入数据。
高可用易扩展
StarRocks的元数据和数据都是多副本存储,并且集群中服务有热备,多实例部署,避免了单点故障。集群具有自愈能力,可弹性恢复,节点的宕机、下线、异常都不会影响StarRocks集群服务的整体稳定性。 StarRocks采用分布式架构,存储容量和计算能力可近乎线性水平扩展。StarRocks单集群的节点规模可扩展到数百节点,数据规模可达到10PB级别。 扩缩容期间无需停服,可以正常提供查询服务。 另外StarRocks中表模式热变更,可通过一条简单SQL命令动态地修改表的定义,例如增加列、减少列、新建物化视图等。同时,处于模式变更中的表也可也正常导入和查询数据。
二、StarRocks部署
1、软硬件要求
环境准备
- 集群节点需要以下环境支持:
- Linux (Centos 7+)
- 推荐 Oracle Java 1.8+
- CPU 需要支持 AVX2 指令集
- ulimit -n 配置 65535,启动脚本会自动设置,需要启动的用户有设置 ulimit -n 权限
- 集群时钟需同步
- 网络需要万兆网卡和万兆交换机
- 测试集群建议节点配置:BE 推荐 16 核 64GB 以上,FE 推荐 8 核 16GB 以上。建议 FE,BE 独立部署。
2、部署FE服务
2.1:部署单台FE
- 先部署一台FE节点(默认为Leader),然后后面添加FE节点,实现FE的高可用
fe.conf
中 JAVA_OPTS 默认 java 最大堆内存为 8GB,为了避免 GC 建议 16G 以上,StarRocks 的元数据都在内存中保存- 生产环境强烈建议
meta_dir
单独指定目录不要放在 Doris安装目录下,最好是单独的磁盘(最后是SSD磁盘)
#创建元数据和日志存储目录,FE节点都需要创建
mkdir -p /data/StarRocks-fe/{StarRocks-meta,log}
[root@starrocks-fe_be01 ~]# vim /usr/local/StarRocks/fe/conf/fe.conf
#我们将StarRocks解压后的目录和修改的配置全部拷贝到另外的FE节点上
export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp -r /usr/local/StarRocks root@${node_ip}:/usr/local/
done
- 启动服务
#通过Systemd托管
cat > /usr/lib/systemd/system/StarRocks-fe.service <<EOF
[Unit]
Description=StarRocks FE Service
Documentation=https://www.starrocks.com/
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/StarRocks/fe/bin/start_fe.sh --daemon
ExecStop=/usr/local/StarRocks/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl restart StarRocks-fe.service && systemctl enable StarRocks-fe.service && systemctl status StarRocks-fe.service
#检查服务监听状态
ss -tnlp | grep 9030
ps -aux | grep StarRocks
2.2:FE高可用部署
- FE-HA配置FE的高可用集群采用主从复制架构, 可避免FE单点故障. FE采用了类
raft
的bdbje协议完成选主, 日志复制和故障切换. 在FE集群中, 多实例分为两种角色: follower和observer; 前者为复制协议的可投票成员, 参与选主和提交日志, 一般数量为奇数(2n+1), 使用多数派(n+1)确认, 可容忍少数派(n)故障; 而后者属于非投票成员, 用于异步订阅复制日志, observer的状态落后于follower, 类似其他复制协议中的leaner角色. - FE集群从follower中自动选出master节点, 所有更改状态操作都由master节点执行, 从FE的master节点可以读到最新的状态. 更改操作可以从非master节点发起, 继而转发给master节点执行, 非master节点记录最近一次更改操作在复制日志中的LSN, 读操作可以直接在非master节点上执行, 但需要等待非master节点的状态已经同步到最近一次更改操作的LSN, 因此读写非Master节点满足顺序一致性. Observer节点能够增加FE集群的读负载能力, 时效性要求放宽的非紧要用
文章来源(Source):https://www.dqzboy.com 户可以读observer节点. - FE节点之间的时钟相差不能超过5s, 使用NTP协议校准时间.
- 一台机器上只可以部署单个FE节点。所有FE节点的
http_port
需要相同。
#连接到FE,需要提前安装MySQL客户端程序
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot
#默认root无密码,通过以下命令修改 root密码 。
mysql> SET PASSWORD FOR 'root' = PASSWORD('admin123456');
mysql> ALTER SYSTEM ADD FOLLOWER "192.168.66.132:9010";
mysql> ALTER SYSTEM ADD OBSERVER "192.168.66.133:9010";
说明:Follower和 Observer节点启动时需要指定Leader节点,启动添加参数 –helper leader主机:edit_log_port
cat > /opt/StarRocks-fe.service <<EOF
[Unit]
Description=StarRocks FE Service
Documentation=https://www.starrocks.com/
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/StarRocks/fe/bin/start_fe.sh --helper 192.168.66.131:9010 --daemon
ExecStop=/usr/local/StarRocks/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
#拷贝配置至另外的FE节点
export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp /opt/StarRocks-fe.service root@${node_ip}:/usr/lib/systemd/system/
done
注意:登入另外的FE节点修改配置中的 priority_networks 参数为对应节点的IP地址
#启动FE服务
systemctl daemon-reload && systemctl restart StarRocks-fe.service && systemctl enable StarRocks-fe.service &&systemctl status StarRocks-fe.service
2.3:检查FE集群信息
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
mysql> SHOW PROC '/frontends'\G
3、部署BE服务
- storage_root_path:默认在 be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ;分隔(最后一个目录后不要加)
- priority_networks:修改绑定 ip,每台机器修改成自己的 ip
- PPROF_TMPDIR:修改为指定存储的目录
3.1:拷贝修改BE配置
#创建数据和日志存储目录,BE节点都需要创建
mkdir -p /data/StarRocks-be/{storage1,storage2,log}
[root@StarRocks-fe_be01 ~]# vim /usr/local/StarRocks/be/conf/be.conf
将BE相关的配置和目录拷贝至其他的BE节点,然后登入到各个节点修改BE配置文件,修改绑定IP为自己的IP地址
export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp /usr/local/StarRocks/be/conf/be.conf root@${node_ip}:/usr/local/StarRocks/be/conf/
done
#登入其他BE节点修改绑定IP
~]# vim /usr/local/StarRocks/be/conf/be.conf
3.2:FE添加BE节点
- 使用 MySQL Client连接 FE,添加BE
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
ALTER SYSTEM ADD BACKEND "192.168.66.131:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.132:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.133:9050";
3.3:启动BE服务
#通过Systemd托管程序
cat > /usr/lib/systemd/system/StarRocks-be.service <<EOF
[Unit]
Description=Doris BE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
User=root
Group=root
ExecStart=/usr/local/StarRocks/be/bin/start_be.sh --daemon
ExecStop=/usr/local/StarRocks/be/bin/stop_be.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
#拷贝Service服务配置
export NODE_IPS=(192.168.66.131 192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp /usr/lib/systemd/system/StarRocks-be.service root@${node_ip}:/usr/lib/systemd/system/
done
#启动服务
export NODE_IPS=(192.168.66.131 192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl daemon-reload && systemctl restart StarRocks-be.service && systemctl enable StarRocks-be.service && systemctl status StarRocks-be.service"
done
3.4:检查BE服务
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
#Alive为 true表示该 BE节点存活
mysql> SHOW PROC '/backends'\G
三、StarRock UI
默认使用 Http 协议进行 WebUI 访问,在浏览器输入以下格式地址访问
http://FE_IP:FE_HTTP_PORT(默认8030)
- 默认账号:
root
- 默认密码:
数据库root密码
之前在进行M
必须 注册 为本站用户, 登录 后才可以发表评论!