Расчет параметров файлового сервера?

Добрый.


Задача: осуществить перенос тяжелого файлового контента с основного сервера на новый выделенный.


Параметры контента: контент преимущественно аудиофайлы размера от 5 до 200 Мб общим объемом на данный момент 800 Гб и будет расти в прогрессии.


Месячная посещаемость: ~10.000.000 просмотров страниц, ~5.000.000 посещений, ~1.000.000 уникальных посетителей.

Суточная посещаемость: ~350.000 просмотров страниц, ~160.000 посещений, ~100.000 уникальных посетителей.

Одновременно на сайте: от ~3.000 до ~10.000 человек (по chartbeat).


Средняя загрузка канала: от 1 Гбит/с до 4 Гбит/с.


На основании подобных данных хотелось бы максимально грамотно подойти к железным требованиям нового сервера, т.е. объемам памяти, дисковой подсистемы, процессору.

По программному обеспечению на сервере будет работать nginx. Остальные возможные сервисы не будут работать с пользователями.


По текущим прикидкам: процессор — 4 шт по 2.6 ГГц, память — 24 Гб, дисковая подсистема — 2 Тб для начала, канал — 10 Гбит/с

По бюджету — желательно уместиться в 100.000 руб/мес.


Вот в подобной статичности какие могут быть подводные камни, какой технологией разворачивать дисковую подсистему? Что можно почитать, какую информацию собрать сейчас? В данный момент все портально лежит хламом на универсальном кластере. Все держится комфортно, но архитектурно и религиозно это все не верно и не выдержит постоянного вертикального расширения. Сейчас 24 процессора по 2.2ГГц, 48 Гб памяти, 1 Тб Raid 5 + 100 Гб 2xSSD.
  • Вопрос задан
  • 11063 просмотра
Пригласить эксперта
Ответы на вопрос 7
michs
@michs
Надо исходить не из общих параметров, а от нагрузки на дисковую.
Сколько iops надо в пике? Сколько загрузка процессоров и озу на текущих машинах?
Что будите делать если новый одиночный сервер навернётся?
Ответ написан
Комментировать
@zuborg
Лучше использовать кластер серверов — и надежнее, и дешевле, чем покупать один супер мощный сервер.
В мейнстримовых серверах по две 1Г сетевухи, их можно обьединить и получить 2Гбита на сервер (реальных 1.5-1.8 без потерь покетов)
Опять же, современные недорогие 1U корпуса вмещают 4 винта, вполне нормально для поставленой задачи, можно даже все объединить в raid1 для увеличения производительности чтения.
Проц совершенно неважен для отдачи статики, лучше взять меньше ядер — но больше частоту — положительно скажется на скорости обработки сетевых прерываний.
Памяти стоит напихивать по максимуму, для мейнстримовых мамок это 16Г.
Обязательно обратить внимание на сетевухи, это должны быть либо интел, либо броадком, ни в коем случае не реалтек и прочие марвеллы.
Балансить траф надо не рандомно, а так чтобы один и тот же файл отдавался с одного и того же сервера — так более эффективно используется ram под файловый кеш, грубо говоря — суммируется по всем серверам.
ssd — отдельная песня, в Вашем случае (маленький объем контента) возможно даже более предпочтительнее взять один ssd на 480G за 500уе, чем 4 винта, можно и на памяти сэкономить.

В общем, это уже cdn, возможно Вам будет проще и выгоднее воспользоваться уже работающими на рынке cdn сервисами.
Ответ написан
kotomyava
@kotomyava
Системный администратор
Если у вас происходит только раздача контента, без его обработки, вам практически не нужен процессор. Практически у вас основное узкое место это диски.
Такое решение надёжнее и обычно дешевле делать не на одном мощном сервере, а на нескольких довольно простых.

