StarRocks 3.0 集群安装手册

Posted 张冲andy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StarRocks 3.0 集群安装手册相关的知识,希望对你有一定的参考价值。

本文介绍如何以二进制安装包方式手动部署最新版 StarRocks 3.0集群。

什么是 StarRocks

StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。

StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。

StarRocks 能很好地支持实时数据分析,并能实现对实时更新数据的高效查询。StarRocks 还支持现代化物化视图,进一步加速查询。

使用 StarRocks,用户可以灵活构建包括大宽表、星型模型、雪花模型在内的各类模型。

StarRocks 兼容 MySQL 协议,支持标准 SQL 语法,易于对接使用,全系统无外部依赖,高可用,易于运维管理。StarRocks 还兼容多种主流 BI 产品,包括 Tableau、Power BI、FineBI 和 Smartbi。

适用场景

StarRocks 可以满足企业级用户的多种分析需求,包括 OLAP (Online Analytical Processing) 多维分析、定制报表、实时数据分析和 Ad-hoc 数据分析等。

OLAP 多维分析

利用 StarRocks 的 MPP 框架和向量化执行引擎,用户可以灵活的选择雪花模型,星型模型,宽表模型或者预聚合模型。适用于灵活配置的多维分析报表,业务场景包括:

  • 用户行为分析

  • 用户画像、标签分析、圈人

  • 高维业务指标报表

  • 自助式报表平台

  • 业务问题探查分析

  • 跨主题业务分析

  • 财务报表

  • 系统监控分析

实时数据仓库

StarRocks 设计和实现了 Primary-Key 模型,能够实时更新数据并极速查询,可以秒级同步 TP (Transaction Processing) 数据库的变化,构建实时数仓,业务场景包括:

  • 电商大促数据分析

  • 物流行业的运单分析

  • 金融行业绩效分析、指标计算

  • 直播质量分析

  • 广告投放分析

  • 管理驾驶舱

  • 探针分析APM(Application Performance Management)

高并发查询

StarRocks 通过良好的数据分布特性,灵活的索引以及物化视图等特性,可以解决面向用户侧的分析场景,业务场景包括:

  • 广告主报表分析

  • 零售行业渠道人员分析

  • SaaS 行业面向用户分析报表

  • Dashboard 多页面分析

统一分析

  • 通过使用一套系统解决多维分析、高并发查询、预计算、实时分析查询等场景,降低系统复杂度和多技术栈开发与维护成本。

  • 使用 StarRocks 统一管理数据湖和数据仓库,将高并发和实时性要求很高的业务放在 StarRocks 中分析,也可以使用 External Catalog 和外部表进行数据湖上的分析。

前提条件

在部署生产环境 StarRocks 之前,请确保如下环境要求已满足。

说明

  • 如果您想在 Ubuntu 22.04 或 ARM 架构处理器上运行 StarRocks,则需要从 StarRocks Docker Hub 下载并运行特定标签的 Docker 镜像,并从 Docker 容器目录 /data/starrocks 下复制二进制文件到您的主机。

  • 依据不同的工作负载复杂性,StarRocks 每个 CPU 线程每秒可以处理 10M 至 100M 行数据。您可以据此估计集群中需要多少 CPU 线程能够满足您的要求。而 StarRocks 在存储数据时利用列存储和压缩,可以达到 4-10 倍的压缩比,您可以使用该数据来估计集群所需的存储量。

  • StarRocks 仅支持 JDK 作为依赖,不支持使用 JRE。

     

    系统参数配置

关闭Transparent Huge Pages 与 部分内核参数
echo never > /sys/kernel/mm/transparent_hugepage/enabledchmod +x /etc/rc.d/rc.localecho "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >>/etc/rc.d/rc.local
echo "echo 120000 > /proc/sys/kernel/threads-max" >>/etc/rc.d/rc.local
echo "echo 60000  > /proc/sys/vm/max_map_count" >>/etc/rc.d/rc.local
echo "echo 200000 > /proc/sys/kernel/pid_max" >>/etc/rc.d/rc.local

