LINUX.ORG.RU
ФорумAdmin

High availability

 , , ,


0

1

Сижу прикидываю как можно сделать кластер из следующего зоопарка.

  • Есть пачка серверов с пачкой виртуалок, в основном docker, но вообще может быть тот же lxc или kvm, не суть.
  • Сервера могут менять белые адреса и вообще расположены черт знает где, так что скорее всего имеет место разделение адресного пространства на server addr (SA) и app addr (AA).
  • Сервисы различны и могут быть довольно тяжелыми, так что не все сервера могут тянуть любой сервис
  • Общий накопитель не катит т.к. сервера географически могут быть в разных странах (задержка заведомо больше 2мс), потому скорее всего асинхронная репликация и далеко не на все ноды (накопители тоже разные по размеру)

Ну и традиционно нужно собрать добро из палок и его самого. Сам работал с corosync/heartbeat + pcmk, сейчас сижу читаю про zookeeper, consul и docker swarm. Как я понял первые два выполняют роль директории для связки SA-AA и могут следить за их работой. Но corosync тоже умеет доступность нод, а pcmk - работать с сервисами, так что похоже их можно заюзать только как директорию связок для маршрутизации. Последний вообще что-то довольно мутное - оно вроде умеет поднимать кластер, но «с некоторыми ограничениями» (и пачка звездочек со сносками), так и не въехал.

Кто-нибудь может разъяснить что есть что и чем оно может помочь? А то чую я упускаю что-то крайне важное

★★★★★

Ответ на: комментарий от snaf

начиная от базы и апача и заканчивая самописными. но по большей части все доступно через rest

upcFrost ★★★★★
() автор топика
Ответ на: комментарий от blind_oracle

БЛЯДЬ, вас по голове всех чоле бьют перед регистрацией? докер - ссаный контейнер для сервиса, что он блядь может знать о том, что внутри сервиса происходит? чтобы делать ha для сервисов - сервисы должны уметь разумный healthcheck, а в докере они, в виртуалке, в амазоне или на Луне - мать его, да всем насрать

anonymous
()
Ответ на: комментарий от anonymous

не нервничай. у докера правда есть подобие кластеризации для контейнеров docker swarm. грубо говоря это дело агрегирует несколько хостов в один и запускает на них контейнеры в зависимости от загрузки/забитости/рандомно. и у него действительно есть service discovery, хотя походу не слишком полноценный.

2 blind_oracle - я думаю что можно сделать ход конем и попытаться скрестить ежа и ужа. Т.е. например etcd следит какие ноды онлайн, swarm переключает контейнеры, а pcmk включает на них сервисы. Хотя профит сомнителен - pcmk может делать это все без дополнительного оркестра. Разве что можно в etcd сервисы регать для маршрутизации

upcFrost ★★★★★
() автор топика
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

да вы издеваетесь. ha - это когда каждый сервис доступен вне зависимости от нагрузки от него. как, ну вот КАК swarm, который собирает в тупоголовый кластер докеровские контейнеры, поймет что сервиснода в одном из доковских контейнеров встала сама себе на хвост в общении с базой и не сервис уже, а кусок говна в проруби, и её пора убрать нахер из кластера в принудительный ребут, а вместо неё включить другую такую же?

ha - делается по hc, который healthcheck, а не по тупым докеровским мониторингам. иначе это не ha, а профанация, грозящая многомиллионными исками за проеб SLA о котором куча админов типа ТС даже знать не знала, у них же swarm, ептыть

anonymous
()
Ответ на: комментарий от upcFrost

я из-за вас подбухнул, поэтому я вас научу:

ha автоматическими средствами делается только для балансировщиков. которые абсолютно тупые и сделаны в виде в случае RESTа - тредами на какомнить nginx'е, которые занимаются тем, что опрашивают response code и response time от специально для этого написанных эндпоинтов у всех мониторенных сервисов, после чего решают по самописным правилам, стоит его оставить в условном раундробине, или выключить из списка пока он не оклемается и не отрапортует что егоный сервис на вот этом эндпоинте понял что был неправ и исправился.

вот это все говно - делается на балансировщике, а остальные баззворды - делаются для балансировщиков, которые тупые и которых можно отследить средствами того же swarm'а - он и пустит весь траффик на балансировщик который жив. пушшо вот его-то метрикам, тупого треда, оттестированного по самое дальше некуда, можно доверять; косвенным метрикам сервисов, у которых жизненно важные параметры меняются от релиза к релизу - доверять нельзя

анон все сказал, спрашивайте ваши ответы

anonymous
()
Ответ на: комментарий от anonymous

кэп, спасибо, я знаю что такое ha. и я не писал что докер умеет ha, я сказал что у него есть «подобие кластеризации для контейнеров». я просто хочу посмотреть что может пригодится для моей ситуации помимо того же pcmk

