У меня настроено три контейнера докеров ..
content/* config.js, newrelic.js
Используя один сервер, я узнаю, как связать nginx с контейнером-призраком и получить информацию, обслуживаемую через nginx.
Однако я хочу начать изучать Coreos и перейти на парк серверов Coreos. Я знаю, что для этого мне нужно записать служебные файлы для двух контейнеров (ghost, ghost-data) и убедиться, что ghost и ghost-data находятся на одном хосте, а nginx - нет.
Насколько я понимаю, весь смысл флота / кластеризации в coreos - это время безотказной работы. контейнеры будут перемещаться от узла к узлу по мере необходимости. Проблема в том, что у каждого из этих узлов есть свои собственные IP-адреса для мира. Как мне узнать в моем DNS об этих IP-адресах и на каком IP-адресе находится сервер nginx?
Как я вижу, что-то вроде этого ...
1.1.1.1
1.1.1.2
1.1.1.3
DNS указывает example.com на 1.1.1.1
Что происходит, когда coreos решают переместить nginx-proxy на node3 1.1.1.3
?
Как я могу заставить DNS следить за этим? Я уверен, что в служебном файле есть способ заставить nginx оставаться на том же узле, но это полностью противоречит цели, не так ли?
У вас есть три основных варианта:
Это было бы похоже на вашу настройку, описанную выше, но я бы убедился, что ваш файл модуля остается на этом хосте с MachineID=abc123...
. Однако это не супер HA, поскольку у вас есть единственная точка отказа.
Если вы пользуетесь облачным провайдером, используйте LB и настройте проверку работоспособности на порту 80. Только машина, работающая на 80, получит трафик. У вас будет небольшое время простоя (от секунд до минут), если LB не обнаружит ваш сбой достаточно быстро.
Что-то похожее https://github.com/robszumski/varnish_etcd, но вы можете сделать это с помощью varnish / nginx / haproxy и confd или vulcand. По сути, у вас есть уровень маршрутизации на каждой машине, который динамически перенаправляет на серверную часть.