nginx upstream 配置实现多服务器无感知切换

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

原来的测试环境部署的jenkins部署的,在一台机器中部署了,现在要需要增加一个部署一台机器;我们在jenkins的项目中部署脚本中再部署一个项目;

部署思想:打时间差,就是先后部署这两台机器,控制好时间,保证有一台机器可以使用;我在jenkins在部署的时候,用了一个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秒)时间内出现${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失败转发就不会出错,用户也会无感知;

附上怎么在jenkins中部署代码到另外一台机器上:

步骤: 1、两台服务器添加信任(ssh的互相信赖,这样在远程copy文件执行脚本的时候就不用密码连接,不知道的可以百度)

           2、把jenkins编译好的文件远程copy到第二台服务器中

           3、用jenkins远程调用启动脚本

直接上脚本:

jenkins 部署脚本:

sleep 100
 
scp  ./admin/target/admin.jar  root@192.168.1.121:/home/work/withhold-feature/admin7851.jar
 
ssh root@192.168.1.121 "/home/work/withhold-feature/start-jar.sh"
注:这个脚本是在启动第一台服务器(192.168.1.120)的时候执行,先停顿100s 在第一台服务器(192.168.1.120)启动完成后,再重新启动第二台服务器(129.168.1.121);

scp是把本地文件拷贝到远程服务器中,然后用 ssh 远程执行start-jar.sh  脚本

在第二台服务器中的start-jar.sh 脚本

pid=`ps -ef | grep admin7851.jar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
#!kill -9 强制终止
   echo "kill -9 的pid:" $pid
   kill -9 $pid
fi
 
cd /home/work/withhold-feature
 
nohup java -jar admin7851.jar --server.port=7851  --spring.profiles.active=test >/dev/null &


原文地址:https://blog.csdn.net/chenhuaping007/article/details/80712376

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值