编辑 /etc/sysctl.conf ,调整内核参数vm.overcommit_memory=1vm.swappiness=0vm.min_free_kbytes = 10551236vm.max_map_count=655350fs.aio-max-nr = 1048576fs.nr_open=20480000fs.file-max = 76724600net.core.somaxconn = 65535net.core.netdev_max_backlog = 65535net.ipv4.tcp_max_syn_backlog = 65535net.ipv4.tcp_abort_on_overflow=1
内核参数生效sysctl -p

安装JDK

 tar -zxvf /opt/jdk1.8.0_221.tar.gz -C /opt/

添加环境变量  /root/.bash_profile 

下载并解压安装包

下载 StarRocks 分发各节点并解压二进制安装包。

 tar -zxvf /opt/StarRocks-3.0.0-rc02.tar.gz -C /opt

部署 FE 高可用集群

本小节介绍如何配置部署 Frontend (FE) 节点。FE 是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。

新集群中的 FE 节点在启动时默认启用 IP 地址访问。

注意

  • FE 节点之间的时钟相差不能超过 5s。如果节点之间存在较大时钟差,请使用 NTP 协议校准时间。

  • 所有 FE 节点的 http_port 需保持相同,因此一台机器无法错开端口部署某个集群的多个 FE 节点。

     

  • 配置 FE 节点

  • 进入 StarRocks-x.x.x/fe 路径。

cd /opt/StarRocks-3.0.0-rc02/fe

修改 FE 配置文件 conf/fe.conf。以下示例仅添加元数据目录和 Java 目录,以保证部署成功。如需在生产环境中对集群进行详细优化配置,参考 FE 参数配置。

创建数据目录mkdir -p /data1/startrocks/metamkdir -p /data1/startrocks/logmkdir -p /data1/startrocks/log
FE参数配置cat /opt/StarRocks-3.0.0-rc02/fe/conf/fe.conf
LOG_DIR = /data1/startrocks/log
DATE = "$(date +%Y%m%d-%H%M%S)"
JAVA_HOME = /opt/jdk1.8.0_221/
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$LOG_DIR/fe.gc.log.$DATE -XX:+PrintConcurrentLocks"
JAVA_OPTS_FOR_JDK_9="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$LOG_DIR/fe.gc.log.$DATE:time"
sys_log_level = INFO
meta_dir = /data1/startrocks/meta
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
riority_networks = 172.26.180.0/24
mysql_service_nio_enabled = true
log_roll_size_mb = 1024
sys_log_dir = /data1/startrocks/log
sys_log_roll_num = 10
sys_log_verbose_modules =
audit_log_dir = /data1/startrocks/log
audit_log_modules = slow_query, query
audit_log_roll_num = 10
meta_delay_toleration_second = 10
qe_max_connection = 1024
max_conn_per_user = 100
qe_query_timeout_second = 300
qe_slow_log_ms = 5000

注意

当一台机器拥有多个 IP 地址时,需要在 FE 配置文件 conf/fe.conf 中设置 priority_networks,为该节点设定唯一 IP。

 

启动 FE 节点

运行以下命令启动 FE 节点。

 /opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh --daemon
  • 通过运行 jps 命令查看 Java 进程,确认 StarRocksFE 进程是否存在。

  • 通过在浏览器访问 FE ip:http_port(默认 http_port 为 8030),进入 StarRocks 的 WebUI,用户名为 root,密码为空。

  • 添加 FE 节点

  • 您可通过 MySQL 客户端连接 StarRocks 以添加 FE 节点。

  • 在 FE 进程启动后,使用 MySQL 客户端连接 FE 实例。

  • mysql -h 127.0.0.1 -P9030 -uroot
  • 说明

    root 为 StarRocks 默认内置 user,密码为空,端口为 fe/conf/fe.conf 中的 query_port 配置项,默认值为 9030

  • 查看 FE 状态。

  • SHOW PROC \'/frontends\'\\G

  • 当 Role 为 LEADER 时,当前 FE 节点为选举出的主节点。

  • 当 Role 为 FOLLOWER 时,当前节点是一个能参与选主的 FE 节点。

如果 MySQL 客户端连接失败,可以通过查看 log/fe.warn.log 日志文件发现问题。

如果在初次部署时遇到任何意外问题,可以在删除并重新创建 FE 的元数据目录后,重新开始部署。

添加新 FE 节点

