Я пытаюсь получить представление о том, как я могу создать настройку веб-сервера с балансировкой нагрузки. Настройка фактического балансировщика нагрузки и добавление двух или более веб-серверов кажется достаточно справедливой. Однако я не могу решить, как лучше всего настроить файлы.
На веб-серверах будет работать система CMS (в данном случае Drupal). Могут быть загруженные пользователями файлы, относящиеся к контенту, и они должны быть доступны для всех веб-серверов. Теперь я думал о том, чтобы просто иметь назначенный файловый сервер и смонтировать файловый каталог на каждом веб-сервере, чтобы различные веб-серверы могли получить доступ к этим «общим» файлам.
Однако будет ли это решение узким местом, если мы говорим о 4-5 серверах? Думаю, установка будет производиться по SSH.
Вся помощь очень ценится!
Обновление (15 января 2013 г.)
Я решил использовать комбинацию Csync2 и Lsyncd. Затем я установил два сервера, которые действуют как зеркала. Lsyncd отслеживает изменения в определенных каталогах (и их подкаталогах) и вызывает Csync2, который заботится о синхронизации файлов с другим сервером. Если вам интересно узнать больше, взгляните на этот учебник.
Джон и Кейлинпятиступенчатый учебник по масштабированию Drupal будет вам очень полезно.
Первые два шага заключаются в следующем:
Шаг 1: Отделите свой веб-сервер от сервера базы данных.
Шаг 2: Настройте резервные веб-серверы и балансировку нагрузки.
Итог: вы не захотите масштабировать по горизонтали (добавляя несколько серверов с идентичными функциями) без предварительного вертикального масштабирования (разделения функций, которые в настоящее время находятся на одном сервере, на разные уровни).
До того, как я перешел на CDN, у меня была веб-ферма из 20 серверов. Я начал с NFS, пока около 3 лет назад не обнаружил ошибку в ядре linux, которая вызвала проблему из-за того, что том не монтировался, и он не работал правильно.
Затем я создал сценарий rsync, который будет синхронизировать каталог каждые 5 минут с каждым сервером изображений. Это было не идеально, но сработало, и у меня не было никаких проблем.
На следующем шаге я переключился на lsyncd, который использует inotify для мониторинга каталога, и когда файл изменяется, он запускает процесс для синхронизации этого файла. По умолчанию это rsync. Это решение было надежным, и если бы не экономия сети CDN, я бы продолжил с этим.
Lsyncd: http://code.google.com/p/lsyncd/
Надеюсь, это поможет.
Я использовал glusterfs (http://www.gluster.org/) для обмена файлами между веб-серверами с балансировкой нагрузки. Я попытался также совместно использовать файлы базы данных MySQL между серверами с помощью glusterfs, но безуспешно - я рекомендую отделить Интернет от сервера базы данных, как предлагает первый плакат.
Другие решения для обмена файлами между серверами - это блеск (http://wiki.lustre.org/index.php/Main_Page) и, в зависимости от настройки балансировщика нагрузки, вы также можете использовать lsyncd (http://code.google.com/p/lsyncd/) для синхронизации файлов между серверами.
Вы можете установить высокодоступный общий ресурс NFS и подключить его на каждом http-сервере для обслуживания ваших файлов.
Найдите руководство по высокодоступному кластеру MySQL: http://www.howtoforge.com/loadbalanced_mysql_cluster_debian