В настоящее время я пытаюсь настроить горизонтально масштабируемый кластер для веб-приложения на основе Drupal, который выглядит примерно так, как на диаграмме ниже:
Балансировщик нагрузки реализует липкие сеансы, поэтому пользователь сохраняет состояние, когда ему назначен сервер для работы.
Каждый сервер приложений имеет следующее:
- лак спереди
- Drupal 6 в середине работает на стек лампы
- Memcached на спине
Два сервера базы данных mysql находятся на общем IP-адресе, и они находятся в кластере высокой доступности с DRBD и звуковым сигналом, так что потеря одного не приведет к разрушению всей платформы.
Есть несколько вещей, в которых я не уверен, что я был бы признателен за ваше мнение:
Как масштабировать хранилище файлов по горизонтали?
Я думаю об использовании NFS для монтирования каталога общих файлов на каждом сервере приложений, поэтому файл, загруженный в одном месте, доступен на всех из них. Я думаю о NFS, потому что он существует уже целую вечность, и у меня нет опыта работы с MogileFS или GlusterFS, и это то, что мы использовали раньше, поэтому мы более знакомы с ним.
Существуют ли какие-либо рекомендации по определению количества серверов, на которых разумно делить каталог по NFS таким образом?
Как HA следует предоставлять в общем хранилище файлов здесь?
Одна из проблем заключается в том, что сервер NFS является единственной точкой отказа.
Мы уже используем Heartbeat и DRBD на серверах Mysql, и я бы предпочел, чтобы количество технологий, задействованных в стеке, было как можно меньше - какие подводные камни могут возникнуть, если бы я использовал ту же стратегию высокой доступности для файла серверы тоже?
Альтернативный подход
Это для внутреннего сайта, с ограниченным числом пользователей, которые иногда очень интенсивно используют сайт в течение коротких периодов времени, когда активна внутренняя инициатива. Так что это не нужно масштабировать бесконечно, как при запуске.
Учитывая это
- есть верхний предел трафика, который мы можем ожидать
- добавление HA к файловым серверам и разработка установки для горизонтального масштабирования, как это представляет значительную сложность
Я также рассматриваю возможность сделать эти два веб-сервера более мощными, чтобы они могли обрабатывать пиковую нагрузку между ними, и настроить unison или rsync для двух в задании cron, чтобы:
- они все еще синхронизированы (липкие сессии держат пользователя на том же сервере, на который они загрузили файл)
- потеря одного означает, что сайт все еще работает.
Похоже ли это на возможный способ обойти возможные головные боли сложности NFS / DRBD HA?
Спасибо,
С