使用 MySQL 客户端连接已有 FE 节点,添加新 FE 节点的信息,包括角色、IP 地址、以及 Port。

  • 在FE LEADER节点 添加 Follower FE 节点。

 

语法:/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh  --helper host:port --daemon

Follower FE 节点执行:

/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh  --helper 172.26.180.1:9010 --daemon

 

参数:

  • host:机器的 IP 地址。如果机器存在多个 IP 地址,则该项为 priority_networks 设置项下设定的唯一通信 IP 地址。

  • portedit_log_port 设置项下设定的端口,默认为 9010

出于安全考虑,StarRocks 的 FE 节点和 BE 节点只会监听一个 IP 地址进行通信。如果一台机器有多块网卡,StarRocks 有可能无法自动找到正确的 IP 地址。例如,通过 ifconfig 命令查看到 eth0 IP 地址为 192.168.1.1docker0 IP 地址为 172.17.0.1,您可以设置 192.168.1.0/24 子网以指定使用 eth0 作为通信 IP。此处采用 CIDR 的表示方法来指定 IP 所在子网范围,以便在所有的 BE 及 FE 节点上使用相同的配置。

连接 FE 节点

FE 节点需两两之间建立通信连接方可实现复制协议选主,投票,日志提交和复制等功能。当新的FE节点首次被添加到已有集群并启动时,您需要指定集群中现有的一个节点作为 helper 节点,并从该节点获得集群的所有 FE 节点的配置信息,才能建立通信连接。因此,在首次启动新 FE 节点时候,您需要通过命令行指定 --helper 参数。

 

语法:/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh  --helper host:port --daemon

 

 Follower FE 节点执行:

 

/opt/StarRocks-3.0.0-rc02/fe/bin/start_fe.sh  --helper 172.26.180.1:9010 --daemon 

参数:

  • host:机器的IP 地址。如果机器存在多个 IP 地址,则该项为 priority_networks 设置项下设定的唯一通信 IP 地址。

  • portedit_log_port 设置项下设定的端口,默认为 9010

确认 FE 集群部署成功

查看集群状态,确认部署成功。

SHOW PROC \'/frontends\'\\G

部署 BE 节点

本小节介绍如何配置部署 Backend (BE) 节点。BE 是 StarRocks 的后端节点,负责数据存储以及 SQL 执行等工作。

配置 BE 节点

进入 StarRocks-x.x.x/be 路径。

cd /opt/StarRocks-3.0.0-rc02/be/

修改 BE 节点配置文件 conf/be.conf

cat  /opt/StarRocks-3.0.0-rc02/be/conf/be.conf    
sys_log_level = INFO
be_port = 9060
be_http_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
jaeger_endpoint = localhost:6831
#priority_networks = 10.10.10.0/24;192.168.0.0/16
priority_networks = 172.26.180.0/24
#storage_root_path = /data1,medium:HDD;/data2,medium:SSD;/data3
storage_root_path = /data2/startrocks_be/storage
sys_log_dir = /data2/startrocks_be/log
sys_log_roll_mode = SIZE-MB-1024
sys_log_roll_num = 10
sys_log_verbose_modules = *
log_buffer_level = -1
JAVA_HOME = /opt/jdk1.8.0_221
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"
JAVA_OPTS_FOR_JDK_9="-Djava.security.krb5.conf=/etc/krb5.conf"

注意

当一台机器拥有多个 IP 地址时,需要在 BE 配置文件 conf/be.conf 中设置 priority_networks,为该节点设定唯一 IP。

 

创建数据目录

mkdir -p /data2/startrocks_be/storagemkdir -p /data2/startrocks_be/log

添加 BE 节点

通过 MySQL 客户端连接FE节点将 BE 节点添加至 StarRocks 集群。

语法:mysql> ALTER SYSTEM decommission BACKEND "host:port";

MySQL [(none)]> ALTER SYSTEM ADD BACKEND "172.26.180.1:9050";
Query OK, 0 rows affected (0.02 sec)

MySQL [(none)]> ALTER SYSTEM ADD BACKEND "172.26.180.2:9050";
Query OK, 0 rows affected (0.01 sec)

MySQL [(none)]> ALTER SYSTEM ADD BACKEND "172.26.180.3:9050";
Query OK, 0 rows affected (0.00 sec)

注意

