StarRocks 集群安裝
當前按照官網上的提供的安裝包方式安裝,版本是 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:

浙公網安備 33010602011771號