Supervisor进程高可用工具详解

一、背景(进程高可用)

        无论是业务代码进程或者中间件等进程,在运行过程中难免会因为各种错综复杂的环境,会导致进程在某些情况意外被kill或者宕机。那么如何保证一个进程,在意外宕机的情况下,能够自动拉取,恢复正常提供服务呢? 有没有一种技术手段/方式来达到这一点,也是我们说的进程高可用。 使用supervisor是一个不错的方案之一.

        Supervisor是一个用于管理和监控进程的工具,特别适用于类UNIX系统(如Linux和macOS)。它最初是由Geoffrey Talvola编写,并以Python语言实现。Supervisor的设计目标是简化进程的管理,确保即使在进程崩溃或退出的情况下,也能自动重启它们,从而保持系统的稳定性和服务的连续性。

       优点和优势:

        1、Linux操作系统本身就内置了Python运行环境,同时Supervisor没有过多的第三方依赖包,整个离线源码安装压缩包也就500k大小. 使用和安装门槛低,无需我们专门为安装此软件耗费过多精力或者引入第三方依赖.

        2、使用者很多,开源项目活跃,遇到问题随便搜索资料都有。避免自己独自踩坑

        3、项目成熟度高,不充当小白鼠,得到了市场长时间的验证

        官网文档http://www.supervisord.org/introduction.html

二、安装

1、在线安装

1、pip安装
pip install supervisor
2、centos yum安装
yum install epel-release -y && yum install supervisor -y
3、其它安装方式

安装文档: http://www.supervisord.org/installing.html

2、离线安装

1、pypi搜索 supervisor包,下载源码包:

https://files.pythonhosted.org/packages/ce/37/517989b05849dd6eaa76c148f24517544704895830a50289cbbf53c7efb9/supervisor-4.2.5.tar.gz

wget "https://files.pythonhosted.org/packages/ce/37/517989b05849dd6eaa76c148f24517544704895830a50289cbbf53c7efb9/supervisor-4.2.5.tar.gz"

2、python3 setup.py install 安装即可, 如果缺什么package就补充什么package. package的安装也类似下载源码包, python执行setup.py

python setup.py install

三、基本架构说明

        Supervisor的运行架构主要基于客户端/服务器(Client/Server)模型,其核心组件包括supervisord守护进程和supervisorctl客户端工具。此外,Supervisor还提供了一个HTTP服务器,可以用于远程管理和监控。

1、supervisord-服务端

        supervisord是Supervisor的核心组件,它作为一个守护进程运行在服务器上。它的主要职责是:

        1、读取配置文件:从配置文件中获取被监控进程的列表及其相关的参数。
        2、管理进程:启动、停止和重启配置文件中定义的进程。
        3、监控进程状态:监视进程的运行状态,如果进程因某种原因退出,supervisord会根据配置自动重启进程。
        4、日志管理:收集被监控进程的输出并将其重定向到日志文件。
        5、事件通知:当进程状态发生变化时,可以触发预定义的事件处理程序。

2、supervisorctl-客户端

        supervisorctl是一个命令行工具,作为客户端,用于与supervisord守护进程通信。它可以执行以下操作:

        1、管理进程:启动、停止、重启进程,以及显示进程的状态。
        2、配置管理:更新配置文件而不需重启supervisord。
        3、事件管理:查看和管理事件处理程序。
        4、连接服务端: supervisorctl通过与supervisord建立RPC连接来发送命令和接收响应,因此它可以从任何地方管理supervisord,只要网络可达且有适当的权限。

3、使用步骤

1、启动supervisord守护进程, 启动之后默认是后台运行, 并且监听的一个本地socket文件

2、默认在/ect/supervisord/supervisord.conf是主配置文件,我们默认在supervisord.d目录下定义我们管理进程的.ini配置文件,文件格式大致如下:

[program:mysql]  # mysql, 程序名称
directory = /data/mysql/   # 程序所处工作路径
command=/data/mysql/bin/mysqld  # 程序启动完整命令
autostart=true    # 是否挂掉后自动拉起
autorestart=true  # 是否挂掉后自动拉起
startretries=3  #重试拉起次数
startsecs=20    #多少秒后没挂,认为程序是正常运行的
redirect_stderr=true  #是否重定向错误输出到标准输出
stdout_logfile=/data/mysql/supervisor-run.log #标准输出日志路径

3、supervisorctl reread  #重新读取到新的配置信息

4、supervisor update mysql  #启动托管的mysql任务

5、supervisor status #查看任务运行情况

6、此时如果进程意外退出,例如可以自己测试,手动kill -9 $pid, 等会我们会发现,这个进程还是会被supervisor拉起来,保证进程的正常运行。

四、supervisorctl常见子命令详解

1、start/stop/restart/status

见名知意, start启动任务、stop停止任务、restart重启任务、status查看任务运行状态列表

#针对单个任务而言

supervisorctl start mysql

supervisorctl stop mysql

supervisorctl restart mysql

#针对所有任务

supervisorctl stop all

#status,查看托管的程序运行状态列表
supervisorctl status

2、update

更新 Supervisor 的配置,并重启所有需要重启的进程。通常在更改配置文件后使用

supervisorctl update mysql

3、reread

重新读取配置文件,但不会重启任何进程。通常用于检查配置文件的更改是否有效。

建议:

        这个很有用,有时候,我们修改了配置文件内容,但是没有reread重读配置,新的配置内容不会生效,这个要注意!!!!

supervisorctl reread 

4、reload

结合了 reread 和 update 的功能,重新读取配置文件并更新进程。

这个小心使用哦,因为有些时候,你只是稍微改了一下ini配置信息[无关紧要的注释或者某些参数],但是此时你又不想重启原来正在跑的进程。  或者有时候是,别人修改了,别人不想重启,但是你上来就reload, 有可能造成事故!!!

建议:

        可以先通过reread来看看,哪些配置文件改了,再决定是否要更新update吧. 除非你很明确知道需要直接执行reload操作

supervisorctl reload

5、remove

移除一个或多个进程的监控。 例如某个任务,不想进行supervisor托管了,需要先stop,再remove。

supervisorctl remove mysql

6、tail

显示进程的最近日志输出。

supervisorctl tail -f myapp  #其中 -f 表示跟随日志的实时输出。

7、关于ini配置文件字段以及其它信息,参考官网更加详细文档

文档地址: http://www.supervisord.org/configuration.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GEEK JUMP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值