upcFrost ★★★★★
() автор топика
Ответ на: комментарий от upcFrost

еще раз: в /0 нет такого, что предполагало бы ha для серверов под сервисами, скорее наоборот. единственный правильный ответ на /0 - получаешь статус сервиса от конкретной ноды сервиса и на основании ответа принимаешь решение. если тебе нужна профанация с ha для серверов под сервисами - так бы и писал, чо ты

anonymous
()
Ответ на: комментарий от anonymous

Еще раз для тех кто в танке - я просто пытаюсь понять что есть из инструментов кроме тех что уже знаю. Про сварм документация довольно странная, потому возник нормальный wtf.

Кстати, сервис-регистратор как раз вполне относится к ha, т.к. он помимо директории может теми самыми самописными проверками следить за доступностью сервиса. У самого докера он куцый, они предлагают юзать etcd/consul.

upcFrost ★★★★★
() автор топика
Ответ на: комментарий от upcFrost

анонимус тебе верно разьяснил. документация у сворма такая же как сам сворм, делай выводы.

вкратце история такая: если сервисы stateless, плодишь их чем-угодно много, lb сверху, все. если stateful, то в общем случае задача не решается — для каждого сервиса надо отдельно думать как нормально ему обеспечить доступность, и никто не зная подробностей устройства твоих сервисов тебе не расскажет как и что делать. из (относительно) работающих дженерик решений есть разве что FT как в VSphere. все остальное булшит и профанация. инструментов я тут могу сходу штук 100 перечислить, из того же разряда что твои. всех ты их сходу не освоишь, краткую сводку я тебе тоже в одном абзаце не дам. учти что rabbit hole учень глубок, в зависимости от жесткости требований по доступности и масштабируемости, это передний край инженерных проблем современности.

начни с определения требований (must/want, временный и нагрузочные характеристики, рост), архитектуры причастных сервисов, доступных средств. дальше смотри по одному на каждый отдельный сервис что с ним делать, и почему — не забывай про DR еще.

val-amart ★★★★★
()
Ответ на: комментарий от anton_jugatsu

эта песня хороша, начинай сначала. пойми ты, если ТСу нужен HA - ему не список клонированного бесполезного говна нужен, а четкое понимание того, какой сервис по каким правилам может считаться живым, какое резервирование необходимо для каждого сервиса его конкретной системы с учетом пиковых нагрузок и какое время простоя он может себе позволить. как только у него в голове созреет нормальное ТЗ - он перестанет задавать вопросы вида google://docker+cluster и если и вернется к вам бесполезным - то только с конкретными вопросами, и скорее всего в development. а будет вас слушать - рано или поздно вернется с конкретным вопросом в job

anonymous
()
Ответ на: комментарий от anonymous

ок, тогда более конкретный вопрос - нормальным ли будет скажем разворачивать все это следующим образом:

  • берем сварм/kubernetes и отдаем им на откуп где стартовать тот или иной контейнер (возможно ставим coro+pcmk для выдачи команды на старт контейнера)
  • В контейнерах ставим те же coro+pcmk и обмазываем стартом/статусом сервисов, связываем со стартом контейнеров в качестве зависимости (либо через pcmk на хосте если он есть, либо скажем просто ssh с ключом).
  • Помимо этого вешаем на каждый хост и, вероятно, контейнер агент etcd с регистратором чтоб понять что на нем запущено и с какими адресами.
  • Критические директории загоняем в тот же GlusterFS

меня смущают в таком сценарии две вещи - связка старта контейнера со стартом сервиса и etcd. первое надо просто попробовать, а про второй - какую задержку может создать эта штука для обращающихся к ней сервисов?

upcFrost ★★★★★
() автор топика
Последнее исправление: upcFrost (всего исправлений: 2)
Ответ на: комментарий от blind_oracle

В твоём случае в качестве говна и палок, думаю, подойдёт только GlusterFS с GeoReplication

Оно с GR — не мастер-мастер. А ему нужно во все стороны, как понимаю.

Тут только rsyncd+lsyncd. Я много чего мучил, на lsyncd в итоге остановился. Это для файлов. А MySQL неплохо и штатно реплицируется. С GTID — в произвольной топологии.

Хотя надёжность MySQL-репликации мне не очень понравилась. И сейчас экспериментирую с файловой репликацией данных — объекты в JSON и потом синк любым способом, хоть lsyncd, хоть btsync. Файлы тяжёлые вообще через ipfs пробую гонять сейчас, неплохо выходит :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Мастер мастер это вообще зло, особенно в геораспределенной топологии. Никто не мешает несколько разных томов реплицировать крест-накрест.

blind_oracle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.