Назад | Перейти на главную страницу

Apache - высокая доступность

Я ищу способ настроить Apache как высокодоступный. Идея состоит в том, чтобы иметь кластер из 2+ серверов Apache, обслуживающих одни и те же веб-сайты. Я могу настроить IP-адрес каждого сервера с циклическим DNS, чтобы каждый запрос случайным образом отправлялся на один из серверов в кластере (я пока не слишком озабочен балансировкой нагрузки, хотя это может играть позже).

Он уже настроен и работает с несколькими виртуальными серверами Apache (распределенными по нескольким физическим серверам), обслуживающими веб-сайты, и циклическим DNS, и это прекрасно работает. База данных SQL настраивается с помощью MariaDB в кластере высокой доступности, веб-данные (HTML, JS, сценарии PHP, изображения, другие ресурсы) хранятся в LizardFS, а сеансы также хранятся в общем месте. Все это работает до тех пор, пока один из серверов в кластере не станет недоступным по какой-либо причине. Тогда процент запросов (примерно количество отключенных серверов, деленное на общее количество серверов в кластере) остается без ответа. Вот варианты, которые я рассмотрел:

Автоматические обновления DNS

Имейте некоторый процесс, который отслеживает функциональность веб-серверов и удаляет все неработающие серверы из DNS. Здесь есть две проблемы:

системы, потому что если они оба обнаруживают проблему и вносят одинаковые изменения DNS, то это не должно вызывать никаких проблем.

uCarp / Heartbeat

Сделайте IP-адреса, к которым осуществляется доступ, и в DNS с циклическим перебором виртуальными, и переназначьте их для восходящих серверов с неработающих серверов в случае отказа сервера. Например, VIP-адрес server1 - 192.168.0.101, VIP-сервер server2 - 192.168.0.102. Если server1 выходит из строя, то 192.168.1.102 становится дополнительным IP-адресом на server2. Здесь есть две проблемы:

Вопрос

Итак, есть мысли, как с этим бороться? По сути, святой Грааль высокой доступности: отсутствие единой точки отказа (ни на сервере, ни в системе балансировки нагрузки, ни в центре обработки данных) и практически отсутствие простоев в случае переключения.

Когда мне нужна высокая доступность и разделение нагрузки, я использую keepalived и настраиваю его с двумя VIP. По умолчанию VIP1 назначается server1, а VIP2 - server2. Когда какой-либо сервер не работает, другой сервер забирает оба VIP.

Keepalived позаботится о высокой доступности, наблюдая за другим сервером. Если сервер недоступен или какой-либо интерфейс не работает, он меняется на FAULT штат. VIP перейдет на другой сервер. Для мониторинга вашего сервиса вы можете использовать track_script вариант.

Если вы хотите добавить еще один кластер в другом центре обработки данных, вы можете добавить еще два сервера и выполнить ту же настройку. Теперь вы можете распределять нагрузку трафика между центрами обработки данных с помощью циклического перебора DNS. В этом случае обновление DNS не требуется.