Существуют ли какие-либо основные альтернативы для автоматического переключения при отказе в Linux, помимо типичных комбинаций Heartbeat / Pacemaker / CoroSync? В частности, я настраиваю аварийное переключение на экземплярах EC2, которые поддерживают только одноадресную рассылку - без многоадресной или широковещательной рассылки. Я специально пытаюсь справиться с несколькими имеющимися у нас программами, которые еще не имеют автоматического переключения при отказе и не поддерживают среды с несколькими мастерами. Сюда входят такие инструменты, как HAProxy и Solr.
У меня работает Heartbeat + Pacemaker, но я не в восторге от этого. Вот некоторые из моих проблем:
Кардиостимулятор работает очень хорошо, хотя его мощность затрудняет настройку. Настоящая проблема с Pacemaker заключается в том, что нет простого способа автоматизировать настройку. Я действительно хочу запустить экземпляр EC2, установить Chef / Puppet и запустить весь кластер без моего вмешательства.
Я предпочитаю использовать оставайся живым для высокой доступности. Мне проще настроить (один демон и конфигурацию), чем сердцебиение и компанию. Единственный недостаток, с которым я столкнулся, заключается в том, что keepalived по умолчанию не имеет опции одноадресной рассылки и использует только VRRP для связи (автор HAProxy написал одноадресный патч однако для поддержки активности)
На самом деле я работаю над чем-то очень похожим на то, что вы описали (отказоустойчивый кластер на EC2), и, попробовав Heartbeat, остановился на Corosync в качестве уровня обмена сообщениями. Corosync будет работать на нескольких серверах и поддерживает Unicast (UDPU) начиная с версии 1.3.0 (с ноября 2010 г.). Я настроил и протестировал Corosync в облаке Amazon EC2 (с использованием AMI Amazon Linux) и могу подтвердить, что он работает без проблем.
Образец файла udpu устанавливается в / etc / corosync.
Добавьте один блок-член в раздел интерфейса для каждого узла и укажите транспорт как updu. (Я использовал тот же порт, что и Heartbeat в примере ниже, но вы можете изменить его по своему желанию).
например.:
totem {
version: 2
secauth: off
interface {
member {
memberaddr: 10.xxx.xxx.xxx
}
member {
memberaddr: 10.xxx.xxx.xxx
}
ringnumber: 0
bindnetaddr: 10.xxx.xxx.xxx
mcastport: 694
}
transport: udpu
}
(Предполагается, что Heartbeat поддерживает кластеры из 3+ узлов в версиях 1.2.3+, хотя я никогда не пробовал его лично и не знаю, будет ли он работать с Unicast).
Извините, но часть Pacemaker не соответствует действительности. Регрессионные и релиз-тесты Pacemaker широко используют автоматизацию.
Для настройки без активного кластера поставьте перед всеми командами префикс CIB_file=/var/lib/heartbeat/crm/cib.xml
или установите его в своей среде. Просто убедитесь, что вы удалили файл .sig перед запуском кластера.
Для кластеров без кворума большинство, если не все инструменты должны поддерживать -f
или --force
который в любом случае проинструктирует кластер принять изменение. Если вы найдете инструмент, которого нет - сообщите об ошибке.
В мире с открытым исходным кодом есть RedHat Cluster Suite. С тех пор, как я внедрил RHCS, прошло несколько лет, поэтому сегодня мне нечего сказать по этому поводу.
В коммерческом отношении существует Кластерный сервер Veritas. Нет опыта с этим.
Гораздо более простой инструмент высокой доступности с открытым исходным кодом - UCARP. UCARP не предоставляет почти такую же «инфраструктуру», как Heartbeat / Pacemaker / CoroSync, но вы можете создавать на ее основе решения высокой доступности.
Вы также можете построить высокодоступную инфраструктуру с помощью технологий виртуализации, но эти решения, как правило, ориентированы на доступность на уровне хоста, а не на доступность на уровне приложений.
Есть Oracle Clusterware для Oracle Unbreakable Linux, хотя я им не пользовался.
Если вы уже используете EC2, почему бы не использовать Эластичная балансировка нагрузки ? Это позволит вам достичь доступности на уровне приложения без необходимости самостоятельно настраивать аварийное переключение.
Veritas Cluster великолепен (по сравнению с Linux-Heartbeat, AIX-hacmp, HP-Serviceguard и Sun cluster), но стоит больших денег. В последний раз, когда я смотрел на него, его цена была основана на ядрах процессора кластера. Текущий поставщик - Symantec ...
opensvc (https://www.opensvc.com) поддерживают несколько драйверов сердцебиения:
а также имеют механизмы кворума в случае разделения мозга.
Мне удалось автоматически настроить кластер с 4 узлами, состоящий из 2 экземпляров облака Google + 2 экземпляров Amazon с terraform + ansible.
Я написал диспетчер отказоустойчивого кластера в оболочке posix: https://github.com/nackstein/back-to-work
взгляните на это, я ищу тех, кто хочет попробовать и помочь в разработке.