Мы собираемся заменить устаревшую базу данных MySQL с использованием репликации главный-подчиненный (всего 2 хоста - один главный, один подчиненный) на кластер репликации мастер-мастер MariaDB Galera, чтобы обеспечить более беспроблемное переключение при отказе. Учебники, которые я прочитал, обычно инструктируют создать экземпляр HAproxy перед узлами Galera для балансировки нагрузки между ними (и использовать больше экземпляров HAproxy, совместно использующих виртуальный IP-адрес с помощью keepalived, если требуется высокая доступность). это так выглядит предлагаемая топология.
Однако в нашей среде у нас будет всего 2 хоста Galera (нагрузка низкая, поэтому одного хоста будет достаточно), и основным требованием является резервирование с возможным переключением подключенных приложений при сбое как можно более плавным.
Поскольку один хост должен быть в состоянии справиться со всей нагрузкой в случае сбоя другого, балансировка нагрузки просто скроет точку, когда необходимо обновить оборудование, а также, возможно, приведет к ненужным конфликтам записи. Все запросы должны поступать на один хост (а другой просто молча реплицирует), и только в случае отказа первого все должно переключаться на второй хост, который с тех пор должен стать «основным» и иметь возможность реплицировать все обратно на исходный отказавший хост, когда он будет восстановлен.
Вопрос: если нам нужна только избыточность, а не балансировка нагрузки, разумно ли полностью опустить экземпляры HAproxy перед хостами Galera и просто использовать виртуальный IP-адрес для поддержки активности, совместно используемый непосредственно двумя экземплярами Galera? Или есть какие-либо примечательные преимущества (за исключением более простого расширения до 3+ хостов Galera) для использования HAproxy в нашей ситуации?
Да, виртуального IP должно хватить.
Однако у вас должен быть третий хост, на котором запущен как минимум демон-арбитр Galera, который заботится о кворуме, то есть решает, какой из двух узлов является синхронизируемым.
Если имеется только два узла, а другой узел неожиданно отключается, а узел активен, состояние кластера неизвестно, потому что ни один из узлов не знает, обновлен он или нет.
Для получения дополнительной информации см. https://www.sebastien-han.fr/blog/2012/10/10/galera-arbitrator-resource-agent/.