Tornado基础:部署

未匹配的标注

部署 Tornado#

简介#

为了充分利用多核 CPU,并且为了减少同步代码中的阻塞影响,在部署 Tornado 的时候需要开启多个进程(最好为每个 CPU 核心开启一个进程)

因为 Tornado 自带的服务器性能很高,所以我们只需开启多个 Tornado 进程。为了对外有统一的接口,并且可以分发用户的请求到不同的 Tornado 进程上,我们用 Nginx 来进行代理。

supervisor#

为了统一管理 Tornado 的多个进程,我们可以借助 supervisor 工具。

安装#

sudo pip install supervisor

配置#

运行 echo_supervisord_conf 命令输出默认的配置项,可以如下操作将默认配置保存到文件中

echo_supervisord_conf > supervisord.conf

vim 打开编辑 supervisord.conf 文件,修改

[include]
files = relative/directory/*.ini

[include]
files = /etc/supervisor/*.conf

include 选项指明包含的其他配置文件。

将编辑后的 supervisord.conf 文件复制到 /etc/ 目录下

sudo cp supervisord.conf /etc/

然后我们在 /etc 目录下新建子目录 supervisor(与配置文件里的选项相同),并在 /etc/supervisor/ 中新建 tornado 管理的配置文件 tornado.conf。

[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003

[program:tornado-8000]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat    /server.py --port=8000
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info

[program:tornado-8001]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat    /server.py --port=8001
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info

[program:tornado-8002]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat    /server.py --port=8002
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info

[program:tornado-8003]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat    /server.py --port=8003
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info

启动#

supervisord -c /etc/supervisord.conf

查看 supervisord 是否在运行:

ps aux | grep supervisord

supervisorctl#

我们可以利用 supervisorctl 来管理 supervisor。

supervisorctl

> status    # 查看程序状态
> stop tornadoes:*   # 关闭 tornadoes组 程序
> start tornadoes:*  # 启动 tornadoes组 程序
> restart tornadoes:*    # 重启 tornadoes组 程序
> update    # 重启配置文件修改过的程序

执行 status 命令时,显示如下信息说明 tornado 程序运行正常:

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

nginx#

对于使用 ubuntu apt-get 安装 nginx,其配置文件位于 /etc/nginx/sites-available 中,修改 default 文件如下:

upstream tornadoes {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}

upstream websocket {
    server 127.0.0.1:8000;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    location /static/ {
        root /home/python/Documents/demo/chat;
        if ($query_string) {
            expires max;
        }
    }

    location /chat {
        proxy_pass http://websocket/chat;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    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;  # 协议 http https
        proxy_pass http://tornadoes;
    }
}

启动 nginx

service nginx start   # 启动
service nginx stop    # 停止
service nginx restart # 重启

源码安装版本

启动:sudo sbin/nginx
停止:sudo sbin/nginx -s stop
重启:sudo sbin/nginx -s reload

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~