如何在Docker中快速故障转移Nginx上游容器(蓝色/绿色部署)

大卫·布迪亚克(David Budiac)

当上游容器之一发生故障时,如何使dockerized nginx快速进行故障转移?在非docker环境中,故障转移似乎是瞬时的,但是在进行docker化时,有几个请求超时。

我将nginx用作同一节点应用的两个实例前面的单个节点/ vm上的负载平衡器/代理。我对新版本的部署进行了如下描述(通常称为蓝绿色部署):

  1. 新版本的节点应用程序推送到github
  2. Docker Hub构建新映像
  3. 卸下,升级和重新部署其中一个上游容器
  4. 当其中一个容器被拆除时,nginx自动故障转移到另一个活动容器
  5. 部署升级的容器后,另一个容器也将脱机以进行升级/重新部署

但是,在nginx上不能无缝地执行#4。当我删除一个上游容器的版本颠簸时,nginx会发现几个容器已关闭,因此将使多个请求(以循环方式)超时。我没有在非docker环境中发生过这种情况。

这是我的Docker云堆栈文件:

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看起来像:

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;
    }
  }
}
大卫·布迪亚克(David Budiac)

经过一番角力,我认为我提出了一个合理的解决方案。dockercloud / haproxy交换了一个自定义的nginx容器显然,负载平衡器需要能够侦听docker cloud事件,并进行相应的调整。

堆栈文件现在看起来像:

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

当我要部署新版本时,只需运行以下脚本:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Docker容器上部署php-fpm和在localhost(Ubuntu)上部署apache / nginx

来自分类Dev

Docker故障转移:Redis,MySQL和Nginx

来自分类Dev

Azure ServiceFabric的蓝色/绿色部署

来自分类Dev

如何在 Elasticsearch 中添加用于故障转移的节点

来自分类Dev

如何在Docker容器中升级Nginx版本

来自分类Dev

使用Terraform和Kubernetes进行部署时如何在Docker容器中修改文件?

来自分类Dev

如何在docker容器的tomcat 7中部署war文件

来自分类Dev

如何在表单xamarin中将开关“打开”(蓝色至绿色)时更改默认颜色。在ios默认情况下,它是GReen,而在android中,它是蓝色

来自分类Dev

如何在启用了EF核心迁移的Azure中运行蓝绿色部署

来自分类Dev

Neo4j:如何在社区版中设置故障转移

来自分类Dev

如何在不停止的情况下在Docker容器中运行Nginx?

来自分类Dev

Docker卷在容器行为中造成故障

来自分类Dev

如何在Docker容器中向前移植?

来自分类Dev

如何在Docker容器中运行命令

来自分类Dev

如何在Windows中播种Docker容器

来自分类Dev

如何在 docker 容器中安装主管?

来自分类Dev

如何在JMS上支持事务/故障转移?

来自分类Dev

如何在主 DC 关闭时故障转移 DC

来自分类Dev

如何在Nginx配置的上游块中公开服务器端口?

来自分类Dev

如何使用 ConnectionMultiplexer 在 Redis 集群中处理故障转移?

来自分类Dev

资源/文档,关于如何在纱线群集模式下为Spark驱动程序(及其YARN容器)执行故障转移过程

来自分类Dev

如何使用Java或Processing从图像中仅检测单色,例如红色,蓝色或绿色?

来自分类Dev

Laravel中的Beanstalkd故障转移

来自分类Dev

如何在Mac版Docker中自动启动Docker容器?

来自分类Dev

如何在Docker容器中安装/启动Docker引擎服务

来自分类Dev

如何部署支持 GPU 的 PaddlePaddle Docker 容器?

来自分类Dev

在Docker容器内部上游连接到Node.js时,Nginx连接被拒绝

来自分类Dev

自动将Docker容器附加到Nginx负载均衡器的上游配置

来自分类Dev

Dockerized Nginx上游错误通过Flask / uWSGI应用程序提供了单独的Docker容器

Related 相关文章

  1. 1

    如何在Docker容器上部署php-fpm和在localhost(Ubuntu)上部署apache / nginx

  2. 2

    Docker故障转移:Redis,MySQL和Nginx

  3. 3

    Azure ServiceFabric的蓝色/绿色部署

  4. 4

    如何在 Elasticsearch 中添加用于故障转移的节点

  5. 5

    如何在Docker容器中升级Nginx版本

  6. 6

    使用Terraform和Kubernetes进行部署时如何在Docker容器中修改文件?

  7. 7

    如何在docker容器的tomcat 7中部署war文件

  8. 8

    如何在表单xamarin中将开关“打开”(蓝色至绿色)时更改默认颜色。在ios默认情况下,它是GReen,而在android中,它是蓝色

  9. 9

    如何在启用了EF核心迁移的Azure中运行蓝绿色部署

  10. 10

    Neo4j:如何在社区版中设置故障转移

  11. 11

    如何在不停止的情况下在Docker容器中运行Nginx?

  12. 12

    Docker卷在容器行为中造成故障

  13. 13

    如何在Docker容器中向前移植?

  14. 14

    如何在Docker容器中运行命令

  15. 15

    如何在Windows中播种Docker容器

  16. 16

    如何在 docker 容器中安装主管?

  17. 17

    如何在JMS上支持事务/故障转移?

  18. 18

    如何在主 DC 关闭时故障转移 DC

  19. 19

    如何在Nginx配置的上游块中公开服务器端口?

  20. 20

    如何使用 ConnectionMultiplexer 在 Redis 集群中处理故障转移?

  21. 21

    资源/文档,关于如何在纱线群集模式下为Spark驱动程序(及其YARN容器)执行故障转移过程

  22. 22

    如何使用Java或Processing从图像中仅检测单色,例如红色,蓝色或绿色?

  23. 23

    Laravel中的Beanstalkd故障转移

  24. 24

    如何在Mac版Docker中自动启动Docker容器?

  25. 25

    如何在Docker容器中安装/启动Docker引擎服务

  26. 26

    如何部署支持 GPU 的 PaddlePaddle Docker 容器?

  27. 27

    在Docker容器内部上游连接到Node.js时,Nginx连接被拒绝

  28. 28

    自动将Docker容器附加到Nginx负载均衡器的上游配置

  29. 29

    Dockerized Nginx上游错误通过Flask / uWSGI应用程序提供了单独的Docker容器

热门标签

归档