StarRocks 3.0 叢集安裝手冊

2023-04-25 15:00:33

本文介紹如何以二進位制安裝包方式手動部署最新版 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