當前按照官網上的提供的安裝包方式安裝,版本是 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 個目錄,分別是 fe
、be
和 apache_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 的後設資料目錄。
然後是埠號部分的設定,我們這裡都使用了預設值:
http_port
是 FE 對外提供的 HTTP 埠,預設是8030
。rpc_port
是 FE 對外提供的 Thrift 埠,預設是9020
。query_port
是 FE 對外提供的查詢埠,可以使用 MySQL 客戶端連線,預設是9030
。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 相關的呼叫。
然後埠號的配置我們同樣保持預設:
be_port
是 BE 對外提供的 Thrift 埠,預設是9060
。be_http_port
是 BE 對外提供的 HTTP 埠,預設是8040
。heartbeat_service_port
是 BE 之間心跳服務的埠,預設是9050
。brpc_port
是 BE 對外提供的 bRPC 埠,預設是8060
。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:
- https://docs.starrocks.io/zh/docs/deployment/deploy_manually/