Supervisor 是一个用 Python 实现的进程管理工具,可以很方便地启动,关闭,重启,查看,以及监控进程,当进程由于某种原因崩溃或者被误杀后,可以自动重启并发送事件通知。Supervisor 可谓运维利器,使用 Supervisor 来管理进程,可以提高系统的高可用特性。
随着 Redis 越来越流行,越来越多的公司都使用上了 Redis,因此 Redis 的进程管理就成了很多公司都需要面临的问题,本文介绍如何使用 Supervisor 来管理 Redis 进程。
Supervisor 简介
Supervisor 包括以下四个组件。
supervisord
服务端程序,主要功能是启动 supervisord 服务及其管理的子进程,记录日志,重启崩溃的子进程,等。supervisorctl
命令行客户端程序,它提供一个类似 shell 的接口,通过 UNIX 域套接字或者 TCP 套接字并使用 XML_RPC 协议与 supervisord 进程进行数据通信。它的主要功能是管理(启动,关闭,重启,查看状态)子进程。Web Server
实现在界面上管理进程,还能查看进程日志和清除日志。XML-RPC 接口
可以通过 XML_RPC 协议对 supervisord 进行远程管理,达到和 supervisorctl 以及 Web Server 一样的管理功能。
进程被 Supervisor 管理后,其运行状态的转化图如下图 1 所示:
图 1 :子进程状态转移图
我们挑几个重要的进程状态来说明。
- running:进程处于运行状态
- starting:Supervisor 收到启动请求后,进程处于正在启动过程中
- stopped:进程处于关闭状态
- stopping:Supervisor 收到关闭请求后,进程处于正在关闭过程中
- backoff:进程进入 starting 状态后,由于马上就退出导致没能进入 running 状态
- fatal:进程没有正常启动
- exited:进程从 running 状态退出
没有接触过 Supervisor 的朋友可能对上面的描述感到有些抽象,不用担心,经过下面的实践后,会快速理解 Supervisor 涉及的这些名词的。
Supervisor 初体验
我们以 CentOS 平台下为例,说明如何使用 Supervisor 这一强大的进程管理工具。
1. 安装
可以使用easy_intall
来安装 Supervisor:
easy_install supervisor
也可以使用pip
来安装 Supervisor:
pip install supervisor
安装过程比较简单,此处我们不再赘