8.3 使用 Supervisor 监控 Tornado 进程
正如 8.2 节中埋下的伏笔,我们将在我们的 Tornado 应用中运行多个实例以充分利用现代的多处理器和多核服务器架构。开发团队大多传闻每个核运行一个 Tornado 进程。但是,正如我们所知道的,大量的传闻并不代表事实,所以你的结果可能不同。在本节中,我们将讨论在 UNIX 系统中管理多个 Tornado 实例的策略。
到目前为止,我们都是在命令行中运行 Tornado 服务器的,就像 $ python main.py --port=8000
。但是,再擦河南刮起的生产部署中,这是不可管理的。因为我们为每个 CPU 核心运行一个独立的 Tornado 进程,因此有很多进程需要监控和控制。supervisor 守护进程可以帮助我们完成这个任务。
Supervisor 的设计是每次开机时启动其配置文件中列出的进程。这里,我们将看到管理我们在 Nginx 配置文件中作为上游主机提到的四个 Tornado 实例的 Supervisor 配置。典型的 supervisord.conf 文件中包含了全局的配置指令,并加载 conf.d 目录下的其他配置文件。代码清单 8-4 展示了我们想启动的 Tornado 进程的配置文件。
代码清单 8-4 tornado.conf
[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003
[program:tornado-8000]
command=python /var/www/main.py --port=8000
directory=/var/www
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8001]
command=python /var/www/main.py --port=8001
directory=/var/www
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8002]
command=python /var/www/main.py --port=8002
directory=/var/www
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8003]
command=python /var/www/main.py --port=8003
directory=/var/www
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
为了 Supervisor 有意义,你需要至少包含一个 program 部分。在代码清单 8-4 中,我们定义了四个程序,分别命名为 tornado-8000 到 tornado-8003。program 部分定义了 Supervisor 将要运行的每个命令的参数。command 的值是必须的,通常是带有我们希望监听的 port 参数的 Tornado 应用。我们还为每个程序的工作目录、有效用户和日志文件定义了额外的设置;而把 autorestart 和 redirect_stderr 设置为 true 是非常有用的。
为了一起管理所有的 Tornado 进程,创建一个组是很有必要的。在这个例子的顶部,我们声明了一个叫作 tornadoes 的组,并在其中列出了每个程序。现在,当我们想要管理我们的 Tornado 应用时,我们可以通过带有通配符的组名引用所有的组成程序。比如,要重启应用时,我们只需要在 supervisorctl 工具中使用命令 restart tornadoes:*
。
一旦你安装和配置好 Supervisor,你就可以使用 supervisorctl 来管理 supervisord 进程。为了启动你的 Web 应用,你可以让 Supervisor 重新读取配置,然后任何配置改变的程序或程序组将被重启。你同样可以手动启动、停止和重启被管理的程序或检查整个系统的状态。
supervisor> update
tornadoes: stopped
tornadoes: updated process group
supervisor> status
tornadoes:tornado-8000 RUNNING pid 32091, uptime 00:00:02
tornadoes:tornado-8001 RUNNING pid 32092, uptime 00:00:02
tornadoes:tornado-8002 RUNNING pid 32093, uptime 00:00:02
tornadoes:tornado-8003 RUNNING pid 32094, uptime 00:00:02
Supervisor 和你系统的初始化进程一起工作,并且它应该在系统启动时自动注册守护进程。当 supervisor 启动后,程序组会自动在线。默认情况下,Supervisor 会监控子进程,并在任何程序意外终止时重生。如果你想不管错误码,重启被管理的进程,你可以设置 autorestart 为 true。
Supervisor 不只可以使管理多个 Tornado 实例更容易,还能让你在 Tornado 服务器遇到意外的服务中断后重新上线时泰然处之。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论