天天看點

19 Tornado - 部署Tornado

為了充分利用多核CPU,并且為了減少同步代碼中的阻塞影響,在部署Tornado的時候需要開啟多個程序(最好為每個CPU核心開啟一個程序)

因為Tornado自帶的伺服器性能很高,是以我們隻需開啟多個Tornado程序。為了對外有統一的接口,并且可以分發使用者的請求到不同的Tornado程序上,我們用Nginx來進行代理。

19 Tornado - 部署Tornado

1. 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
           

2. nginx

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;
    }
}
           
service nginx start   # 啟動
service nginx stop    # 停止
service nginx restart # 重新開機
           
啟動:sudo sbin/nginx
停止:sudo sbin/nginx -s stop
重新開機:sudo sbin/nginx -s reload
           

繼續閱讀