VPS от IHC.ru: обзор, настройка, скорость

Некоторое время назад свои проекты я размещал на выделенном «сервере» — неттопе на Atom 330 с 4Гб памяти у Агавы, о чем я тут уже писал. Однако, со временем поддержание соотношений условно-неограниченного трафика стало достаточно утомительным (особенно учитывая, что англоязычная аудитория у меня больше русскоязычной), я решил перейти на VPS с неограниченным трафиком. Из требований — физическое размещение в Москве. Долгое время я пользовался VPS от firstvds, но микроскопические объемы памяти не позволяли там делать что-либо серьёзное. После некоторого блуждания, я наткнулся на молодую компанию IHC.ru (ссылка без рефа) с которой счастливо провел уже 3 месяца, ни разу не пожалев, что перешел с личного сервера на VPS. О своём опыте работы с этой компанией я и хочу рассказать.

Общая информация

Во всех тарифах трафик — «неограничен». Но мы то знаем, что так не бывает :-) В FAQ написано, что пока трафик не сильно превышает 4Тб проблем быть не должно, впрочем эта цифра может быть пересмотрена из-за недавних событий со сменой компании-продавца места в ДЦ (раньше это был McHost, предлагавший опять же виртуальный анлим трафика, сейчас — это ДЦ Оверсан-Меркурий напрямую, и у него все имеет свою цену). В любом случае, неожиданно никто никого не отключит.

С качеством канала проблем нет — подключение головных серверов 1Гбит, VPSкам положено по 100Мбит, но тут есть неожиданный сюрприз (о нем в разделе тестирования скорости). Никаких дропов пакетов, пинги стоят как вкопаные:


VPS — на OpenVZ. И прежде чем вы скажете, что OpenVZ — говно, я скажу что его просто надо правильно готовить (об этом ниже). Моя рабочая система на VZ-1 влазит в ~350Мб с запасом и держит любые хабраэффекты в пределах разумного (о тестировании скорости опять же ниже).
0.5Гб памяти дают за 500 рублей, 1Гб - 1000 рублей, 2Гб - как не удивительно, 2000 рублей

Кратко других услугах: Обычный хостинг — тут никаких тонкостей. Бэкапы — необычная услуга — место для бэкапов с поддержкой rdiff-backup, rsync, fsbackup, duplicity. Бэкапы выполняются на сервер с RAID5. Это услугу можно заказать даже если ваш сервер не у IHC.ru. (Также компания готовит услугу по бэкапу в «чужом» ДЦ, чтобы в случае аварии на основном ДЦ можно было бы сразу забрать данные): 15 Гб/150 руб/мес, 150 Гб — 600 руб/мес и выше.

OpenVZ: готовим его правильно

Многие в вину OpenVZ ставят бОльшее потребление памяти приложениями. Да, есть такая проблема. Однако, большая часть её снимается уменьшением размера стека до 1Мб (ulimit -s 1024, подробнее об этом тут) — это в моём случае освободило около 100Мб памяти.
Далее, если мы устанавливаем LAMP, нужно правильно настроить apache2, mysql и nginx(куда же без него). Основная причина жалоб на VPS — тормоза под большой нагрузкой, когда апач сотнями процессов съедает всю доступную память и сайт останавливается. С этой проблемой мы и будем бороться:

Apache2: Главная идея — используем apache2-mpm-prefork (apt-get install apache2-mpm-prefork), и в apache2.conf устанавливаем следующее:
<IfModule mpm_prefork_module>
StartServers 4
MinSpareServers 4
MaxSpareServers 4
MaxClients 4
MaxRequestsPerChild 0
</IfModule>

Фактически, мы заставляем Apache2 иметь только 4 процесса. Это означает, что обрабатываться одновременно смогут только 4 запроса. Но в любом случае, на VPS мы имеем только один процессор, и пока мы не упираемся в i/o даже 2 процесса не будут быстрее чем 1. (в общем случае, вместо 4 выставляем кол-во физических процессоров*2, далее производительность особо не растет). Запросы, которые приходят во время обработки старых — попадут в очередь, размер которой настраивается через ListenBacklog (у меня значение по умолчанию — 511).

Nginx: Но тут есть одна проблема: процесс Апача занят пока не отошлет конечному пользователю все тело HTTP ответа, и если он отдает страницу на 500Кб, а пользователь сидит через GPRS, процесс будет висеть в памяти минуту. 4 таких пользователя — и весь сайт недоступен. Для того чтобы избежать этой ситуации обязательно нужен nginx в режиме proxy- он мгновенно забирает ответ у Апача, и потом может минуту отдавать его медленному клиенту практически не тратя на это память. nginx настраиваем как обычно, никаких особенностей.

