当上游容器之一发生故障时,如何使dockerized nginx快速进行故障转移?在非docker环境中,故障转移似乎是瞬时的,但是在进行docker化时,有几个请求超时。
我将nginx用作同一节点应用的两个实例前面的单个节点/ vm上的负载平衡器/代理。我对新版本的部署进行了如下描述(通常称为蓝绿色部署):
但是,在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;
}
}
}
经过一番角力,我认为我提出了一个合理的解决方案。为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] 删除。
我来说两句