2016-09-01 3 views
1

Как я могу получить докеры nginx для быстрого переключения при сбое одного из вышеперечисленных контейнеров? Отказоустойчивость кажется мгновенной в среде, отличной от докеров, но несколько запросов на тайм-аут при докеризации.Как быстро отказоустойчивый nginx upstream-контейнеры в докере (развертывание синим/зеленым цветом)

Я использую nginx в качестве балансировщика нагрузки/прокси на одном узле/vm перед двумя экземплярами одного и того же узла. Я представил новые развертывания версии идти следующим образом (часто называют blue-green deployments):

  1. Новой версия приложения узла толкнула GitHub
  2. Docker хаба создает новый образ
  3. Один из входных контейнеров снесен , модернизированные и перераспределены
  4. Как один из контейнеров снесен, Nginx автоматически переключается на другой живой контейнер
  5. После модернизированный контейнер развернут, другой контейнер в автономном режиме для обновления/передислокации, а также

Однако, на nginx не без проблем делайте # 4. Когда я сниму один из вышеперечисленных контейнеров для версии bump, nginx будет тайм-аут нескольких запросов (в круговом режиме), поскольку он показывает, что один из контейнеров не работает. У меня этого не было в среде без докеров.

Вот мой докер облако стек файл:

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; 
    } 
    } 
} 
+0

Хм ... это может быть то, что я m ищу: http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/ –

ответ

1

После связки борьбы, я думаю, что я вышел с разумным решением. Выложил пользовательский контейнер nginx для dockercloud/haproxy. По-видимому, балансировщик нагрузки должен иметь возможность прослушивать docker cloud events и соответствующим образом настраивать.

Stack файл теперь выглядит следующим образом:

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