MySQL: один из ключевых факторов скорости работы ваших сайтов. Предлагаю попробовать мой файл конфигурации, который я оптимизировал для VZ-1 — с ним MySQL занимает около 160Мб. Скачать можно тут. Если у вас будет VPS пожирнее — увеличиваем key_buffer, но помните, что нет смысла делать его больше чем суммарный размер индексов ваших баз данных. ВНИМАНИЕ: эта конфигурация оптимизирована для работы с 4-8-и процессами Апача, не больше, и поддерживает всего 16 соединений. Это сделано специально — каждый коннект — это расходы памяти на буферы чтения, сортировки и проч., поэтому ограничивая кол-во возможных одновременных соединений мы экономим и на Апаче, и на MySQL.

Что получилось: Система, потребление памяти которой практически не зависит от нагрузки. С Apache2+MySQL+memcached+bind9+munin+1 worker passenger/ruby+сервер TeamSpeak3 все это потребляет 330Мб памяти, и еще 182Мб в запасе в этом ужасном OpenVZ:

Неровности на графике в правой части — это мои эксперименты, во время нагрузочного тестирования линия остается ровной.

Тестируем скорость

Для начала статика (ну и параллельно тестируется толщина канала):
Я взял VPS от server4you.net (неплохой вариант, если вы ненавидите Российский хостинг и не хотите платить по WebMoney), и провел с него нагрузочное тестирование через ab. Результатами был удивлен. Напомню, у меня nginx статику напрямую не раздает, все это выходит из Апача и только потом в nginx (это в качестве ответа тем, кто говорит что Апачем статику раздавать нельзя):

Картинка 3.8Кб: 1424 запроса в секунду, скорость передачи 5.7Мб/сек. Nginx жрет 25% CPU, 4 Апача по 2-3%.
Картинка 45КБ: 638 запроса в секунду, скорость передачи 28.4Мб/сек.

Когда я увидел эту цифру — я не мог поверить своим глазам. Я с домашнего медиасервера не всегда с такой скоростью файло сливаю, а тут — через интернет, из Москвы в Германию :-) Чтобы убедиться, что я ничего не перепутал, показываю результат:

Server Software: nginx/0.5.33
Server Hostname: 3.14.by

Server Port: 80

Document Path: /i/hk.jpg
Document Length: 45169 bytes

Concurrency Level: 200
Time taken for tests: 20.582 seconds
Complete requests: 12761
Failed requests: 0
Write errors: 0

Total transferred: 583216963 bytes
HTML transferred: 579059299 bytes
Requests per second: 638.03 [#/sec] (mean)
Time per request: 313.464 [ms] (mean)
Time per request: 1.567 [ms] (mean, across all concurrent requests)
Transfer rate: 28476.52 [Kbytes/sec] received

Жесть, действительно, 0.58Гб трафика за 20 секунд. Надо написать в техподдержку, чтобы снизили скорость, а то положено 100Мбит, а выдает 250. (А часто ли вам приходилось просить техподдержку снизить скорость? )
На динамических сайтах:
Мой хомяк:
Главная страница, 6 SQL запросов — 170 запросов в секунду (Atom 330 выдавал 220).
Просмотр статьи, 1 SQL запрос — 600 запросов в секунду.
Форум PHPBB, главная страница — 17 запросов в секунду (Atom 330 выдавал 20-21).
Не сайты:
На VZ-2 запускал сервер TeamFortress 2 — 32 игрока тянет без лагов, tickrate 66. (Atom 330 тянул только 8 игроков из-за дохлого FPU)

В целом, скорость меня более чем устраивает без каких-либо поблажек. Настроенный таким образом VPS легко выдержит любой хабраэффект (а он, напомню всего 1-2 пользователя в секунду в час пик), и по своему, теперь уже бывшему, dedicated серверу на Atom 330 я не скучаю :-)

О техподдержке

Собственно, с проблемами хостинга как таковыми я не сталкивался. Были пара косяков с моей стороны (один раз настроил firewall так что ssh закрылся, другой — запретил удаленный логин руту), в обоих случаях проблемы оперативно решались по почте, в том числе утром в субботу.

О черном дне

Проблемы иногда бывают у всех компаний, и именно во время проблем можно увидеть разницу между добросовестными компаниями и мягко говоря посредственными. Компания IHC.ru пострадала во время недавнего отключения хостера McHost, у которого она размещала свои сервера. В отличии от McHost, с первых часов конфликта компания держала всех в курсе на форуме searchengines.ru, параллельно ведя переговоры с ДЦ Оверсан-Меркурий о заключении прямого договора без посредников. В конечном итоге, все сервера IHC.ru поднялись через 26 часов, и всем активным пользователям была выплачена компенсация в размере 20% абонплаты (мелочь, но как говорится, приятно).

Пробуем сами

Если у вас появилось желание проверить все это на практике, то тут как раз кстати 10-и дневный пробный период без каких либо условий. Регистрируемся (ссылка без рефа) — нужно указать только мыло и пароль, заходим в личный кабинет, в меню Заказы->Заказать VPS/Хостинг — получаем бесплатный пробный период. Настраиваем, наслаждаемся

Буду рад, если информация окажется кому-то полезной.
Комментарии/вопросы по настройке/замечания — приветствуются. :-)

RSS@BarsMonster3@14.by