Palo通过supervisor进行进程管理

Posted lenmom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

[[email protected] palo-0.8.2]# jps
50258 DataNode
60387 Jps
59908 PaloFe
50109 NameNode
40318 BrokerBootstrap
[[email protected] palo-0.8.2]# kill -9 59908
[[email protected] palo-0.8.2]# kill -9 40318

说明: BrokerBootstrap为broker的进程名称,PaloFe为fe的进程名称

停止掉be

[[email protected] palo-0.8.2]# ps -e | grep palo
59362 ?        00:00:07 palo_be
[[email protected] palo-0.8.2]# kill -9 59362

 

4.2 启动supervisor,验证fe,be,broker是否启动

启动supervisor

supervisord -c /etc/supervisord.conf 

 

查看状态:

[[email protected] 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进程是否启动

[[email protected] palo-0.8.2]# jps
50258 DataNode
63846 Jps
61548 BrokerBootstrap
50109 NameNode
60734 PaloFe
[[email protected] palo-0.8.2]# ps -e | grep palo
61118 ?        00:00:01 palo_be

我们发现进程确实已经启动了

 

4.3 通过supervisorctl stop后,进程是否停止

be:

[[email protected] palo-0.8.2]# supervisorctl stop palo_be
palo_be: stopped
[[email protected] palo-0.8.2]# ps -e | grep palo

be停止成功

 

fe:

[[email protected] palo-0.8.2]# supervisorctl stop PaloFe
PaloFe: stopped
[[email protected] palo-0.8.2]# jps
50258 DataNode
64411 BrokerBootstrap
50109 NameNode
65295 Jps

fe停止成功

 

broker:

[[email protected] palo-0.8.2]# jps
50258 DataNode
64411 BrokerBootstrap
50109 NameNode
65295 Jps
[[email protected] palo-0.8.2]# supervisorctl stop BrokerBootstrap
BrokerBootstrap: stopped
[[email protected] palo-0.8.2]# jps
65328 Jps
50258 DataNode
50109 NameNode

broker停止成功

 

4.4 通过supervisorctl start可以开启进程

[[email protected] palo-0.8.2]# jps
50258 DataNode
65400 Jps
50109 NameNode
[[email protected] palo-0.8.2]# ps -e | grep palo
[[email protected] palo-0.8.2]# supervisorctl start all
palo_be: started
PaloFe: started
BrokerBootstrap: started
[[email protected] 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
[[email protected] palo-0.8.2]# jps
50258 DataNode
65480 BrokerBootstrap
1212 Jps
50109 NameNode
1101 PaloFe
[[email protected] 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进行进程管理的主要内容,如果未能解决你的问题,请参考以下文章

supervisor进程管理

【工具】supervisor进程管理

Supervisor进程管理

supervisor进程管理程序

Supervisor的作用与配置

supervisor进程管理工具的使用