В настоящее время я занимаюсь CoreOS и создаю кластер на основе этого. До сих пор опыт работы с CoreOS на одном хосте довольно плавный. Но дело доходит до обнаружения сервисов. Почему-то я не получаю общую идею, поэтому я прошу здесь сейчас о помощи.Как бороться с устаревшими данными при выполнении поиска сервисов с помощью etcd на CoreOS?
Что я хочу сделать, так это иметь два контейнера Docker, где первый полагается на второй. Если мы говорим о чистом Докере, я могу решить это, используя linked containers. Все идет нормально.
Но этот подход не работает через границы машины, поскольку Docker не может связывать контейнеры через несколько хостов. Поэтому мне интересно, как это сделать.
Что я понял до сих пор, так это то, что идея CoreOS о том, как с этим бороться, заключается в использовании ее службы etcd
, которая в основном представляет собой распределенное хранилище ключей, доступное на каждом узле локально через порт 4001
, поэтому вам не нужно иметь дело (как потребитель etcd
) с любыми сетевыми данными: просто получите доступ к localhost:4001
, и все в порядке.
Так, в моей голове, теперь у меня есть идея, что это означает, что, когда Докер, который обеспечивает сервис раскручивается, он регистрирует себя (т.е. его IP-адрес и порт) в локальной etcd
и etcd
ухаживает распространения информации по сети. Этот способ, например, Вы получаете пар ключ-значение, такие как:
RedisService => 192.168.3.132:49236
Теперь, когда другой контейнер Docker необходим доступ к RedisService
, он получает IP-адрес и порт от их собственный местный etcd
, по крайней мере, когда информация была распространена по всей сети. Все идет нормально.
Но теперь у меня есть вопрос, на который я не могу ответить, и это меня озадачивает уже несколько дней: что происходит, когда служба уходит? Кто очищает данные внутри etcd
? Если он не очищен, все клиенты пытаются получить доступ к службе, которая больше не существует.
Единственное (надежное) решение, которое я могу представить на данный момент, использует функцию TTL etcd
для данных, но это связано с компромиссом: либо у вас довольно высокий сетевой трафик, как вам нужно отправить сердцебиение каждые несколько секунд, или вы должны жить со устаревшими данными. Оба не в порядке.
Другой, ну, «решение» Я могу думать о том, чтобы сделать сам сервис разрегистрацию, когда он идет вниз, но это работает только для плановых отключений, а не для аварий, силовых outeages, ...
Итак, как вы это решаете?
Большое спасибо, это мне очень помогло :-)! –