Возможно имеет смысл сделать пару основных хранилищ и несколько кеширующих фронтэндов с ssd, если есть часть файлов запрашиваются заметно чаще других.
Если запросы размазаны по всем файлам, имеет смысл брать несколько простых однопроцессорных 1U серверов по 4 винта в каждый, побольше памяти. И распределять запросы между ними.
Такие решения и надёжнее, и обычно дешевле чем одиночный сервер, который справится с такой же нагрузкой. К тому же проще масштабироваться потом, добавляя постепенно типовые и недорогие серверы, с одинаковой конфигурацией железа и ПО.
Ответ написан
Комментировать
AlekseyPolyakov
@AlekseyPolyakov
Один сервер хорошо, а что в плане отказоустойчивости? Лучше об этом позаботиться сразу. Как бюджетный вариант для отказоустойчивости я бы поставил рядом ещё один сервер с теми же ролями в опущенном состоянии, сделал бы синхронизацию файловой структуры с помощью rsync. Еслии первый упал, поднимаем роли роли на втором и перемыкаем порты на роутере или меняем IP на тот, что пренадлежал первому
Ответ написан
Комментировать
@milar Автор вопроса
Текущий срез загрузки: процессор — используется менее 50% из 2400%, память — используется 12 Гб из 48

iostat
avg-cpu:
%user: 1.91
%nice: 0.00
%system: 2.28
%iowait: 0.26
%steal: 0.00
%idle: 95.55

tps: 244.74
Blk_read/s: 18145.77
Blk_wrtn/s: 1446.57
Blk_read: 39002384910
Blk_wrtn: 3109236520

ФС: ext3, ext4

Масштабирование конкретно файлового сервера не имеет сути каким образом масштабировать. По специфике достаточно просто произвести как вертикальное так и горизонтальное.
Требования к svc, iops и потокам сильно зависит от технологии доступа. Конкретные цифры требований не могу сказать.
Доступ к файлам преимущественно (95%) по прямой ссылке и динамичные персональные реврайт ссылки в nginx.
Если новый одиночный сервер нагнется — будем печалиться и разворачивать новый из бекапа на это время оставаясь без файлов. Неприятно, но не критичная необходимость. На период развертки в случае потенциального краха нового сервера его функции снова возьмет на себя основной.
Ответ написан
Комментировать
mgyk
@mgyk
Объем не очень большой и чтение более-менее последотвательное хотя и во много потоков.
Мне кажется что проще всего взять несколько железяк с 8x450 10k rpm SAS в каждую, рамы 16+, 4 ядра.
Ответ написан
Комментировать
@esc
За ваш бюджет, это скорее будет один сервер, чем 2. Если упадет — придется поднимать и не отдавать файлы, пока не поднимется.

Но если об остальном. Для раздачи 10G достаточно одного процессора i7 2700К или аналога (980, 3770, не феном!).

Думаю, использовать будете сетевуху типа x520, а значит проблем с тем, что тормозит сетевая, не будет.

Самый простой путь выжать 10G это использовать SSD. За ваши деньги это будет что-то типа 8*240Gb, например, таких: hotline.ua/computer-diski-ssd/ocz_agt3-25sat3-240g/ Либо vertex серии, особой разницы на такой задаче не будет.

Выберите мать с 6 sata портами (sata3 не имеет значения), встроенным видео и минимум 2мя слотами pci-ex x16 (реально это будет один х8, один х4).

Для подключения восьми винтов, нужно поставить контроллер. Рекомендую такой: hotline.ua/computer-kontrollery-raid/adaptec_raid_1430sa/. sil, не смотря на такой-же чипсет использовать не нужно, будет виснуть сервер. 4 порта, а не 2, чтобы еще системный винт поместился.

Итого, получается, что в порт 8x вы воткнете сетевуху, в 4х — вот этот контроллер.

В качестве файловой системы используйте xfs (с дефолтными настройками, при монтировании указывайте noatime), ос соотвественно, новый линух (в случае убунты это 12.04). Старые версии ставить не нужно, у них может быть не очень хорошая сетевая подсистема. FreeBSD тоже ставить не нужно, новый линукс работает с сетью существенно быстрее.

Рейды не используйте, разбрасывайте файлы сами. Если данных больше, чем на 4 SSD, то лучше раскидать рандомно и отдельно сделать вторую копию для 20% самых популярных файлов. Сколько копий и для скольки процентов файлов, в реальности, нужно будет подбирать смотря на нагрузку.

Памяти достаточно 4 или 8Гб, в нее все равно особо ничего не влезет и как кэш дисков она практически бесполезна на данной задаче.

Ставьте nginx, выключайте sendfile, включайте aio.

Это советы для сайта с, например, mp3 или, допустим, онлайн фильмами для объема файлов 0.8-1.5Тб.

Если опишете, сколько у вас всего файлов и сколько процентов объема этих файлов создают 50% трафика (лучше еще 80% трафика указать), возможно, конфигурацию придется подкорректировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы