Есть небольшой, но важный сервис работает через https (webhook, api), с ним общается софт в котором не могу делать изменения, нужно получить uptime 99.9%, сейчас все работает на одном сервере, периодически падает.
Сейчас уже готова репликация (кластеризация) сервиса, т.е один и тот же сервис доступен с 3 разных серверов, полностью дублирующих друг друга.
Теперь вот думаю как быть с доменом, вижу 2 варианта:
1) следить на доменом и доступностью сервиса через zabbix с интервалом 30-60сек, в DNS прописать TTL аля 30-60 сек и в случае падения перебивать IP в A записи скриптом, по идеи сервис должен быть быстро доступен с запасной машины. Но возникает вопрос, а что если кэш? И если поставить такой маленький TTL в DNS, ничего хорошего наверное не будет?
2) прописать 2-3 IP в A записи DNS и получить round-robin, он по идеи должен выдавать IP один из 3 который сейчас работает.
Реализация http balancer не вариант аля hproxy или на основе nginx потому что именно этот балансер оказывается самым слабым местом во всей системе, т.к опять же все зависит от 1 сервера.
В том и вопрос, как лучше реализовать это, может быть есть еще варианты реализации отказоустойчевости?
А в облако закинуть не проще? Да, явно дороже чем сейчас, но с одним сервером это почти недостижимый аптайм. Нужно как минимум два для сервиса, балансировщик и все такое
exhang, ну, вам нужен healthcheck (или heartbeat) для того чтобы смотреть за здоровьем сервисов. например, можете использовать Consul от Hashicorp. Но вы просите как лучше. А лучше это взять пресловутый AWS, посадить домен на Route53, который будет мониторить доступность Elastic Load Balancer за которым будет стоять несколько EC2 инстансов. Балансировщик будет чекать инстанс постоянно и ротировать трафик без потерь. Настройка за полчаса всего этого зоопарка и получаете uptime 99.99 и выше
Иван Шумов, а разве Route53 не будет делать тоже самое что я описал в своем первом варианте, он ведь так же на основе TTL будет менять IP и так же упираться в теже проблемы кэша?
exhang, будет) только в отличии от вашей системы за ним можно поставить балансировщик с высокой доступностью, который будет распределять траффик исключительно между рабочими хостами
Иван Шумов, так в роли балансировщика меня выступает zabbix сервер, так же следит за доступностью хостов, чем балансировщик AWS лучше? Или вы имеет ввиду прокси-балансировщик?
exhang, конечно) по тому что там это не 1 сервер, а отказоустойчивый сервис, который распараллелен и сам по себе упасть не может, в отличии от руками настроенного zabbix на вашей машинке