使用nginx实现平滑上线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/singgel/article/details/88615137

背景介绍:易车的网站在部署的时候有几台机器要走公网,刚开始的时候的方案就是,采用nginx的错误状态码重试,当然在开发过程中,开发完成,完成测试阶段,修复bug后都要重启后台服务,测试又在测试,每次重启都要一两分钟,平凡的重启,测试不干了;所以想到就是部署两台服务器;用nginx upstream 模块实现 无感知部署,发现一个bug,修复;直接部署不会打断测试;

所以该方法虽然在线上环境经过尝试之后还是没有用,但是对于测试环境来说,还是很有帮助的,对了关于nginx的更多知识,欢迎来我的github:https://github.com/singgel/nginx-configTemplate

部署思想:打时间差,就是先后部署这两台机器,控制好时间,保证有一台机器可以使用;在部署的时候,用了一个sleep 100  来启动间隔,间隔是100秒,100秒后台,重新启动第二台服务器;

服务器1  : 172.20.7.89:7001

服务器2  :  172.20.7.90:7001

废话不多说,直接上配置文件 nginx.conf (配置文件直接上)

upstream serverProxy{
      server 172.20.7.89:7001 weight=2 max_fails=3 fail_timeout=100s;
      server 172.20.7.90:7001 weight=2  max_fails=3 fail_timeout=100s;
   }


server {
    listen 80;
    server_name dev.yiche.com;
    root /home/work/app/dist;
    index index.html;
    location /monitor  {
        proxy_pass http://serverProxy;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream http_502 http_504 error timeout invalid_header; 
    }
}

max_fails = 3 fail_timeout=100s  表示 ${fail_timeout}(100秒)时间内出现${max-fails}(3次)次失败,就会把这个机器状态置为down(下线),就是失败$(fail_timeout)(100秒)时间后,会重新尝试启用这服务器;

这样就配置好一个两台服务器负载均衡的配置了;

但是这还是不够的;因为这样的话,一个服务器要被请求3次才会被下线,也就是说,会有3次错误的请求;返回502或者是error;

所以我们还要启用proxy_next_upstream 功能: 在服务器返回502,504,错误,超时 的时候;允许转发到其他服务器;

proxy_next_upstream http_502 http_504 error timeout invalid_header; 
启用该功能需要在nginx.conf中添加 
proxy_next_upstream on
注:就是在部署这两台服务器的时候,最好能够和这边nginx配置的服务器失败重试时间一致;这样nginx失败转发就不会出错,用户也会无感知;

猜你喜欢

转载自blog.csdn.net/singgel/article/details/88615137