运行多个Tornado实例python
网页响应不是特别的计算密集型处理
多个实例充分利用 CPU
多端口怎么处理
4.
使用Supervisor监控Tornado进程
安装(注意看是否须要指定使用python2版本)nginx
sudo pip2 install supervisor
安装完以后先启动 sudo supervisord
1
2
检查配置文件 /etc/supervisor/supervisord.conf 没有的话本身建立
echo_supervisord_conf > /etc/supervisor/supervisord.confweb
增长 Supervisor 配置文件到 /etc/supervisor/conf.d
增长一个tornadoes组服务器
[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002app
# 分别定义三个tornado的进程配置负载均衡
[program:tornado-8000]
directory=/home/pyvip/ws/tudo/ ; 程序的启动目录
command=/home/pyvip/.virtualenvs/py3/bin/python app.py --port=8080 ; 启动命令,与手动在命令行启动的命令是同样的,注意这里home不可用~代替
autostart=true ; 在 supervisord 启动的时候也自动启动
startsecs=5 ; 启动 5 秒后没有异常退出,就看成已经正常启动了
autorestart=true ; 程序异常退出后自动重启
startretries=3 ; 启动失败自动重试次数,默认是 3
user=pyvip ; 用哪一个用户启动
redirect_stderr=true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,须要注意当指定目录不存在时没法正常启动,因此须要手动建立目录(supervisord 会自动建立日志文件)
stdout_logfile = /tmp/tornado_app_8000.log
loglevel=infotornado
[program:tornado-8001]
directory=/home/pyvip/ws/tudo/
command=/home/pyvip/.virtualenvs/tornado/bin/python app.py --port=8001
autostart=true
startsecs=5
autorestart=true
startretries=3
user=pyvip
redirect_stderr=true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /tmp/tornado_app_8001.log
loglevel=info命令行
[program:tornado-8002]
directory=/home/pyvip/ws/tudo/
command=/home/pyvip/.virtualenvs/tornado/bin/python app.py --port=8002
autostart=true
startsecs=5
autorestart=true
startretries=3
user=pyvip
redirect_stderr=true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /tmp/tornado_app_8002.log
loglevel=info
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
启动和管理代理
启动supervisorrest
使用默认的配置文件 /etc/supervisor/supervisord.conf
sudo supervisord
明确指定配置文件
sudo supervisord -c /home/pyvip/working/supervisord.con
使用 user 用户启动supervisord
sudo supervisord -u user
查看、操做进程状态
(tornado) pyvip@Vip:~/ws/tudo$ sudo supervisorctl
[sudo] password for pyvip:
tornadoes:tornado-8000 RUNNING pid 17652, uptime 0:00:28
tornadoes:tornado-8001 RUNNING pid 17653, uptime 0:00:28
tornadoes:tornado-8002 RUNNING pid 17654, uptime 0:00:28
中止运行tornado-8001服务器进程
supervisor> stop tornadoes:tornado-8001
tornados:tornado-8001: stopped
中止运行整个tornado服务器进程组
supervisor> stop tornadoes:
tornadoes:tornado-8000: stopped
tornadoes:tornado-8001: stopped
tornadoes:tornado-8002: stopped
supervisor> status
tornadoes:tornado-8000 STOPPED Jun 26 07:43 PM
tornadoes:tornado-8001 STOPPED Jun 26 07:43 PM
tornadoes:tornado-8002 STOPPED Jun 26 07:43 PM
supervisorctl 命令介绍
中止某一个进程,program_name 为 [program:x] 里的 x
supervisorctl stop program_name
启动某个进程
supervisorctl start program_name
重启某个进程
supervisorctl restart program_name
结束全部属于名为 groupworker 这个分组的进程 (start,restart 同理)
supervisorctl stop groupworker:
结束 groupworker:name1 这个进程 (start,restart 同理)
supervisorctl stop groupworker:name1
中止所有进程,注:start、restart、stop 都不会载入最新的配置文件
supervisorctl stop all
载入最新的配置文件,中止原有进程并按新的配置启动、管理全部进程
supervisorctl reload
根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update
若是让supervisor 在web页面上展现,须要修改/etc/supervisor/supervisord.conf配置文件(有用户名密码),而后按照如下方式从新加载:
sudo supervisorctl -u user -p 123 reload
使用 Nginx 做为反向代理
搭配 tornado 服务使用
安装和运行
安装
sudo apt-get install nginx
检测配置文件正确可用
sudo nginx -t
运行
sudo nginx
修改了配置文件后重启
sudo nginx -s reload
nginx 配置文件
主配置文件是 /etc/nginx/nginx.conf
项目对应的配置文件放到 /etc/nginx/conf.d/ 或者 /etc/nginx/sites-enabled/
upstream tornadoes{
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
proxy_next_upstream error;
server {
listen 8888; # 通常是 80
server_name 127.0.0.1;
location /{ proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; # 把请求方向代理传给tornado服务器,负载均衡 proxy_pass http://tornadoes; }}