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进行进程管理的主要内容,如果未能解决你的问题,请参考以下文章