Palo通過supervisor進行進程管理
下面一段文字是摘自doris官方文檔:
註:在生產環境中,所有實例都應使用守護進程啟動,以保證進程退出後,會被自動拉起,如 Supervisor。如需使用守護進程啟動,需要修改各個 start_xx.sh 腳本,去掉最後的 & 符號
首先安裝supervisor,具體請參照本人的另一篇博客CentOS7 安裝supervisor守護進程管理器
1 配置palo be 進程管理
1.1 修改各個 start_be.sh 腳本,去掉最後的 & 符號
/home/workspace/palo-0.8.2/be/bin/start_be.sh
:wq保存退出
1.2 創建be supervisor進程管理配置文件
輸入命令:
vim /etc/supervisord.d/palo_be-0.8.2.ini
填寫以下內容
[program:palo_be] process_name=%(program_name)s ;進程名稱 directory=/opt/palo-0.8.2/be ;工作目錄 command=sh /opt/palo-0.8.2/be/bin/start_be.sh ;運行的命令 autostart=true ;自動開啟 autorestart=true ;自動重啟 user=root ;用戶 numprocs=1 ;進程數 startretries=3 ;啟動重試次數 stopasgroup=true ;是否停止子進程 killasgroup=true ;是否殺死子進程 startsecs=5 ;啟動5秒後,如果還是運行狀態才認為進程已經啟動 //redirect_stderr = true //stdout_logfile_maxbytes = 20MB //stdout_logfile_backups = 10 //stdout_logfile=/var/log/supervisor-palo_be-0.8.2.log
2 配置broker進程管理
2.1 修改各個 start_broker.sh 腳本,去掉最後的 & 符號
vim /opt/palo-0.8.2/apache_hdfs_broker/bin/start_broker.sh
:wq保存退出
2.2 創建broker supervisor進程管理配置文件
輸入命令
vim /etc/supervisord.d/palo_broker-0.8.2.ini
輸入以下內容
[program:BrokerBootstrap] process_name=%(program_name)s ;進程名稱 directory=/opt/palo-0.8.2/apache_hdfs_broker ;工作目錄 command=sh /opt/palo-0.8.2/apache_hdfs_broker/bin/start_broker.sh ;運行的命令 autostart=true ;自動開啟 autorestart=true ;自動重啟 user=root ;用戶 numprocs=1 ;進程數 startretries=3 ;啟動重試次數 stopasgroup=true ;是否停止子進程 killasgroup=true ;是否殺死子進程 startsecs=5 ;啟動5秒後,如果還是運行狀態才認為進程已經啟動 //redirect_stderr=true //stdout_logfile_maxbytes=20MB //stdout_logfile_backups=10 //stdout_logfile=/var/log/supervisor-BrokerBootstrap-0.8.2.log
3 配置fe進程管理
3.1 修改各個 start_fe.sh 腳本,去掉最後的 & 符號
vim /opt/palo-0.8.2fe/bin/start_fe.sh
:wq保存退出
3.2 創建fe supervisor進程管理配置文件
輸入命令
vim /etc/supervisord.d/palo_fe-0.8.2.ini
輸入內容如下:
[program:PaloFe] process_name=PaloFe ;進程名稱 directory=/opt/palo-0.8.2/fe ;工作目錄 command=sh /opt/palo-0.8.2/fe/bin/start_fe.sh ;運行的命令 autostart=true ;自動開啟 autorestart=true ;自動重啟 user=root ;用戶 numprocs=1 ;進程數 startretries=3 ;啟動重試次數 stopasgroup=true ;是否停止子進程 killasgroup=true ;是否殺死子進程 startsecs=5 ;啟動5秒後,如果還是運行狀態才認為進程已經啟動 //redirect_stderr=true //stdout_logfile_maxbytes=20MB //stdout_logfile_backups=10 //stdout_logfile=/var/log/supervisor-PaloFe-0.8.2.log
4. 驗證
4.1 先確保沒有palo fe,be,broker進程在運行,如果有則使用kill -9 [processid]殺死掉
停止掉fe,broker
[root@palo252 palo-0.8.2]# jps 50258 DataNode 60387 Jps 59908 PaloFe 50109 NameNode 40318 BrokerBootstrap [root@palo252 palo-0.8.2]# kill -9 59908 [root@palo252 palo-0.8.2]# kill -9 40318
說明: BrokerBootstrap為broker的進程名稱,PaloFe為fe的進程名稱
停止掉be
[root@palo252 palo-0.8.2]# ps -e | grep palo 59362 ? 00:00:07 palo_be [root@palo252 palo-0.8.2]# kill -9 59362
4.2 啟動supervisor,驗證fe,be,broker是否啟動
啟動supervisor
supervisord -c /etc/supervisord.conf
查看狀態:
[root@palo252 palo-0.8.2]# supervisorctl status BrokerBootstrap RUNNING pid 64312, uptime 0:00:16 PaloFe RUNNING pid 64314, uptime 0:00:16 palo_be RUNNING pid 64313, uptime 0:00:16
驗證fe,be,broker進程是否啟動
[root@palo252 palo-0.8.2]# jps 50258 DataNode 63846 Jps 61548 BrokerBootstrap 50109 NameNode 60734 PaloFe [root@palo252 palo-0.8.2]# ps -e | grep palo 61118 ? 00:00:01 palo_be
我們發現進程確實已經啟動了。
4.3 通過supervisorctl stop後,進程是否停止
be:
[root@palo252 palo-0.8.2]# supervisorctl stop palo_be palo_be: stopped [root@palo252 palo-0.8.2]# ps -e | grep palo
be停止成功
fe:
[root@palo252 palo-0.8.2]# supervisorctl stop PaloFe PaloFe: stopped [root@palo252 palo-0.8.2]# jps 50258 DataNode 64411 BrokerBootstrap 50109 NameNode 65295 Jps
fe停止成功
broker:
[root@palo252 palo-0.8.2]# jps 50258 DataNode 64411 BrokerBootstrap 50109 NameNode 65295 Jps [root@palo252 palo-0.8.2]# supervisorctl stop BrokerBootstrap BrokerBootstrap: stopped [root@palo252 palo-0.8.2]# jps 65328 Jps 50258 DataNode 50109 NameNode
broker停止成功
4.4 通過supervisorctl start可以開啟進程
[root@palo252 palo-0.8.2]# jps 50258 DataNode 65400 Jps 50109 NameNode [root@palo252 palo-0.8.2]# ps -e | grep palo [root@palo252 palo-0.8.2]# supervisorctl start all palo_be: started PaloFe: started BrokerBootstrap: started [root@palo252 palo-0.8.2]# supervisorctl status BrokerBootstrap RUNNING pid 65421, uptime 0:00:21 PaloFe RUNNING pid 498, uptime 0:00:21 palo_be RUNNING pid 65422, uptime 0:00:21 [root@palo252 palo-0.8.2]# jps 50258 DataNode 65480 BrokerBootstrap 1212 Jps 50109 NameNode 1101 PaloFe [root@palo252 palo-0.8.2]# ps -e | grep palo 500 ? 00:00:00 palo_be
結果顯示啟動控制成功。
4.5 驗證在fe,be,broker崩潰後supervisor能夠自動重啟進程
輸入命令ps xuf 查看進程間的父子關系
ps xuf
root 64311 0.0 0.0 221680 12884 ? Ss 16:48 0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf root 65421 0.0 0.0 113124 1528 ? S 16:55 0:00 \_ sh /opt/palo-0.8.2/apache_hdfs_broker/bin/start_broker.sh root 65480 0.2 0.1 24345924 44188 ? Sl 16:55 0:00 | \_ /usr/java/jdk1.8.0_172-amd64/bin/java -Xmx20480m -Dfile.encoding=UTF-8 com.baidu.palo.broker.hdfs.BrokerBootstrap root 65422 0.0 0.0 113128 1540 ? S 16:55 0:00 \_ sh /opt/palo-0.8.2/be/bin/start_be.sh root 500 0.5 0.3 1787780 91400 ? Sl 16:55 0:00 | \_ /opt/palo-0.8.2/be/lib/palo_be root 498 0.0 0.0 113120 1492 ? S 16:55 0:00 \_ sh /opt/palo-0.8.2/fe/bin/start_fe.sh root 1101 6.1 1.3 9002228 342412 ? Sl 16:55 0:10 \_ /usr/java/jdk1.8.0_172-amd64/bin/java -Xmx5120m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails
我們發現在該列表中 fe的pid為1101,be的pid為500,broker的pid為65480
執行下面命令殺死這三個進程
kill -9 1101 kill -9 500 kill -9 65480
再次輸入ps xuf 查看進程父子關系
ps xuf
root 64311 0.0 0.0 221680 12892 ? Ss 16:48 0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf root 1375 0.0 0.0 113124 1548 ? S 17:03 0:00 \_ sh /opt/palo-0.8.2/fe/bin/start_fe.sh root 1709 14.0 1.3 9004284 330748 ? Sl 17:03 0:09 | \_ /usr/java/jdk1.8.0_172-amd64/bin/java -Xmx5120m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+Us root 1791 0.0 0.0 113128 1540 ? S 17:03 0:00 \_ sh /opt/palo-0.8.2/be/bin/start_be.sh root 2054 0.7 0.3 1774784 92008 ? Sl 17:03 0:00 | \_ /opt/palo-0.8.2/be/lib/palo_be root 2265 0.0 0.0 113124 1528 ? S 17:03 0:00 \_ sh /opt/palo-0.8.2/apache_hdfs_broker/bin/start_broker.sh root 2295 0.6 0.1 24345924 42224 ? Sl 17:03 0:00 \_ /usr/java/jdk1.8.0_172-amd64/bin/java -Xmx20480m -Dfile.encoding=UTF-8 com.baidu.palo.broker.hdfs.BrokerBootstrap
發現supervisor確實將進程重新啟動起來了。
說明一下:
通過supervisorctl status查詢出來的進程id其實不是fe,be,broker的進程id,而是啟動他們的shell進程id,start_xxx.sh裏面會啟動真正的doris進程,所以才有了進程樹之說,所以我們在配置的時候需要配置
stopasgroup=true ;是否停止子進程
killasgroup=true ;是否殺死子進程
這兩個參數為true,否則通過supervisorctl控制doris的後臺進程是無效的,這個是通過supervisor做doris守護進程的關鍵。
使用supervisor配置palo守護進程的完畢,使用supervisor後,確實能夠提高應用的健壯性!
Palo通過supervisor進行進程管理