前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >守护进程supervisor-1:部署/监控与注意事项

守护进程supervisor-1:部署/监控与注意事项

作者头像
千里行走
发布2019-07-03 17:56:55
1.4K0
发布2019-07-03 17:56:55
举报
文章被收录于专栏:千里行走千里行走千里行走

supervisor是一个守护服务,当被守护的服务异常宕掉后,守护服务会自动将他重启。是一个非常重要的运维利器。尤其对于python,php这类运行时抛异常的服务尤为重要,在过往特定的环境下,我们曾经单机用supervisor守护300~500个python进程,很爽。

本文将会聊一聊如何部署和使用,以及如何通过后台总览,特别是使用中的一些坑。

目录:

(1).supervisor安装

1.安装supervisor

2.守护一个服务

3.常用命令

(2).特别注意

(3).后台服务supervisor-monitor

1.php7安装

2.supervisor开启管理端口

3.部署supervisor-monitor

4.部署nginx&配置supervisor-monitor

(4).行百里者半九十

(5).参考资料

(1).supervisor安装

1.安装supervisor

yum -y install python-setuptools

easy_install supervisor 或者 pip install supervisor

查看supervisor版本号:

supervisord -v

mkdir /etc/supervisor

mkdir /data/xx/logs/supervisor

echo_supervisord_conf > /etc/supervisord.conf

修改文件/etc/supervisord.conf:

logfile=/data/xx/logs/supervisor/supervisord.log

vim /etc/supervisord.conf

;修改include配置,去除注释

[include]

files = /etc/supervisor/*.conf

启动supervisor:

/usr/bin/supervisord -c /etc/supervisord.conf

2.守护一个服务

在/etc/supervisor下建立conf文件,如:cdn-release-web-server.conf

[program:cdn-release-web-server]

user=hpy

command=sh /app/xx/cdn-release-web-server/start.sh

autostart=true

autorestart=true

stdout_logfile=/data/xx/logs/supervisor/cdn-release-web-server.log ; stdout log path, NONE for none; default AUTO

stdout_logfile_maxbytes=100MB ; max # logfile bytes b4 rotation (default 50MB)

stdout_logfile_backups=10 ; # of stdout logfile backups (0 means none, default 10)

stderr_logfile=/data/xx/logs/supervisor/cdn-release-web-server.error.log ; stderr log path, NONE for none; default AUTO

stderr_logfile_maxbytes=100MB ; max # logfile bytes b4 rotation (default 50MB)

stderr_logfile_backups=10

priority=1

numprocs=1

startretries=100

stopwaitsecs=2

stopasgroup=true

重要参数说明:

stopasgroup:表示当stop掉守护进程后,是否杀掉其子进程;true表示会杀掉子进程。

然后执行如下命令让其生效,并且启动被守护的服务:

supervisorctl update

执行supervisorctl进入supervisor命令行:

可以执行status等命令进行操作。

3.常用命令

supervisorctl stop programxxx:

停止某一个进程(programxxx),programxxx 为 [program:beepkg] 里配置的值,这个示例就是 beepkg。

supervisorctl start programxxx:启动某个进程。

supervisorctl restart programxxx:重启某个进程。

supervisorctl status:查看进程状态。

supervisorctl stop groupworker:

重启所有属于名为 groupworker 这个分组的进程(start,restart 同理)。

supervisorctl stop all:

停止全部进程,注:start、restart、stop 都不会载入最新的配置文件。

supervisorctl reload:

载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。

supervisorctl update:

根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

(2).特别注意

在开启stopasgroup=true的前提下,如果这么写:

command=su - hpy-c "/app/xx/cdn-release-web-server/start.sh"

是有问题的,start后你会发现有三个进程,比如:

使用pstree -p 21964查看进程树:

此时如果在supervisorctl命令行中stop守护进程/或者被linux-os杀掉,只会把守护进程21964和其子进程21965杀掉,孙进程21981(实际服务)不会被杀掉,那么当你在start守护进程时,supervisor就会再新启动21981孙进程对应的服务,但是孙进程服务的端口号已经被占用,supervisor实际上是无法启动被守护服务的,就会反复尝试启动,通过监控你可能就会看到机器的cpu和memory的使用率情况非常的诡异。

(3).后台服务supervisor-monitor

先看一个效果:

作为一个开源作品,页面还是挺赞的,我最爱的简约风格。

这是用php写的,所以需要安装php,nginx。

1.php7安装

安装epel-release

通过命令:

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装PHP7

终端再次运行如下命令:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

成功获取PHP7的yum源,然后再执行:

yum install php70w

安装所有插件:这里主要用到php-fpm

yum install php70w*

启动php-fpm:

service php-fpm start

查看php-fpm服务状态:

systemctl status php-fpm.service

2.supervisor开启管理端口

要在每个机器的/etc/supervisord.conf配置文件中开启inet_http_server:

[inet_http_server]

port=*:9001

username="yourusername"

password="yourpass"

暴露9001端口给supervisor-monitor获取数据和进行supervisor相关操作。

然后需要重启supervisor。

3.部署supervisor-monitor

下载代码:

git clone https://github.com/mlazarov/supervisord-monitor.git

copy配置文件:

cp supervisord-monitor/application/config/supervisor.php.example supervisord-monitor/application/config/supervisor.php

vim application/config/supervisor.php

修改用户名和密码:

$config['supervisor_servers'] = array(

'cdn-release-web-server-001' => array(

'url' => 'http://supervisor-1/RPC2',

'port' => '9001',

'username' => 'yourusername',

'password' => 'yourpass'

),

'cdn-release-web-server-002' => array(

'url' => 'http://supervisor-2/RPC2',

'port' => '9001',

'username' => 'yourusername',

'password' => 'yourpass'

),

);

4.部署nginx&配置supervisor-monitor

部署过程略。

在nginx.conf中加入配置:

server {

listen 80;

server_name super.com;

set $web_root /app/3rd/supervisord-monitor/public_html; #你的supervisor-monitor目录

root $web_root;

index index.php index.html index.htm;

location / {

try_files $uri $uri/ /index.php;

}

location ~ /*\.php$ {

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $web_root$fastcgi_script_name;

fastcgi_param SCHEME $scheme;

include fastcgi_params;

fastcgi_pass 127.0.0.1:9000; #php-fpm默认端口是9000

}

access_log /data/xx/logs/nginx/supervisor-monitor.access.log;

error_log /data/xx/logs/nginx/supervisor-monitor.error.log;

}

为了安全,必须增加nginx的访问密码,主要是权限收敛防止误操作(supervisor-monitor支持直接start/stop等操作):

htpasswd -c passwd supervisor-monitor

启动nginx,本地配置host即可访问,输入密码进入页面。

(4).行百里者半九十

一个服务上线仅仅是刚刚开始,让他高效稳定的24*7运行需要太多太多的工作去处理。

而supervisor守护服务给我们提供了一个相对保障,允许我们有时间进行服务的优化&保障工作,这是非常重要的。

我认为,supervisor守护服务并不是为了防守,而是为了更好的进攻。

(5).参考资料

1.supervisor官方资料:

http://supervisord.org/installing.html

2.supervisor-monitor官方git:

https://github.com/hepyu/supervisord-monitor

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千里行走 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档