host 需要与 priority_networks 相匹配,port 需要与 be.conf 文件中的设置的 heartbeat_service_port 相同,默认为 9050

如添加过程出现错误,需要通过以下命令将该 BE 节点从集群移除。

 

语法:bin/start_be.sh --daemon

/opt/StarRocks-3.0.0-rc02/be/bin/start_be.sh --daemon

 

说明

host 和 port 与添加的 BE 节点一致。

启动 BE 节点

运行以下命令启动 BE 节点。

 

语法:bin/start_be.sh --daemon

 

/opt/StarRocks-3.0.0-rc02/be/bin/start_be.sh --daemon

确认 BE 启动成功

通过 MySQL 客户端确认 BE 节点是否启动成功。

 

SHOW PROC \'/backends\'\\G

当 Alive 为 true 时,当前 BE 节点正常接入集群。

如果 BE 节点没有正常接入集群,可以通过查看 log/be.WARNING 日志文件排查问题。

如果日志中出现类似以下的信息,说明 priority_networks 的配置存在问题。

W0708 17:16:27.308156 11473 heartbeat_server.cpp:82\\] backend ip saved in master does not equal to backend local ip127.0.0.1 vs. 172.16.xxx.xx

如遇到以上问题,可以通过 DROP 错误的 BE 节点,然后重新以正确的 IP 添加 BE 节点的方式来解决。

ALTER SYSTEM DROP BACKEND "172.16.xxx.xx:9050";

如果在初次部署时遇到任何意外问题,可以在删除并重新创建 BE 的数据路径后,重新开始部署。

环境数据测试:


MySQL [(none)]> CREATE DATABASE  chongzh;
Query OK, 0 rows affected (0.20 sec)

MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| _statistics_       |
| chongzh            |
| information_schema |
+--------------------+
3 rows in set (0.03 sec)

