Настройка веб-кластера HA
Я настраиваю высокодоступный веб-кластер, я планирую начать с двух веб-серверов, подключенных к общему хранилищу (возможно, через NFS). Каков наилучший способ реализации этого? Должны ли на веб-серверах работать только Apache, а весь веб-контент (html, css) должен находиться в общем хранилище? Так что, если я решу масштабироваться, то мне нужно только добавить дополнительные узлы Apache? Если я использую CMS, такую как Wordpress, означает ли это, что мне нужно установить Wordpress только один раз (в общем хранилище) и просто добавить серверы под управлением Apache для распределения нагрузки?
2 ответа
Создание очень надежного сервера NFS, который работает только на NFS, имеет первостепенное значение. Использование системы с двойной головкой / одной полкой может дать вам некоторую избыточность, но, как только вы попытаетесь использовать систему с двойной головкой / двойной полкой, у вас возникнет немало проблем. В то время как вы можете запустить master/slave с двойной головкой / двойной полкой, для двойной основной сети требуется кластерная файловая система, такая как OCFS или GFS. Итак, шаг первый, создайте очень надежный, очень простой NFS-сервер.
Вы можете использовать heartbeat и запускать свои веб-серверы на грани, а в случае отказа одного из них другой отравляет ваш arp и начинает отвечать на запросы. Однако это становится немного громоздким, и в конечном итоге вы захотите разместить балансировщик нагрузки (или пару) перед вашими веб-серверами и использовать IPVS/LVS для направления запросов к вашим бэкэндам. С ipvs вы захотите настроить сходство соединений, чтобы пользователи обычно обращались к одному и тому же серверу, что делает все, что использует сеансы php, счастливым. Вы также можете открыть общий доступ к каталогу сессий на сервере NFS, который позволит обеим машинам получать доступ к одним и тем же файлам сессий.
MySQL становится веселым Для запуска кластеризации требуются три узла, хотя с небольшой хитростью вы можете сделать это с двумя узлами. MySQL не очень хорошо работает с файловыми системами NFS, поэтому вам нужно запустить установку master/slave с heartbeat для переключения при сбое или настроить пару серверов mysql и запустить их в кластерной установке.
Ваша нагрузка чтения / записи будет реальным определяющим фактором. Вы захотите установить соединение GigE LAN с серверами NFS и отдельное соединение с Интернетом. Если вы работаете с большой нагрузкой чтения, у вас не будет слишком много проблем. Если все ваши серверы работают с большой нагрузкой записи, вы столкнетесь с рядом других вещей. Если возможно, используйте Jumbo-кадры в вашей локальной сети, если у вас есть большие файлы, которые вы обычно обслуживаете. Поскольку файлы находятся на NFS-сервере, если вы используете sendfile с apache, а файл позднее удаляется, при следующем обращении к файлу вы получите ошибку шины.
Если вы хотите запутаться, и у вас большой объем чтения, вы можете рассмотреть возможность использования AFS, которая выполняет небольшие локальные кэши из общего хранилища. Таким образом, если веб-сервер отключится от узла хранения, он все равно сможет обслуживать большую часть статического содержимого. Кроме того, использование Varnish/Squid или другой системы кэширования значительно сократит пропускную способность локальной сети. Затем возникает проблема с одним или двумя серверами Varnish, которые имеют собственный кэш, дублируя содержимое в памяти. Это может быть выгодным компромиссом для снижения трафика локальной сети.
Как только вы настроите фреймворк, переход с двух веб-серверов на три - это просто вопрос добавления нового сервера. Это шаг от одного до двух, как правило, довольно скачок. Некоторые программы при работе в кластере ведут себя по-разному, а не на одной машине.
Это звучит как разумный план для меня. Вы просто хотите масштабировать или устранить отдельные точки отказа? Если последнее, ваше общее хранилище также может представлять проблему (и добавить дополнительную задержку, если чтения не кэшируются локально серверами Apache). Если ваш контент в основном статический, есть способы иметь авторитетное хранилище контента, а затем периодически копировать его на ваши веб-узлы, чтобы у каждого из них была локальная копия. Это более сложно, но позволяет вашему централизованному хранилищу также выходить из строя, не забирая с собой все веб-узлы.