Я запускаю веб-сайт, содержащий много больших файлов, и даже после покупки максимального объема места, которое мой хост предоставляет на одном сервере (диски 8x2 ТБ), у меня не хватает места на диске.
Я хотел бы добавить второй сервер исключительно для хранения и обслуживания файлов. Мой вопрос: как лучше всего это сделать? Один из способов - смонтировать новый сервер с помощью NFS. Другой способ - переписать мое приложение для использования нескольких серверов, но это ОЧЕНЬ много работы.
Есть ли простой способ изолировать базовое хранилище от веб-сервера, чтобы для веб-сервера все это выглядело как один путь, но фактически распределялось по нескольким серверам?
Моя ОС - Linux CentOS, мой сервер - Apache.
Обратите внимание, что единственная проблема, с которой я сталкиваюсь, - это дисковое пространство, а не пропускная способность или ЦП и т. Д. Мне не нужно балансировать нагрузку трафика, а только добавить больше места.
Я не знаю, сколько у вас затрат, но в этом случае мы можем использовать NAS или, в лучшем случае, SAN для замены места на серверах. Преимущества с местом для хранения
С NAS / SAN вы по-прежнему используете NFS или какой-нибудь популярный высокоскоростной протокол для обмена файлами между множеством серверов. Не нужно менять много настроек на серверах.
С NAS / SAN вы можете масштабировать свои системы в любое время, вы никогда не столкнетесь с проблемами, связанными с дисковым пространством, потому что вы можете заказать много дисков и немедленно подключить к нему горячее подключение. Удивительно, что когда все ваши серверы не нужно настраивать для хранения данных на локальном уровне, и когда 1 или 2 узла не работают, вы по-прежнему запускаете свои службы в обычном режиме. Это очень хорошо
Недостатки SAN
Я думаю, что NFS - лучший вариант, но есть и другие варианты, например FreeNAS (на основе FreeBSD), AoE, что означает ATA через Ethernet и SAMBA, но я бы не рекомендовал его, если вы также не ищете совместимость с Windows.
Когда вам нужно иметь дело с объемом хранилища данных, который у вас есть в настоящее время, у вас действительно есть только два варианта, насколько я понимаю:
1) Используйте хранилище объектов, например Amazon S3 или Rackspace Cloud Files для своих данных. Это даст вам почти безграничную емкость хранилища и избавит ваш сервер от необходимости обслуживать эти файлы.
2) Начните управлять собственным оборудованием. Конечно, вы могли бы запустить некую кластерную файловую систему на управляемом выделенном сервере, но вам придется бороться с системой разными способами. Чтобы обеспечить надежное хранение данных, вам понадобится несколько серверов, а расходы вырастут довольно быстро.
Я бы посоветовал получить больше внешнего дискового пространства. Любой серьезный хостинг-провайдер должен иметь возможность предоставить вам систему SAN, которая может расширяться практически без ограничений. Но я бы посоветовал не использовать NFS. По моему опыту, apache и NFS не всегда работают вместе. Лучше использовать правильный протокол SAN, например iSCSI. Вам нужно выделенное дисковое устройство для вашего сервера, а не общий диск.
Обычно вы хотите масштабировать всю систему с учетом количества серверов. Трудно увидеть, не зная подробностей нашего приложения, но я предлагаю использовать характер распространения вашей настройки. С HTTP у вас есть хорошая возможность перенаправлять запросы на разные серверы в зависимости от пути.
Что ж, NFS тоже будет работать, но в какой-то момент ваш веб-сервер станет узким местом
О преимуществах разных дисковых решений ответов много, но есть и другой вариант. Вы могли бы просто иметь более одного веб-сервера и обслуживать разные части сайта с разных серверов.
Одна из возможностей - разделить ваш сайт по типу ресурса. Например: большая часть контента - изображения, поэтому вы настраиваете отдельный веб-сервер с именем хоста. images.yourdomain.com
. Затем вы меняете все ссылки на изображения в своем приложении, чтобы они больше не указывали, например. http://www.mysite.com/images/image1.jpg
и вместо этого укажите на http://images.yourdomain.com/image1.jpg
.
Вы также можете сделать это с помощью mod_rewrite, чтобы, когда браузер запрашивает ресурс из /images /whatever.jpg
он будет переписан на http://images.yourdomain.com/whatever.jpg
.
Третий вариант - использовать mod_proxy для пересылки определенных запросов на второй сервер без его перезаписи. Обратной стороной этого является то, что все запросы изображений теперь будут проходить через оба сервера, что влияет на ЦП, память и сеть. Даже если сейчас они не проблема, они могут появиться в будущем.
Я не знаю, пригодится ли вам что-нибудь из этого; это будет зависеть от того, как написано ваше приложение.