跳到主要内容

服务管理配置

由于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

  1. 配置在Redash项目目录,即/opt/redash,由于gunicorn在redash python 依赖中,已经安装过,所以无需再次安装
  2. 编辑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'
  3. 启动,验证配置()
    #启动
    ./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

  1. 根据我们的安装文档,在安装的时候我们已经安装了supervisor,如果没有安装的可以通过(sudo yum或apt install -y supervisor) 另外,ubuntu和centos supervisor的配置文件后缀不同,一般ubuntu是.conf ,centos是.ini 大家可以看/etc/supervisord.conf中 include 部分是加载什么类型的。

  2. 创建日志输出目录给之后配置使用,一般我们会选择同其它日志一起,在这里我们选择/var/log/redash

    #创建日志目录
    sudo mkdir /var/log/redash
    #将目录授权给当前用户
    sudo chown -R ${USER} /var/log/redash
  3. 配置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
  4. 配置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
  5. 配置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
  6. 配置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
  7. 启动与更新supervisor

    #启动supervisor
    sudo systemctl start supervisord
    #设置开机自启
    sudo systemctl enable supervisord
    #更新所有服务
    sudo supervisorctl update
  8. supervisor常用操作

    #查看所有服务状态
    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请求。

  1. 安装nginx,这里用centos演示,ubuntu直接用apt即可。

    sudo yum install -y nginx
  2. 配置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;
    }
    }
  3. 启动nginx

    #校验nginx配置是否合规
    sudo nginx -t
    #启动
    sudo systemctl start nginx
    #配置自启
    sudo systemctl enable nginx
  4. 浏览器访问redash server 8080 端口验证,如有异常可以通过curl在redash server上先访问,看是否防火墙未放行对应端口。