Человек с нотбуком (pentarh) wrote in ru_highload,
Человек с нотбуком
pentarh
ru_highload

Category:

Баллансировка, отдача статики: железо

Решил вот выложить результаты своих проб и ошибок в выборе железа и тюнинга бекендов для усиленной отдачи контента.


Что есть.
Баллансировочный кластер фронтенд -> много бекендов на схеме nginx upstream_module
Фронтенд сам с себя по сути ничего не читает, просто это шлюз к бекендам.
Бекенды отдают преимущественно статику, на них стоит так же nginx. Apache я касаться не буду, с ним все понятно )

Нагрузка
Нагрузка идет нехилая, 250 мбит/сек отдача с фронта статических картинок и видеофайлов ну и html немного.

Система.
Все построено на архитектуре FreeBSD 6.2 amd64

Проблемы
1. Практически сразу я уперся в потолок скорости чтения винчестеров бекенда.
2. Чуть позже уперся в загрузку процессора шлюза по прерываниям, а так же подошел к страшному лимиту mbuf_clusters
3. Еще чуть позже после оптимизации некоторые бекенды уперлись в потолок ata_malloc_request. Тоже очень страшная штука, разрывает файловую систему.

Решения
1. Начал пробовать различные конфигурации винчестеров бекенда. И выявлять лучшие по цена/качество. Были опробованы:
2xSATA150 soft mirror
2xSAS hw mirror
2xSATA150 soft stripe
6xSATA hw RAID10

В результате проб и ошибок оказалось что конфигурация бекенда наиболее оптимальна такая:
2xSAS hw mirror - рвет все остальные вместе взятые по скорости и отдаче
2G Ram - нужно, факт.
Процессор особо значения не имеет

2. По прерываниям - включаем и тюним device polling. По мбуфам:
/boot/loader.conf:
kern.ipc.nmbclusters=65536
Чтобы выставить больше - есть ньюансы

3. До сих пор не знаю как с этим бороться к сожалению. Выглядит это так. Сообщение ядра:
ad4: FAILURE - out of memory in start
ad6: FAILURE - out of memory in start

Если набрать vmstat -z | egrep "LIMIT|ata" то видим такое:
ITEM SIZE LIMIT USED FREE REQUESTS FAILURES
ata_request: 336, 0, 1, 4740, 512785205, 1

Почему то это возникает на geom_stripe очень часто и на geom_mirror очень редко.

Ну и напоследок, конфигурация шлюза.
Процессор: процессор значение имеет для nginx шлюза и обслуживания прерываний. Их может быть много даже с поллингом (имеется ввиду загрузка по %Int).
Память: исходя из проблемы 3, память тоже значение кое какое имеет. Остановился на двух гигах.
Винчестер: Имеет значение скорость. У меня стоит soft mirror SATA и уже скоро возможно его будет не хватать на запись, т.к. nginx складывает ответы от бекендов временно на винт. В принципе если со шлюза ничего не читать (а у меня бекенды rsync-аются со шлюза), то может и хватит 2xSATA до определенной нагрузки.

Вот баллансировочный кластер, кросавчег:

Subscribe

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 15 comments