服务管理配置
由于Redash涉及到多个服务,在生产环境中我们需要对这些服务进行统一的管理。此外对于生产环境,现有的 wsgi 是很难承载请求的压力。这里我们通过gunicorn作为web server提供后台接口服务,通过Nginx作为静态资源服务器并反代web server,再通过supervisor来统一管理redash的服务
前景配置(基于上一节部署配置)
- Redash项目目录:/opt/redash
- Redash环境变量文件:/opt/redash/.env (注意只有项目根目录的.env可以使用Redash原生的./bin/run加载环境变量)
- 项目venv目录(即虚拟环境目录):/opt/redash/venv
配置gunicorn
- 配置在Redash项目目录,即/opt/redash,由于gunicorn在redash python 依赖中,已经安装过,所以无需再次安装
- 编辑gunicorn配置文件,这里我们用gunicorn.config.py
proc_name = 'redash'
bind = '127.0.0.1:5000'
workers = 4
max_requests = 1000
max_requests_jitter = 100
timeout = 60
pidfile = './gunicorn.pid' - 启动,验证配置()
#启动
./bin/run ./venv/bin/gunicorn -c gunicorn.config.py redash.wsgi:app
#验证web server,如果想通过浏览器验证,可以修改上一步的监听,改为0.0.0.0:5000
curl -L 127.0.0.1:5000
配置supervisor
根据我们的安装文档,在安装的时候我们已经安装了supervisor,如果没有安装的可以通过(sudo yum或apt install -y supervisor) 另外,ubuntu和centos supervisor的配置文件后缀不同,一般ubuntu是.conf ,centos是.ini 大家可以看/etc/supervisord.conf中 include 部分是加载什么类型的。
创建日志输出目录给之后配置使用,一般我们会选择同其它日志一起,在这里我们选择/var/log/redash
#创建日志目录
sudo mkdir /var/log/redash
#将目录授权给当前用户
sudo chown -R ${USER} /var/log/redash配置server服务,用vim或nano新建文件/etc/supervisord.d/redash-server.ini,ubuntu为redash-server.conf (注意:执行用户根据需求自行修改,我们这里是redash,这个用户要和之前用户保持一致,不然会导致权限问题)
[program:redash-server]
#工作目录
directory=/opt/redash
#服务启动的用户名
user=redash
#服务启动的命令
command=/bin/bash ./bin/run ./venv/bin/gunicorn -c gunicorn.config.py redash.wsgi:app
#启动supervisor的时候一起启动服务
autostart=true
#关闭服务发送给linux的信号类型
stopsignal=TERM
#启动失败重试的次数
startretries=3
#是否开启重试
autorestart=true
#启动优先级,越小越大
priority=100
#错误日志重定向到正常日志
redirect_stderr=true
#日志最大大小
stdout_logfile_maxbytes=50MB
#日志输出位置
stdout_logfile=/var/log/redash/server.log配置scheduler服务,用vim或nano新建文件/etc/supervisord.d/redash-scheduler.ini,ubuntu为redash-scheduler.conf
[program:redash-scheduler]
directory=/opt/redash
command=/bin/bash ./bin/run ./venv/bin/python manage.py rq scheduler
#注意修改用户
user=redash
autostart=true
stopsignal=TERM
startretries=3
autorestart=true
priority=500
redirect_stderr=true
stdout_logfile_maxbytes=50MB
stdout_logfile=/var/log/redash/scheduler.log配置worker服务,用vim或nano新建文件/etc/supervisord.d/redash-worker.ini,ubuntu为redash-worker.conf
[program:redash-worker]
directory=/opt/redash
command=/bin/bash ./bin/run ./venv/bin/python manage.py rq worker
#注意修改用户
user=redash
#启动进程数,通过这个可以控制redash worker的数量
numprocs=4
process_name=%(program_name)s_%(process_num)01d
autostart=true
stopsignal=TERM
startretries=3
autorestart=true
priority=900
redirect_stderr=true
stdout_logfile_maxbytes=50MB
stdout_logfile=/var/log/redash/worker.log配置worker健康检查服务,用vim或nano新建文件/etc/supervisord.d/redash-worker-check.ini,ubuntu为redash-worker-check.conf
[eventlistener:worker_healthcheck]
directory=/opt/redash
serverurl=AUTO
command= /bin/bash ./bin/run ./venv/bin/python manage.py rq healthcheck
#注意修改用户
user=redash
events=TICK_60
stdout_logfile_maxbytes=50MB
stderr_logfile_maxbytes=50MB
stdout_logfile=/var/log/redash/check.log
stderr_logfile=/var/log/redash/check_err.log启动与更新supervisor
#启动supervisor
sudo systemctl start supervisord
#设置开机自启
sudo systemctl enable supervisord
#更新所有服务
sudo supervisorctl updatesupervisor常用操作
#查看所有服务状态
sudo supervisorctl status
#服务更新,当更新了配置文件,需要执行此命令
sudo supervisorctl update
#服务启动/关闭/重启,可以接一个服务,也可以用all代表所有服务
sudo supervisorctl start/stop/restart all
配置nginx
前面我们已经将Redash的服务都统一进行了管理,并且配置了gunicorn作为web server取代开发时使用的wsgi。接下来为了进一步提高我们整套系统的性能以及稳定性,我们在web server前面架设nginx进行反代,并将所有的静态资源都托管到nginx。web server只接收api请求。
安装nginx,这里用centos演示,ubuntu直接用apt即可。
sudo yum install -y nginx
配置nginx,这里我们在nginx的conf.d目录下新加一个站点,通过vim 或 nano 新建 /etc/nginx/conf.d/redash.conf
upstream redash {
server 127.0.0.1:5000;
}
server {
listen 8080 ;
server_name _ ;
gzip on;
gzip_types *;
gzip_proxied any;
proxy_buffer_size 8k;
location /static {
#配置为打包好的前端目录
alias /opt/redash/client/dist;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
#此配置重写header location字段,根据你的外部访问的ip或域名以及端口修改后半部分
proxy_redirect ~^http[s]?://([0-9a-zA-Z\.\:]+)/(.*) http://192.168.98.102:8080/$2;
proxy_pass http://redash;
}
}启动nginx
#校验nginx配置是否合规
sudo nginx -t
#启动
sudo systemctl start nginx
#配置自启
sudo systemctl enable nginx浏览器访问redash server 8080 端口验证,如有异常可以通过curl在redash server上先访问,看是否防火墙未放行对应端口。