StarRocks 叢集安裝

小得盈满發表於2024-04-15

當前按照官網上的提供的安裝包方式安裝,版本是 3.2.2,部署模式為存算一體,安裝的作業系統是 Ubuntu 22.04,JDK 版本為 OpenJDK 11,這裡選擇 3 個節點進行安裝,節點的 hosts 定義如下:

10.0.1.25 ec25
10.0.1.26 ec26
10.0.1.27 ec27

由於 StarRocks 安裝包比較大,所以選擇在每個節點上都單獨解壓,否則傳送解壓後讀檔案速度比較慢:

# 每個機器上分別解壓
tar -xvzf StarRocks-3.2.2.tar.gz -C /opt
cd /opt/StarRocks-3.2.2

解壓後的目錄中除了兩個 txt 的檔案外有 3 個目錄,分別是 febeapache_hdfs_broker ,其中 fe 是 FE 角色相關的程式,be 是 BE 角色相關的程式,apache_hdfs_broker 是 Broker 節點的相關的程式,主要用於對接 HDFS 或 S3 等外部儲存資料來源,不過從 StarRocks 2.5 版本起不需要手動部署 Broker 節點,StarRocks 本身已經整合了這部分功能。

我們計劃將 3 個 FE 和 3 個 BE 在 3 個節點上混合部署,不過我們首先啟動其中 1 個 FE,等叢集整體元件完畢再加入另外 2 個 FE 從而實現高可用的功能。

安裝 FE 服務

在所有節點提前建立 FE 後設資料目錄:

# 建議為 StarRocks 分配獨立的外部掛載
mkdir -p /data/starrocks/meta

然後我們修改 FE 的配置檔案 fe/conf/fe.conf 主要修改下面的一些配置:

meta_dir = /data/starrocks/meta

http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
mysql_service_nio_enabled = true

priority_networks = 10.0.1.0/24

meta_dir 配置 FE 的後設資料目錄。

然後是埠號部分的設定,我們這裡都使用了預設值:

  1. http_port 是 FE 對外提供的 HTTP 埠,預設是 8030
  2. rpc_port 是 FE 對外提供的 Thrift 埠,預設是 9020
  3. query_port 是 FE 對外提供的查詢埠,可以使用 MySQL 客戶端連線,預設是 9030
  4. edit_log_port 是多個 FE 之間組建高可用叢集使用的通訊埠,預設是 9010

priority_networks 配置叢集所在的網路,格式是 CIDR 描述,如果我們使用主機名(FQDN)訪問,則不需要配置這個項,我們這裡計劃使用 IP 地址訪問,所以需要設定一下這個配置。

如果我們系統上有多個 JDK,那麼可以單獨指定我們要使用的 JAVA_HOME ,例如:

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

因為我們全域性只有一個 JDK 並且在 /etc/profile 中設定了 JAVA_HOME 環境變數,所以這裡就不需要再配置了。

基本的配置就是上面這些,我們修改完成後儲存配置,然後注意將配置檔案同步到其他節點,用的時候就不用再修改了。

然後我們可以啟動 FE 服務,現在是隻在第 1 個節點上執行:

./fe/bin/start_fe.sh --daemon
# 如果是使用主機名訪問,那麼需要指定 --host_type
./fe/bin/start_fe.sh --host_type FQDN --daemon

然後我們檢視日誌確保啟動成功即可。

安裝 BE 服務

在所有節點都建立 BE 資料目錄:

mkdir -p /data/starrocks/storage

然後修改配置檔案 be/conf/be.conf 主要內容如下:

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

be_port = 9060
be_http_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
starlet_port = 9070
priority_networks = 10.0.1.0/24
storage_root_path = /data/starrocks/storage

首先是建議為 BE 指定 JAVA_HOME,因為 BE 不會自動搜尋系統的 JDK,需要手動配置一下,否則將無法使用 JNI 相關的呼叫。

然後埠號的配置我們同樣保持預設:

  1. be_port 是 BE 對外提供的 Thrift 埠,預設是 9060
  2. be_http_port 是 BE 對外提供的 HTTP 埠,預設是 8040
  3. heartbeat_service_port 是 BE 之間心跳服務的埠,預設是 9050
  4. brpc_port 是 BE 對外提供的 bRPC 埠,預設是 8060
  5. starlet_port 是存算分離叢集用於心跳的埠,預設是 9070

然後 priority_networks 仍然是和 FE 一樣,由於使用 IP 訪問所以需要配置一下,如果使用主機名則不需要配置。

最後 storage_root_path 配置 BE 的資料目錄。

基本配置就上面這些,配置完成後儲存,然後同步到其他的節點。

然後在所有節點都啟動 BE 服務:

./be/bin/start_be.sh --daemon

這裡和 FE 不太一樣的地方是如果要使用主機名訪問不需要指定 --host_type ,但是要確保 hosts 配置正確即可。

啟動之後檢視日誌確保啟動成功,3 個節點都啟動後會自動組成 BE 高可用叢集。

我們在第一個節點上使用 MySQL 客戶端連線:

mysql -h127.0.0.1 -P9030 -uroot --prompt='StarRocks > '

預設 root 使用者不需要密碼,我們連線上去之後檢視 FE 狀態:

SHOW PROC '/frontends'\G

當前 FE 只有 1 個就是當前的節點,然後檢視 BE 狀態:

SHOW PROC '/backends'\G

這裡 BE 應該為空,我們需要手動新增 BE 節點:

-- 注意埠使用 heartbeat_service_port 配置的埠
ALTER SYSTEM ADD BACKEND "10.0.1.25:9050", "10.0.1.26:9050", "10.0.1.27:9050";

然後再次檢視 BE 的狀態:

SHOW PROC '/backends'\G

現在就可以看到 3 個 BE 節點了。

配置 FE 高可用

首先在第一個節點新增 FE 節點:

ALTER SYSTEM ADD FOLLOWER "10.0.1.26:9010";
ALTER SYSTEM ADD FOLLOWER "10.0.1.27:9010";

注意這裡只能一行新增 1 個 FE,不能新增多個,埠使用的是 FE 中配置的 edit_log_port,新增後檢視狀態 active 和 join 應該都是 false,然後我們要啟動另外兩個節點的 FE 服務:

# 新增 --helper 引數指定 Leader FE
fe/bin/start_fe.sh --helper 10.0.1.25:9010 --daemon

啟動之後再檢視 FE 的狀態就正常了,這樣 FE 叢集就具備了高可用的能力。

如果之前不小心啟動了其他節點的 FE,那麼再次啟動加入叢集時可能會報錯如下:

weren't! UNEXPECTED_STATE: Unexpected internal state, may have side effects.

這個原因就是啟動的時候 FE 會生成後設資料,由於加入 FE 叢集會重新生成新的後設資料,所以資料出現了衝突,遇到這個問題只需要清空報錯節點的後設資料目錄,再次新增 --helper 引數啟動即可。

另外停止服務可以執行:

./fe/bin/stop_fe.sh --daemon
./be/bin/stop_be.sh --daemon

最後由於 root 使用者預設沒有密碼,為了安全需要設定 root 使用者密碼:

SET PASSWORD = PASSWORD('<password>')

設定後再次登入就需要輸入密碼了,這個密碼和 FE 的 HTTP 訪問密碼都是相同的,建議生產環境為資料庫單獨分配使用者。

Reference:

  1. https://docs.starrocks.io/zh/docs/deployment/deploy_manually/

相關文章