首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在码头快速转移nginx上游集装箱(蓝色/绿色部署)

如何在码头快速转移nginx上游集装箱(蓝色/绿色部署)
EN

Stack Overflow用户
提问于 2016-09-01 15:32:02
回答 1查看 984关注 0票数 1

当上游集装箱中的一个发生故障时,如何使nginx进行快速故障转移?在非对接环境中,故障转移似乎是瞬时的,但在进行停靠时,会有几个请求超时。

在同一个节点应用程序的两个实例前面,我使用nginx作为单个节点/vm上的负载均衡器/代理。我设想的新版本部署如下(通常称为蓝绿色部署):

  1. 将节点应用程序推送到github的新版本
  2. 码头枢纽建立一个新的形象
  3. 一个上游集装箱被拆除、升级和重新部署。
  4. 当其中一个容器被拆下时,nginx会自动切换到另一个活动容器。
  5. 一旦部署了升级的容器,另一个容器也会离线进行升级/重新部署。

然而,在nginx上并没有无缝地做#4,当我取下一个上游容器作为版本凸起时,nginx将超时几个请求(以循环的方式),因为它会发现其中一个容器已经关闭。我从来没有在非码头环境中发生过这种事。

这是我的码头云堆栈文件:

代码语言:javascript
复制
load-balancer:
  image: 'foo/load-balancer:latest'
  links:
    - node-blue
    - node-green
  ports:
    - '80:80'
node-blue:
  image: 'foo/node-app:latest'
node-green:
  image: 'foo/node-app:latest'

nginx.conf看起来像:

代码语言:javascript
复制
events {
  worker_connections  1024;
}

http {
  gzip on;

  upstream app {
    server node-green;
    server node-blue;
  }

  server {
    listen 80;
    server_name app.local;
    location / {
        proxy_pass http://app;
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-01 20:32:30

经过一场摔跤,我想我想出了一个合理的解决办法。为码头云/haproxy交换了一个自定义的nginx容器。显然,负载均衡器需要能够听码头云事件,并相应调整。

堆栈文件现在看起来如下:

代码语言:javascript
复制
load-balancer:
  image: 'dockercloud/haproxy:1.5.3'
  restart: always
  roles:
    - global
  links:
    - node-blue
  ports:
    - '80:80'
node-blue:
  image: 'foo/node-app:latest'
  environment:
    - VIRTUAL_HOST=app.local
node-green:
  image: 'foo/node-app:latest'
  environment:
    - VIRTUAL_HOST=app.local

当我想部署一个新版本时,我只运行以下脚本:

代码语言:javascript
复制
docker-cloud service set --link node-green:node-green load-balancer
docker-cloud service redeploy node-blue --sync
docker-cloud service set --link node-blue:node-blue load-balancer
docker-cloud service redeploy node-green --sync
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39275645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档