doris02-編譯安裝
1. 編譯
通過前一個, 我們應該已經編譯完成了, 完成后的文件在 output/
目錄下
2. 機器要求
2.1) 軟件需求
2.2) 硬件需求
- be總磁盤空間按3副本計算的話, 需要
數據量*3
, 然后預留40%作為后台compaction及中間數據存放 - 同一節點可部署多個be, 但如果要求3副本數據, 則必須3個機器部署3個be
- be的數量多少直接決定了查詢速度
- fe 分為Folloer(選一個leader) 和 Observer
- FE 節點數據至少為1(1 個 Follower)。當部署 1 個 Follower 和 1 個 Observer 時,可以實現讀高可用。當部署 3 個 Follower 時,可以實現讀寫高可用(HA)。
- Follower 的數量必須為奇數,Observer 數量隨意。
- 根據以往經驗,當集群可用性要求很高是(比如提供在線業務),可以部署 3 個 Follower 和 1-3 個 Observer。如果是離線業務,建議部署 1 個 Follower 和 1-3 個 Observer。
- 如果 FE 和 BE 混部,需注意資源競爭問題,並保證元數據目錄和數據目錄分屬不同磁盤。
2.3) 關閉swap
root@localhost fe]# free -g
total used free shared buff/cache available
Mem: 5 1 3 0 0 4
Swap: 4 0 4
[root@localhost fe]# cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty 3
nr_writeback 0
nr_writeback_temp 0
nr_dirty_threshold 329179
nr_dirty_background_threshold 109637
[root@localhost fe]# sysctl -w vm.swappiness=0
vm.swappiness = 0
[root@localhost fe]# echo "vm.swappiness = 0" >> /etc/sysc
sysconfig/ sysctl.conf sysctl.d/
[root@localhost fe]# echo "vm.swappiness = 0" >> /etc/sysctl.conf
[root@localhost fe]# swapoff -a
[root@localhost fe]# free -g
total used free shared buff/cache available
Mem: 5 1 3 0 0 4
Swap: 0 0 0
[root@localhost fe]# sysctl -p
vm.swappiness = 0
[root@localhost fe]# free -g
total used free shared buff/cache available
Mem: 5 1 3 0 0 4
Swap: 0 0 0
[root@localhost fe]#
2.4) 端口開放或關閉防火牆
實例名稱 | 端口名稱 | 默認端口 | 通訊方向 | 說明 |
---|---|---|---|---|
BE | be_port | 9060 | FE --> BE | BE 上 thrift server 的端口,用於接收來自 FE 的請求 |
BE | be_rpc_port | 9070 | BE <--> BE | BE 之間 rpc 使用的端口 |
BE | webserver_port | 8040 | BE <--> BE | BE 上的 http server 的端口 |
BE | heartbeat_service_port | 9050 | FE --> BE | BE 上心跳服務端口(thrift),用於接收來自 FE 的心跳 |
BE | brpc_port* | 8060 | FE<-->BE, BE <--> BE | BE 上的 brpc 端口,用於 BE 之間通訊 |
FE | http_port * | 8030 | FE <--> FE,用戶 | FE 上的 http server 端口 |
FE | rpc_port | 9020 | BE --> FE, FE <--> FE | FE 上的 thrift server 端口 |
FE | query_port | 9030 | 用戶 | FE 上的 mysql server 端口 |
FE | edit_log_port | 9010 | FE <--> FE | FE 上的 bdbje 之間通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 thrift server,用於接收請求 |
或者關閉防火情
systemctl stop firewalld
# 關閉開機啟動
systemctl disable firewalld.service
2.5) ip綁定
如果機器有多個ip, 比如內網外網, 虛擬機docker等, 需要進行ip綁定, 以便在配置集群時可以正確識別
priority_networks=192.168.206.131/24;10.27.197.26/24
2.6) 修改主機名
hostnamectl set-hostname doris01
hostnamectl set-hostname doris02
3. 啟動fe
3.1) 配置環境變量
vim /etc/profile
export DORIS_HOME=/root/doris/fe
3.2) 創建pola-mate
mkdir -p fe/palo-meta
3.3) 修改fe.conf中的JAVA_OPTS
默認 java 最大堆內存為 2GB,建議生產環境調整至 8G 以上。
3.4) 修改ip綁定
priority_networks = 172.20.144.233/24
3.5) 啟動
sh bin/start_fe.sh --daemon
日志默認存放在 fe/log/ 目錄下
4. 啟動be
4.1) 環境變量
vim /etc/profile
export DORIS_HOME=/root/soft/output/be
4.2) 創建storage_root_path, 並配置be.conf
配置 storage_root_path
:數據存放目錄,使用 ;
分隔(最后一個目錄后不要加 ;
),其它可以采用默認值。
storage_root_path = /home/palo/data1;/home/palo/data2;/home/palo/data3
5. 添加be
5.1) 使用mysql連接
mysql -h host -P 9030 -uroot
其中 host 為 FE 所在節點 ip;port 為 fe/conf/fe.conf 中的 query_port;默認使用 root 賬戶,密碼為空。
5.2) 添加be
ALTER SYSTEM ADD BACKEND "host:9050";
或者多租戶添加be
ALTER SYSTEM ADD FREE BACKEND "host:port";
其中 host 為 BE 所在節點 ip;port 為 be/conf/be.conf 中的 heartbeat_service_port。
如果不添加 FREE 關鍵字,BE 默認進入自動生成的 cluster,添加了 FREE 關鍵字后新的 BE 不屬於任何 cluster,這樣創建新 cluster 的時候就可以從這些空閑的be中選取, 詳細見多租戶
5.3) 修改可打開文件數
ulimit -n 65535
上述方式在重啟系統后失效
或者修改配置文件: /etc/security/limits.conf, 添加
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
具體可見博客
否則啟動不成功, 日志報錯
E0116 01:01:01.520340 5608 storage_engine.cpp:365] File descriptor number is less than 60000. Please use (ulimit -n) to set a value equal or greater than 60000
W0116 01:01:01.520455 5608 storage_engine.cpp:95] engine open failed, res=-123
F0116 01:01:01.521009 5608 doris_main.cpp:161] fail to open StorageEngine, res=open engine failed
5.3) 修改ip綁定
priority_networks = 172.20.144.17/24
5.4) 啟動be
sh bin/start_be.sh --daemon
5.5) 查看fe 和 be
在mysql終端中
show proc ‘/frontends’;
show proc ‘/backends’;
也可通過前端界面訪問:
http://fe_hostname:8030/frontend
http://fe_hostname:fe_http_port/system?path=//frontends
查看be
http://fe_hostname:8030/backend
http://fe_hostname:fe_http_port/system?path=//backends
用戶名為root, 密碼為空
6. fe高可用部署
https://blog.csdn.net/weixin_43832846/article/details/89320171
http://doris.apache.org/documentation/cn/installing/install-deploy.html#id2
7. 確定集群部署成功
7.1) fe節點啟動成功
日志中會看到 transfer from UNKNOWN to MASTER/FOLLOWER/OBSERVER
。最終會看到 thrift server started
日志,並且可以通過 mysql 客戶端連接到 FE,則表示 FE 啟動成功。
或者: http://fe_host:8030/api/bootstrap
結果返回
{"status":"OK","msg":"Success"}
如果在 fe.log 中查看不到啟動失敗的信息,也許在 fe.out 中可以看到。
7.2) be節點成功
BE 進程啟動后,如果之前有數據,則可能有數分鍾不等的數據索引加載時間
BE 尚未加入任何集群,則 BE 日志會定期滾動 waiting to receive first heartbeat from frontend
字樣。表示 BE 還未通過 FE 的心跳收到 Master 的地址,正在被動等待。這種錯誤日志,在 FE 中 ADD BACKEND 並發送心跳后,就會消失。如果在接到心跳后,又重復出現 master client, get client from cache failed.host: , port: 0, code: 7
字樣,說明 FE 成功連接了 BE,但 BE 無法主動連接 FE。可能需要檢查 BE 到 FE 的 rpc_port 的連通性。
其次,日志中應該每隔 10 秒滾動 finish report task success. return code: 0
的字樣,表示 BE 向 FE 的通信正常。
同時,如果有數據查詢,應該能看到不停滾動的日志,並且有 execute time is xxx
日志,表示 BE 啟動成功,並且查詢正常。
或者連接http:
http://be_host:8030/api/health
結果返回
{"status": "OK","msg": "To Be Added"}
如果在 be.INFO 中查看不到啟動失敗的信息,也許在 be.out 中可以看到。
7.3) fe, be連通正常
首先確認正常添加了所有節點
show proc '/backends';
show proc '/frontends';
show proc '/brokers';
如果心跳正常,BE 的日志中會顯示 get heartbeat, host: xx.xx.xx.xx, port: 9020, cluster id: xxxxxx
如果心跳失敗,在 FE 的日志中會出現 backend[10001] got Exception: org.apache.thrift.transport.TTransportException
類似的字樣,或者其他 thrift 通信異常日志,表示 FE 向 10001 這個 BE 的心跳失敗。這里需要檢查 FE 向 BE host 的心跳端口的連通性。
如果 BE 向 FE 的通信正常,則 BE 日志中會顯示 finish report task success. return code: 0
的字樣。否則會出現 master client, get client from cache failed
的字樣。這種情況下,需要檢查 BE 向 FE 的 rpc_port 的連通性。
7.4) 各節點認證
出了fe master外, Follower FE,Observer FE,Backend 都需要通過 ALTER SYSTEM ADD
注冊到集群中.
FEMater啟動的時候, 會在palo-meta/image/VERSION 下創建cluster_id.
其他FE第一次加入集群的時候, 會獲取cluster_id, 之后每次重啟都會校驗, 如果不一致, 則fe自動退出
BE在第一次加入集群的時候, 也會獲取cluster_id, 之后重啟如果不一致, 則BE拒絕響應FE的心跳.
心跳中同時會包含 Master FE 的 ip。當 FE 切主時,新的 Master FE 會攜帶自身的 ip 發送心跳給 BE,BE 會更新自身保存的 Master FE 的 ip。