侧边栏壁纸
  • 累计撰写 57 篇文章
  • 累计创建 98 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

记一次基于nginx的proxy_next_upstream配置实现无感知部署

Sir丶雨轩
2019-10-29 / 0 评论 / 1 点赞 / 582 阅读 / 1573 字

在开发过程中,开发完成,完成测试阶段,修复bug后都要重启后台服务,测试又在测试,每次重启都要一两分钟,频繁的重启,测试不干了;所以想到就是部署两台服务器;用nginx upstream 模块实现无感知部署,发现一个bug,修复;直接部署不会打断测试;

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

服务器1  : 192.168.1.120:7851
服务器2  :  192.168.1.121:7851

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

upstream adminProxy{
      server 192.168.1.120:7851 weight=2 max\_fails=3 fail\_timeout=100s;
      server 192.168.1.121:7851 weight=2  max\_fails=3 fail\_timeout=100s;}server {
    listen 80;
    server_name dev.manage.com;
    root /home/work/app/dist;
    index index.html;
    location /sys  {
        proxy_pass http://adminProxy;
        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秒)时间内出现$(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失败转发就不会出错,用户也会无感知;

1

评论区