1. 程式人生 > >Palo通過supervisor進行進程管理

Palo通過supervisor進行進程管理

官方 4.5 odi spa 環境 再次 onf 名稱 配置文件

下面一段文字是摘自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進行進程管理