supervise词根词缀 Supervisor多进程管理 异常自动重启 可视化管理

Supervisor是多进程管理工具 , 在Docker中相关联的进程能够通过supervisor来管理 。微服务项目开发阶段 , 可用于微服务子项目的启动管理 。支持web可视化管理 , 能够极大方面开发者对项目状态的监控和重启管理 。

supervise词根词缀 Supervisor多进程管理 异常自动重启 可视化管理

文章插图
一、序言Supervisor是多进程管理工具 , 在Docker中相关联的进程能够通过supervisor来管理 。
微服务项目开发阶段 , 可用于微服务子项目的启动管理 。
支持web可视化管理 , 能够极大方面开发者对项目状态的监控和重启管理 。
二、安装与使用(一)安装与配置1、服务安装服务安装前 , 建议更新Python版本 , 使用较新的版本有利于服务拓展 , 若被管理的服务依赖于较新的Python版本 , 需要再次重新安装服务 。
yum install -y epel-releaseyum install -y supervisor查看版本号
supervisord -v2、配置文件配置文件路径为/etc/supervisord.conf , 其中用英文;表示注释 。将配置文件备份 , 过滤注释配置后形成新的配置文件 。
# 备份配置文件mv /etc/supervisord.conf /etc/supervisord.example.conf# 保留非注释配置 , 初始化为新的配置文件cat /etc/supervisord.example.conf | grep -v '^;' | tr -s "\n" > /etc/supervisord.conf使用命令echo_supervisord_conf查看默认配置
[unix_http_server]file=/var/run/supervisor/supervisor.sock; 可视化web监控模块(不需要直接注释)[inet_http_server]port=0.0.0.0:9001username=rootpassword=root[supervisord]logfile=/var/log/supervisor/supervisord.log; 最大单个日志文件大小logfile_maxbytes=50MB; 最大日志文件保留份数logfile_backups=10loglevel=infopidfile=/var/run/supervisord.pid; 如果将设置为系统服务 , 需要设置为falsenodaemon=falseminfds=1024minprocs=200[rpcinterface:supervisor]supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]serverurl=unix:///var/run/supervisor/supervisor.sock; 子进程配置存放目录[include]files = supervisord.d/*.ini通过如下命令查看版本号:
supervisord -v(二)启动1、后台启动将supervisord设置成开机自启 , 保证委托其管理的服务能够正常启动 , 建议使用此方式启动 。
# 设置开机自启systemctl enable supervisord# 启动主服务systemctl start supervisord2、前台启动在编写Docker镜像 , 需要在一个镜像中同时管理多个服务 , 需要使用前台启动 。supervisord的默认启动方式是daemon , 若要配置为前台启动需修改配置文件/etc/supervisord.confnodaemon属性值为true
# 使用脚本替换sed -i 's/nodaemon=false/nodaemon=true/g' /etc/supervisord.conf前台启动命令如下
supervisord -c /etc/supervisord.conf3、启动参数通常情况下参数都是添加在配置文件中 , 有些场景下 , 修改配置文件比较繁琐(比如已经生成的镜像) , 这时在命令行中添加运行时参数就比较方便 。
参数用途默认值-c指定配置文件路径/etc/supervisord.conf-ssupervisord服务器监听的URLhttp://localhost:9001-u用于与服务器进行身份验证的用户名user-p用于与服务器进行身份验证的密码123三、服务管理服务管理包含对主服务进行管理和对子服务进行管理;子服务分为单个管理和批量(分组)管理 。
1、查看主服务状态如果不指定子服务名称 , 默认重新查看所有的子服务状态 。指定子服务名 , 仅仅查看当前子服务状态 。
# 查看服务状态supervisorctl status主进程管理
#进程管理常用命令systemctl stop supervisordsystemctl start supervisordsystemctl restart supervisord2、可视化界面管理可视化界面在软件的不同开发阶段采用不同的策略 , 项目开发和测试阶段 , 为了提高开发效率 , 往往开启可视化界面 , 当项目开发完毕进行交付时 , 为保证服务器的安全 , 通常关闭可视化界面 。
开启Web可视化服务需要在配置文件中添加inet_http_server模块 。
(一)单服务管理单服务管理是指针对单个子服务进行管理 , 所有子服务在默认分组中 , 但是不显示的标出 。
1、刷新子服务列表当添加新加入子服务时 , 需要刷新列表 , 主服务方能纳入管理范畴 。
(1)reload
如果不指定子服务名称 , 默认重新启动所有的子服务列表 。指定子服务名 , 仅仅重启当前子服务 , 其它服务不受影响 。
所有子服务是指不管配置是否发生修改 , 都会重启 。
# 刷新服务列表supervisorctl reload(2)update
重启所有配置发生更改的子服务(包含新增子服务) , 配置未发生变化的子服务不重启 。
# 刷新服务列表supervisorctl update2、进程管理运行此种方式管理子进程颗粒度更小 。
# 启动指定服务supervisorctl start program_name# 停止指定服务supervisorctl stop program_name# 重启指定服务supervisorctl restart program_name# 启动所有服务supervisorctl start all# 停止所有服务supervisorctl stop all(二)分组管理当有相关联的子服务时 , 可采用分组管理 , 一旦设置分组并添加子服务 , 那么子服务名称就会发生变化:由原来的program_name变成group_name:program_name , 比如redis:redis80
分组管理需要修改主服务配置文件 。
1、查看分组子服务列表查看指定分组名称下子服务列表 , 
# 查看分组子服务列表supervisorctl status group_name:2、分组子进程管理以组为单位对子进程进行管理 , 包含启动服务、停止服务、重启服务 。
# 启动指定组名下服务supervisorctl start group_name:# 停止指定组名下服务supervisorctl stop group_name:# 重启指定组名下服务supervisorctl restart group_name:注意组名后的冒号:
3、分组应用将进程委托给Supervisor管理 , 并分组对于一组关联进程来说很方便 , 比如Redis主从服务、ES集群、ZK集群、Kafka集群 , 他们是一组关联度较高的子服务集合 。
四、编写子进程运行配置文件supervisor主进程配置文件为/etc/supervisord.conf
在目录/etc/supervisord.d下新建以.ini为后缀的配置文件 , 每一个配置文件代表一个子进程 。执行如下命令 , 即可添加子进程配置 。
快捷脚本传送门
(一)参数解释1、directory当子进程启动命令不能从环境变量读取到时 , 使用此参数切换到指定的工作目录 , 然后运行入口命令 。
2、priority当priority参数越大时 , 优先级越低 。
3、environment如果子应用无法获取系统环境变量 , 那么可显式指明特定环境的路径 。
environment=JAVA_HOME=/usr/local/java(二)日志管理1、查看子进程日志子进程被Supervisor管理后会产生相应的运行日志 , 常见的有访问日志和错误日志 。
; 访问日志stdout_logfile=/var/log/park/access.log; 错误日志stderr_logfile=/var/log/park/error.log在子进程配置文件中增加日志配置 , 可以在不使用可视化界面的情况下查看子进程日志 。可视化Web界面查看日志固然方便 , 缺陷是不能查看错误日志 。
tail -f /var/log/park/access.log子进程配置文件添加参数stdout_logfilestderr_logfile的日志文件会自动纳入主进程日志管理 , 自动进行日志轮转操作 , 用户无需干预 。
当子进程未显示的指明日志文件路径时 , 默认日志文件存在于/tmp路径下 。
Supervisord 会基于 logfile_maxbyteslogfile_backups 轮转日志 , 前者限制单个日志文件的大小 , 后者限制日志备份的数量 。此配置存在与主配置文件 , 非子进程配置文件 。
(三)常见组件配置1、Nginxcat <<EOF> /etc/supervisord.d/nginx.ini[program:nginx]directory=/usr/local/nginx/sbincommand=/usr/local/nginx/sbin/nginx -g 'daemon off;'; 主服务启动时自动启动当前子服务autostart=true; 子服务异常退出自动重启autorestart=true; 子服务启动时间(与时间情况尽量一致)startsecs=5startretries=3redirect_stderr=truestdout_logfile=/usr/local/nginx/logs/access.logstderr_logfile=/usr/local/nginx/logs/error.logEOF子进程的命令必须是以前台运行的方式执行 , 不能使用后台运行的方式执行 。
2、Rediscat <<EOF> /etc/supervisord.d/redis.ini[program:redis]command=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf --daemonize noautostart=trueautorestart=truestartsecs=5startretries=3redirect_stderr=trueEOF子进程的命令必须是以前台运行的方式执行 , 不能使用后台运行的方式执行 。
3、Nacoscat <<EOF> /etc/supervisord.d/nacos.ini[program:nacos]command=sh /usr/local/nacos/bin/startup.sh -m standaloneautostart=trueautorestart=truestartsecs=8startretries=3redirect_stderr=trueenvironment=JAVA_HOME=/usr/local/javapriority=1EOF子进程的命令必须是以前台运行的方式执行 , 不能使用后台运行的方式执行 。
4、ElasticSearchcat <<EOF> /etc/supervisord.d/es.ini[program:es]command=/usr/local/elasticsearch/bin/elasticsearch -Enetwork.host=127.0.0.1user=espassword=es.123.456umask=002autostart=trueautorestart=truestartsecs=8startretries=3redirect_stderr=truepriority=100EOF5、ZooKeepercat <<EOF> /etc/supervisord.d/zk.ini[program:zk]command=/usr/local/zookeeper/bin/zkServer.sh start-foregroundautostart=trueautorestart=truestartsecs=5startretries=3redirect_stderr=truepriority=100EOF6、Jenkinscat <<EOF> /etc/supervisord.d/jenkins.ini[program:jenkins]command=/usr/local/jenkins/bin/catalina.sh runautostart=trueautorestart=truestartsecs=8startretries=3redirect_stderr=truepriority=100EOF7、Kafkacat <<EOF> /etc/supervisord.d/kafka.ini[program:kafka]command=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.propertiesautostart=trueautorestart=truestartsecs=8startretries=3redirect_stderr=truepriority=100EOF8、Kibabacat <<EOF> /etc/supervisord.d/kibana.ini[program:kibana]command=/usr/local/kibana/bin/kibana -H 0.0.0.0autostart=trueautorestart=truestartsecs=8startretries=3redirect_stderr=trueEOF9、MongoDbcat <<EOF> /etc/supervisord.d/mongo.ini[program:mongo]command=/usr/local/mongo/bin/mongod --config=/usr/local/mongo/conf/config.ymlautostart=trueautorestart=truestartsecs=8startretries=3redirect_stderr=truepriority=100EOF原文地址
【supervise词根词缀 Supervisor多进程管理 异常自动重启 可视化管理】喜欢本文就【??推荐??】一下 , 激励我持续创作 。这个Github同样精彩 , 收到您的star我会很激动 。本文归档在专题博客 , 视频讲解在B站 。