У меня есть довольно загруженный медиа-сайт, где аудиофайлы в формате MP3 загружаются участниками и передаются / загружаются с двух серверов Windows, которые на данный момент сбалансированы по нагрузке ... оба сервера просто зеркально отражают друг друга и синхронизируются.
В настоящее время мы просто добавляем новые жесткие диски емкостью 2 ТБ каждый раз, когда текущий диск заполняется, а затем пользователи загружают данные на новый диск ... у нас достаточно отсеков для 24 дисков.
У нас возникает узкое место ввода-вывода на самом последнем добавленном жестком диске, потому что все новые носители добавляются к этому диску, который также является самым популярным ... это можно преодолеть, распределив данные по каждому диску, однако это усложняется, когда у нас заканчивается место и мы добавляем новый пустой диск.
Причина, по которой я зеркалирую свои файлы, заключается в том, что у меня есть резервная копия 1: 1, аварийное переключение на случай, если 1 сервер выйдет из строя, и чтобы я мог легко сбалансировать нагрузку моего сайта с 2 машинами.
Кто-то ранее рекомендовал использовать NAS / SAN, к сожалению, у меня нет доступа к нему.
Что бы вы посоветовали в моей ситуации ... как я могу улучшить свою настройку?
На днях я прочитал о распределенных файловых системах, и это звучало так, будто это может подходить, однако все они кажутся только Linux ... преобразование в Linux сейчас было бы проблемой, мягко говоря, поскольку у меня мало опыта.
Если я пропустил что-нибудь, что могло бы помочь вам ответить, дайте мне знать.
Спасибо, Пол
Проблема балансировки нагрузки данных. Это весело. Вот несколько примеров того, как я имел дело с большими наборами данных, даже если они обычно разбросаны по нескольким серверам.
Похоже, вы еще не отключили хранилище от презентации. Вам нужно это сделать. Разработайте интерфейс для вашего хранилища (он может быть представлен как файл как отдельный сервер, общий ресурс NFS или аналогичный). Лично я категорически за наличие «медиа-сервера», который обслуживает только данные. Таким образом вы переходите к модели NAS, и это избавит вас от огромной боли по мере вашего роста.
После того, как у вас есть носители, отделенные от приложения, вы можете начать искать решения, как обрабатывать этот большой объем данных, который у вас есть.
Существует большое количество коммерческих продуктов SAN. Как правило, они балансируют нагрузку на большое количество дисков и хорошо справляются с добавлением / удалением хранилища. Они также очень дороги, и похоже, что у вас уже есть оборудование.
На стороне Linux есть стандартное программное обеспечение, которое без проблем обрабатывает такой объем данных. LVM и EXT4 могут работать с очень большими файловыми системами (однако будьте осторожны с временем FSCK). Если бы я построил это, я бы, вероятно, выбрал LVM, EXT4 и обслуживал данные с помощью Apache. Эта комбинация также позволит вам увеличить хранилище до необходимого размера.
Но это всего лишь общие стратегии. Теперь приступим к решению вашей конкретной проблемы. Без знания деталей реализации это немного сложно, но я могу предложить несколько советов:
Похоже, вы неправильно распределяете нагрузку на свой ввод-вывод. Я предполагаю, что вы можете отслеживать, какой диск обслуживает ваши данные. В этом случае вам следует создать сценарий «ребалансировки». Когда вы добавляете новый диск в свою систему, этот сценарий берет данные со всех старых дисков и заполняет новый диск. Затем вы можете распределить входящие файлы по всем дискам и тем самым лучше сбалансировать нагрузку ввода-вывода. Это предполагает, что у вас разные файловые системы на разных дисках, а не просто создается огромный JBOD, что в целом является плохой идеей.
Второй шаг - начать профилирование. Сделайте небольшое приложение, которое регистрирует каждый запрос файла. Если вы видите, что конкретный диск поражен больше, чем его справедливая доля, вы меняете данные между диском и наименее используемым диском. Этот вид балансировки нагрузки предпочтительно выполнять как обычную работу, возможно, каждый час или день.
Также убедитесь, что у вас большие кэши ввода-вывода. Что обычно убивает производительность ввода-вывода в том виде приложения, которое у вас есть, так это когда вы обслуживаете так много разных файлов, что вы перегружаете кеши, что приводит к возникновению мусора на диске. Максимально используйте кэш на контроллерах дисков и добавьте в систему как можно больше памяти. Windows с радостью использует запасную оперативную память в качестве кэша чтения. Сегодня нетрудно, и даже особенно дорого, разместить на сервере более 128 ГБ оперативной памяти. Это довольно большой кеш, даже если ваш набор горячих файлов составляет 1 ТБ.
Учитывая объем данных, которые вы обслуживаете, я бы посоветовал вам держаться подальше от решений RAID. Восстановление больших массивов рейдов может быть болезненным занятием.
Основной вопрос - вы используете RAID-массив, а не просто зеркалируете два добавляемых диска?
Использование чего-то вроде RAID10 на ящике для хранения данных позволит вам увеличить массив (путем добавления дисков и последующего указания RAID-контроллеру или программной подсистеме RAID использовать дополнительные диски.
Тем не менее, рекомендуется переход на модель несвязанного хранилища. Просто с точки зрения масштабирования у вас есть проблема, когда ваш набор данных будет расти и расти. Если вы не архивируете и не удаляете старые данные, вы никогда не перестанете расти.
Например, когда вы заполняете все отсеки в существующей машине, что вы делаете? ;-)
Используя Windows, я бы лично отказался от используемой ими распределенной файловой системы. используйте самые простые решения. К счастью, Windows 2008r2 поставляется с поддержкой iSCSI, так что вы можете довольно легко создать свою собственную SAN (http://technet.microsoft.com/en-us/library/cc726015.aspx).
А еще лучше создать Linux-сервер в качестве цели iSCSI и просто указать на него с компьютеров Windows.