MySQL [(none)]> use chongzh;
MySQL [chongzh]> CREATE TABLE IF NOT EXISTS `detailDemo` (
   `recruit_date`  DATE           NOT NULL COMMENT "YYYY-MM-DD",
   `region_num`    TINYINT        COMMENT "range [-128, 127]",
   `num_plate`     SMALLINT       COMMENT "range [-32768, 32767] ",
   `tel`           INT            COMMENT "range [-2147483648, 2147483647]",
   `id`            BIGINT         COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
   `password`      LARGEINT       COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
   `name`          CHAR(
20
)       NOT NULL COMMENT "range char(m),m in (1-255)",
   `profile`       VARCHAR(
500
)   NOT NULL COMMENT "upper limit value 1048576 bytes",
   `hobby`         STRING         NOT NULL COMMENT "upper limit value 65533 bytes",
   `leave_time`    DATETIME       COMMENT "YYYY-MM-DD HH:MM:SS",
   `channel`       FLOAT          COMMENT "4 bytes",
   `income`        DOUBLE         COMMENT "8 bytes",
   `account`       DECIMAL(
12
,
4
)  COMMENT "",
   `ispass`        BOOLEAN        COMMENT "true/false"
) ENGINE=OLAP
DUPLICATE KEY(`recruit_date`, `region_num`)
PARTITION BY RANGE(`recruit_date`)
(
   PARTITION p20220311 VALUES [(\'2022-03-11\'), (\'2022-03-12\')),
   PARTITION p20220312 VALUES [(\'2022-03-12\'), (\'2022-03-13\')),
   PARTITION p20220313 VALUES [(\'2022-03-13\'), (\'2022-03-14\')),
   PARTITION p20220314 VALUES [(\'2022-03-14\'), (\'2022-03-15\')),
   PARTITION p20220315 VALUES [(\'2022-03-15\'), (\'2022-03-16\'))
)
DISTRIBUTED BY HASH(`recruit_date`, `region_num`) BUCKETS
8

PROPERTIES (
   "replication_num" = "1"
);
[root@HDDC-DFNV-L3-Nredis01 ~]# cat detailDemo_data
2022-03-13,1,1212,1231231231,123412341234,123452342342343324,hello,welcome,starrocks,2022-03-15 12:21:32,123.04,21.12345,123456.123456,true
2022-03-14,2,1212,1231231231,123412341234,123452342342343324,hello,welcome,starrocks,2022-03-15 12:21:32,123.04,21.12345,123456.123456,false

[root@HDDC-DFNV-L3-Nredis01 ~]# curl --location-trusted -u root: -T /root/detailDemo_data -H "label: streamDemo" \\
> -H "column_separator:," \\
> http://127.0.0.1:8030/api/chongzh/detailDemo/_stream_load

   "TxnId": 2,
   "Label": "streamDemo",
   "Status": "Success",
   "Message": "OK",
   "NumberTotalRows": 2,
   "NumberLoadedRows": 2,
   "NumberFilteredRows": 0,
   "NumberUnselectedRows": 0,
   "LoadBytes": 281,
   "LoadTimeMs": 508,
   "BeginTxnTimeMs": 73,
   "StreamLoadPlanTimeMs": 190,
   "ReadDataTimeMs": 0,
   "WriteDataTimeMs": 119,
   "CommitAndPublishTimeMs": 119
   
   MySQL [chongzh]> select * from detailDemo;
+--------------+------------+-----------+------------+--------------+--------------------+-------+---------+-----------+---------------------+---------+----------+-------------+--------+
| recruit_date | region_num | num_plate | tel        | id           | password           | name  | profile | hobby     | leave_time          | channel | income   | account     | ispass |
+--------------+------------+-----------+------------+--------------+--------------------+-------+---------+-----------+---------------------+---------+----------+-------------+--------+
| 2022-03-13   |          1 |      1212 | 1231231231 | 123412341234 | 123452342342343324 | hello | welcome | starrocks | 2022-03-15 12:21:32 |  123.04 | 21.12345 | 123456.1235 |      1 |
| 2022-03-14   |          2 |      1212 | 1231231231 | 123412341234 | 123452342342343324 | hello | welcome | starrocks | 2022-03-15 12:21:32 |  123.04 | 21.12345 | 123456.1235 |      0 |
+--------------+------------+-----------+------------+--------------+--------------------+-------+---------+-----------+---------------------+---------+----------+-------------+--------+
2 rows in set (0.33 sec)

参考: https://docs.starrocks.io/zh-cn/3.0/quick_start/Deploy

 

StarRocks 安装与配置

StarRocks

1、StarRocks简介

下载地址​:https://www.starrocks.com/zh-CN/download

StarRocks

特点:

StarRocks


使用场景:

StarRocks

1.1 StarRocks介绍

  • StarRocks是新一代极速全场景​MPP数据库
  • StraRocks充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果,在业界实践的基础上,进一步改进优化、升级架构,并增添了众多全新功能,形成了全新的企业级产品。
  • StarRocks致力于构建极速统一分析体验,满足企业用户的多种数据分析场景,支持多种数据模型(明细模型、聚合模型、更新模型),多种导入方式(批量和实时),可整合和接入多种现有系统(Spark、Flink、Hive、 ElasticSearch)。
  • StarRocks兼容MySQL协议,可使用MySQL客户端和常用BI工具对接StarRocks来进行数据分析。
  • StarRocks采用​分布式架构​,对数据表进行水平划分并以多副本存储。集群规模可以灵活伸缩,能够支持10PB级别的数据分析; 支持MPP框架,并行加速计算; 支持多副本,具有弹性容错能力。
  • StarRocks采用​关系模型​,使用严格的数据类型和列式存储引擎,通过编码和压缩技术,降低读写放大;使用向量化执行方式,充分挖掘多核CPU的并行计算能力,从而显著提升查询性能。

1.2 StarRocks适合什么场景

StarRocks可以满足企业级用户的多种分析需求,包括OLAP多维分析、定制报表、实时数据分析和Ad-hoc数据分析等。具体的业务场景包括:

  • OLAP多维分析
  • 用户行为分析
  • 用户画像、标签分析、圈人
  • 高维业务指标报表
  • 自助式报表平台
  • 业务问题探查分析
  • 跨主题业务分析
  • 财务报表
  • 系统监控分析
  • 实时数据分析
  • 电商大促数据分析
  • 教育行业的直播质量分析
  • 物流行业的运单分析
  • 金融行业绩效分析、指标计算
  • 广告投放分析
  • 管理驾驶舱
  • 探针分析APM(Application Performance Management)
  • 高并发查询
  • 广告主报表分析
  • 零售行业渠道人员分析
  • SaaS行业面向用户分析报表
  • Dashbroad多页面分析
  • 统一分析
  • 通过使用一套系统解决多维分析、高并发查询、预计算、实时分析、Adhoc查询等场景,降低系统复杂度和多技术栈开发与维护成本。​

1.3 StarRocks基本概念

  • FE​:FrontEnd简称FE,是StarRocks的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。
  • BE​:BackEnd简称BE,是StarRocks的后端节点,负责数据存储,计算执行,以及compaction,副本管理等工作。
  • Broker​:StarRocks中和外部HDFS/对象存储等外部数据对接的中转服务,辅助提供导入导出功能。
  • StarRocksManager​:StarRocks的管理工具,提供StarRocks集群管理、在线查询、故障查询、监控报警的可视化工具。
  • Tablet​:StarRocks中表的逻辑分片,也是StarRocks中副本管理的基本单位,每个表根据分区和分桶机制被划分成多个Tablet存储在不同BE节点上。

1.4 StarRocks系统架构

系统架构图

StarRocks


组件介绍

StarRocks集群由FE和BE构成, 可以使用MySQL客户端访问StarRocks集群。

FE

FE接收MySQL客户端的连接, 解析并执行SQL语句。

  • 管理元数据, 执行SQL DDL命令, 用Catalog记录库, 表, 分区, tablet副本等信息。
  • FE高可用部署, 使用复制协议选主和主从同步元数据, 所有的元数据修改操作, 由FE leader节点完成, FE follower节点可执行读操作。元数据的读写满足顺序一致性。FE的节点数目采用2n+1, 可容忍n个节点故障。 当FE leader故障时, 从现有的follower节点重新选主, 完成故障切换。
  • FE的SQL layer对用户提交的SQL进行解析, 分析, 改写, 语义分析和关系代数优化, 生产逻辑执行计划。
  • FE的Planner负责把逻辑计划转化为可分布式执行的物理计划, 分发给一组BE。
  • FE监督BE, 管理BE的上下线, 根据BE的存活和健康状态, 维持tablet副本的数量。
  • FE协调数据导入, 保证数据导入的一致性。

BE

  • BE管理tablet副本, tablet是table经过分区分桶形成的子表, 采用列式存储。
  • BE受FE指导, 创建或删除子表。
  • BE接收FE分发的物理执行计划并指定BE coordinator节点, 在BE coordinator的调度下, 与其他BE worker共同协作完成执行。
  • BE读本地的列存储引擎获取数据,并通过索引和谓词下沉快速过滤数据。
  • BE后台执行compact任务, 减少查询时的读放大。
  • 数据导入时, 由FE指定BE coordinator, 将数据以fanout的形式写入到tablet多副本所在的BE上。

2、部署

2.0 包目录内容

StarRocks-XX-1.0.0
├── be # BE目录
│ ├── bin
│ │ ├── start_be.sh # BE启动命令
│ │ └── stop_be.sh # BE关闭命令
│ ├── conf
│ │ └── be.conf # BE配置文件
│ ├── lib
│ │ ├── starrocks_be # BE可执行文件
│ │ └── meta_tool
│ └── www
├── fe # FE目录
│ ├── bin
│ │ ├── start_fe.sh # FE启动命令
│ │ └── stop_fe.sh # FE关闭命令
│ ├── conf
│ │ └── fe.conf # FE配置文件
│ ├── lib
│ │ ├── starrocks-fe.jar # FE jar包
│ │ └── *.jar # FE 依赖的jar包
│ └── webroot
└── udf

2.1 部署FE

2.1.1 FE的基本配置

FE的配置文件为​StarRocks-XX-1.0.0/fe/conf/fe.conf​, 默认配置已经足以启动集群, 有经验的用户可以查看手册的系统配置章节, 为生产环境定制配置,为了让用户更好的理解集群的工作原理, 此处只列出基础配置。

2.1.2 环境准备

准备三台物理机, 需要以下环境支持:

  • Linux (Centos 7+)
  • Java 1.8+

CPU需要支持AVX2指令集,​cat /proc/cpuinfo |grep avx2​有结果输出表明CPU支持,如果没有支持,建议更换机器,StarRocks使用向量化技术需要一定的指令集支持才能发挥效果。

将StarRocks的二进制产品包分发到目标主机的部署路径并解压,可以考虑使用新建的StarRocks用户来管理。

StarRocks

2.1.3 FE单实例部署

(1)解压tar包

[root@hadoop01 software]# tar -zxvf StarRocks-2.0.1.tar.gz -C /data/

(2)部署FE,修改配置文件,添加jvm参数,建议-Xmx参数设置到16G以上

[root@hadoop01 software]# cd /data/StarRocks-2.0.1/fe/conf/

[root@hadoop01 conf]# vim fe.conf
JAVA_OPTS = "-Xmx4096m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$STARROCKS_HOME/log/fe.gc.log"

StarRocks

(3)创建元数据目录

[root@hadoop01 conf]# cd ..

[root@hadoop01 fe]# mkdir -p meta

注意:mkdir -p meta (1.19.x及以前的版本需要使用mkdir -p doris-meta)

StarRocks

(4)分发给hadoop02,hadoop03

[root@hadoop01 module]# scp -r StarRocks-2.0.1/ hadoop02:/data/
[root@hadoop01 module]# scp -r StarRocks-2.0.1/ hadoop03:/data/

(5)启动hadoop02 FE节点

[root@hadoop02 fe]# bin/start_fe.sh --daemon

StarRocks

(6)确认启动FE启动成功

  • 查看日志log/fe.log确认。
  • 如果FE启动失败,可能是由于端口号被占用,修改配置文件conf/fe.conf中的端口号http_port。
  • 使用jps命令查看java进程确认"StarRocksFe"存在。
  • 使用浏览器访问8030端口, 打开StarRocks的WebUI, 用户名为root, 密码为空。

StarRocks


StarRocks

2.1.4 使用MySQL客户端访问FE

(1)启动mysql客户端,访问FE,查看FE状况

[root@hadoop02 fe]# mysql -h hadoop02 -uroot -P9030
mysql> SHOW PROC /frontends\\G

注意:这里默认root用户密码为空,端口为fe/conf/fe.conf中的query_port配置项,默认为9030

(2)查看FE状态

StarRocks

  • Role为FOLLOWER说明这是一个能参与选主的FE;
  • IsMaster为true,说明该FE当前为主节点。

如果MySQL客户端连接不成功,请查看log/fe.warn.log日志文件,确认问题。由于是初次启动,如果在操作过程中遇到任何意外问题,都可以删除并重新创建FE的元数据目录,再从头开始操作

2.1.5 FE的高可用集群部署

FE的高可用集群采用​主从复制架构,​ 可避免FE单点故障. FE采用了类raft的bdbje协议完成选主, 日志复制和故障切换. 在FE集群中, 多实例分为两种角色: ​follower​和​observer​;

  • 前者为复制协议的可投票成员, 参与选主和提交日志, 一般数量为奇数(2n+1), 使用多数派(n+1)确认, 可容忍少数派(n)故障;
  • 而后者属于非投票成员, 用于异步订阅复制日志, observer的状态落后于follower, 类似其他复制协议中的learner角色。

FE集群从follower中自动选出master节点, 所有更改状态操作都由master节点执行, 从FE的master节点可以读到最新的状态. 更改操作可以从非master节点发起, 继而转发给master节点执行,  非master节点记录最近一次更改操作在复制日志中的LSN, 读操作可以直接在非master节点上执行, 但需要等待非master节点的状态已经同步到最近一次更改操作的LSN, 因此读写非Master节点满足顺序一致性. Observer节点能够增加FE集群的读负载能力, 时效性要求放宽的非紧要用户可以读observer节点。

FE节点之间的时钟相差不能超过5s, 使用NTP协议校准时间。

一台机器上只可以部署单个FE节点。所有FE节点的http_port需要相同。

配置如下:

(1)添加其他FE节点,角色也分为​FOLLOWER,OBSERVER

使用MySQL客户端连接已有的FE,  添加新实例的信息,信息包括角色、ip、port:

mysql> ALTER SYSTEM ADD FOLLOWER "hadoop03:9010";
mysql> ALTER SYSTEM ADD OBSERVER "hadoop02:9010";

(2)启动hadoop03,hadoop01 FE节点,第一次启动需指定--helper参数,后续再启动无需指定此参数

[root@hadoop03 fe]# bin/start_fe.sh --helper hadoop01:9010 --daemon
[root@hadoop01 fe]# bin/start_fe.sh --helper hadoop01:9010 --daemon

FE节点之间需要两两互联才能完成复制协议选主, 投票,日志提交和复制等功能。FE节点首次启动时,需要指定现有集群中的一个节点作为helper节点, 从该节点获得集群的所有FE节点的配置信息,才能建立通信连接,因此首次启动需要指定--helper参数:

当FE再次启动时,无须指定--helper参数,因为FE已经将其他FE的配置信息存储于本地目录, 因此可直接启动:

./bin/start_fe.sh --daemon

(3)全部启动完毕后,再使用mysql客户端查看FE的状况,alive全显示true则无问题

mysql> SHOW PROC /frontends\\G

节点的Alive显示为true则说明添加节点成功

(4)节点的Alive显示为true则说明添加节点成功

alter system drop follower "fe_host:edit_log_port";
alter system drop observer "fe_host:edit_log_port";

2.2 部署BE

2.2.1 单点部署

(1)部署BE,用户可以使用命令直接将BE添加到集群中,一般至少布置3个BE,每个BE实例添加步骤相同

[root@hadoop02 module]# cd StarRocks-2.0.1/be/

[root@hadoop02 be]# mkdir -p storage

(2)使用mysql客户端添加hadoop02对应be节点

mysql> ALTER SYSTEM ADD BACKEND "hadoop02:9050";

这里IP地址为和priority_networks设置匹配的IP,portheartbeat_service_port,默认为9050

如出现错误,需要删除BE节点,应用下列命令:

alter system decommission backend "be_host:be_heartbeat_service_port";

(3)添加完毕后,启动hadoop02 BE节点

[root@hadoop02 be]# bin/start_be.sh --daemon

(4)查看BE状况,也是同样alive为true是正常运行

mysql> SHOW PROC /backends\\G

2.2.2 BE集群部署

(1)同样步骤在hadoop03,hadoop01部署BE,并添加节点

[root@hadoop03 module]# cd StarRocks-2.0.1/be/
[root@hadoop03 be]# mkdir -p storage
[root@hadoop01 module]# cd StarRocks-2.0.1/be/
[root@hadoop01 be]# mkdir -p storage
mysql> ALTER SYSTEM ADD BACKEND "hadoop03:9050";
mysql> ALTER SYSTEM ADD BACKEND "hadoop01:9050";
[root@hadoop03 be]# bin/start_be.sh --daemon
[root@hadoop01 be]# bin/start_be.sh --daemon

StarRocks


StarRocks

2.3 部署Broker

(1)部署Broker,此角色主要用于后续Broker load使用,启动安装目录的Broker服务

[root@hadoop02 StarRocks-2.0.1]# cd apache_hdfs_broker/
[root@hadoop02 apache_hdfs_broker]# bin/start_broker.sh --daemon
[root@hadoop03 StarRocks-2.0.1]# cd apache_hdfs_broker/
[root@hadoop03 apache_hdfs_broker]# bin/start_broker.sh --daemon
[root@hadoop01 StarRocks-2.0.1]# cd apache_hdfs_broker/
[root@hadoop01 apache_hdfs_broker]# bin/start_broker.sh --daemon

(2)使用mysql添加对应节点

mysql> ALTER SYSTEM ADD BROKER broker1 "hadoop02:8000";
mysql> ALTER SYSTEM ADD BROKER broker2 "hadoop03:8000";
mysql> ALTER SYSTEM ADD BROKER broker3 "hadoop01:8000";

(3)查看状态

mysql> SHOW PROC "/brokers"\\G



以上是关于StarRocks 3.0 集群安装手册的主要内容,如果未能解决你的问题,请参考以下文章

Starrocks版本升级

StarRocks 安装与配置

如何实时同步数据到StarRocks

在Ubuntu20.04安装StarRocks On Docker并在DataGrip配置JDBC协议连接容器内StarRocks2.3.2

在Ubuntu20.04安装StarRocks On Docker并在DataGrip配置JDBC协议连接容器内StarRocks2.3.2

在Ubuntu20.04安装StarRocks On Docker并在DataGrip配置JDBC协议连接容器内StarRocks2.3.2