单个Tornado服务由于文件句柄和处理请求数的限制不能够很好得满足实际的工作需求,因此我们搭建多个实例共同服务,但是Tornado自身没有这样的集群管理能力,所以我们需要借助第三方工具——Supervisor。
Supervisor 是用Python编写的运行在Linux上的进程控制系统,用于监控和管理批量的服务进程,当前版本3.3.0。
安装
$ pip install supervisor |
配置
$ echo_supervisord_conf > /etc/supervisord.conf |
修改默认配置
编辑/etc/supervisord.conf
:
; 修改unix socket文件位置,因为不清楚的原因,默认文件位置工作一段时间之后会不正常 |
配置Tornado
在/etc/supervisor/
下添加tornado.ini
文件:
[group:tornadoes] |
这里我们定义了一个名为tornadoes的组,包含四个成员tornado-8000、tornado-8001、tornado-8002、tornado-8003。
program定义进程名,每个program有单独的详细配置。
至此我们的配置工作基本完成。
启动
$ /usr/bin/supervisord -c /etc/supervisord.conf |
开机自启动
$ sudo vim /lib/systemd/system/supervisor.service |
写入如下内容:[Unit]
Description=supervisor
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 启动服务 |
管理服务
管理服务需要用到supervisorctl命令,这个命令必须在Supervisord启动之后执行,它通过发送指令给Supervisord达到管理的目的。
常用的指令有:
supervisorctl reload
重启Supervisord服务supervisorctl restart <name>|<gname>
重启某个服务或某一组服务supervisorctl status
查看服务运行的状态和时间
其他
如果Tornado集群部署在Nginx反向代理之后,要获取到远程真实IP,除了必要的Nginx配置之外,Tornado也需要明确指定xheaders=True,官方有说明:
If xheaders is True, we support the X-Real-Ip/X-Forwarded-For and X-Scheme/X-Forwarded-Proto headers, which override the remote IP and URI scheme/protocol for all requests. These headers are useful when running Tornado behind a reverse proxy or load balancer. The protocol argument can also be set to https if Tornado is run behind an SSL-decoding proxy that does not set one of the supported xheaders.
具体代码示例:
application = tornado.web.Application([ |