Рейтинг:0

Возможна ли общая абстракция высокой доступности для приложения?

флаг in
Rob

В настоящее время я изучаю возможности сделать наше существующее серверное приложение высокодоступным. Программное обеспечение обрабатывает сообщения, которые приходят через UDP, соответственно. некоторые специфичные для железных дорог протоколы более высокого уровня.

Есть ли способ (фреймворк или аналогичный) создать уровень абстракции, который позаботится об избыточности и отказоустойчивости? Я думаю о чем-то эквивалентном RAID-контроллеру с зеркалированием, но не только для хранилища, но и для всей системы. Снаружи вы всегда видите только одну систему с ее сетевыми интерфейсами. Внутри есть две или даже более системы, которые работают параллельно, и уровень абстракции заботится обо всем, например. синхронизация состояния приложения между резервными машинами. Вы устанавливаете свое программное обеспечение на общедоступной стороне черного ящика, и внутри все автоматически зеркально отражается. Когда одна машина умирает, другая мгновенно вступает во владение без разрыва соединений, поскольку она уже находится в том же состоянии.

Есть ли какое-то универсальное решение для этого? Или нам нужно реализовать это вручную внутри нашего приложения?

Zac67 avatar
флаг ru
Для этого нет единого решения. Дублирование веб-сервера доставки контента не очень сложно, кластеризация базы данных + сервера приложений с высокой доступностью гораздо сложнее, особенно когда еще нет проекта.Ваш вопрос должен быть более подробным, чтобы получить действительно полезные ответы: операционная система, система хранения, методы хранения (база данных, плоский файл, на основе транзакций, ...), используемые сетевые протоколы, максимальная задержка аварийного переключения, максимально допустимая потеря данных, используется ли уже виртуализация и какая, инфраструктура, которую можно было бы использовать, ...
Рейтинг:1
флаг nr

Pacemaker, Corosync и DRBD — это проекты Linux, которые предоставляют «Open Cluster Framework» (OCF) для создания общих служб Linux с высокой доступностью.

Как правило, DRBD синхронно реплицирует хранилище (на уровне блоков), в то время как Corosync и Pacemaker управляют тем, какие узлы запускают какие службы в кластере. Службами можно управлять с помощью агентов ресурсов OCF (скрипты оболочки со стандартными кодами выхода и функциями) или с помощью сценариев systemd/upstart/sysv-init службы. Существуют также универсальные агенты «все, что угодно», которые могут создавать и отслеживать процессы в кластере, но я бы использовал их, только если вы чувствуете себя очень ленивым, поскольку они ненадежны.

Одним из самых простых и прозрачных способов достижения универсальной высокой доступности является использование Pacemaker и DRBD для создания кластера KVM. Где виртуальная машина настроила ваше приложение и запустила его при загрузке, а Pacemaker/DRBD обрабатывают кластеризацию внизу (на гипервизоре).

В Интернете есть множество ресурсов, объясняющих подробные шаги, если вы погуглите, но у LINBIT есть техническое руководство (за программным экраном), которое пошагово описывает это: https://linbit.com/tech-guide/drbd9-kvm-rhel8/

Дополнительная ссылка:
ДРБД: https://linbit.com/
Кардиостимулятор/Коросинк: https://clusterlabs.org/

Rob avatar
флаг in
Rob
Спасибо, Мэтт! Звучит многообещающе, я посмотрю на это поближе.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.