Уважаемые игроки, полагаю, что за последний месяц я утомил вас чередой технических работ на наших серверах. Знали бы вы, как они утомили меня... Об этом я сейчас и постараюсь рассказать в технических подробностях. Для тех, кому они не особо интересны, достаточно знать, что сервер, на котором расположен Tirion, перенесен на новую платформу, управляемую и более производительную, а база данных теперь работает на рейде из NVMe дисков и выдает 2 300 мегабайт линейного чтения и 750 мегабайт записи. В совокупности с некоторыми оптимизациями кода, по результатам работ серверная задержка была существенно снижена, а скачки диффа практически полностью нивелированы.
История одного (двух) апгрейда
Последние лет 8 основной сервер проекта работал на десткопной (домашней) платформе не особо для этой работы предназначенной. Причин тому было несколько, но основная - в те незапамятные времена код ядра был плохо оптимизирован и требовал высокой производительности (частоты) на каждом из ядер процессора, решения с большим количеством потоков работали плохо. Поэтому было принято решение собрать проект на процессоре i7-3960X 3.30GHz (экстрим версия) - по тем временам довольно дорогая железка (тысяч 40), но весьма производительная. Верой и правдой он отслужил много лет, за эти годы в нем трижды дох блок питания и несколько раз умирали SSD диски: минимум один раз системный и дважды под раздел проектов. Главные проблемы десткопной машины в серверной - отсутствие модулей удаленного управления и памяти ECC Registred, умеющей самостоятельно исправлять ошибки. И если проблема памяти не настолько критичная, то вот без удаленного управления машиной жилось весьма тяжело.
Для тех кому интересно, в серверных решениях есть возможность заходить через веб-интерфейс (настроенный через BIOS) и удаленно управлять настройками машины, запускать ее консоль даже в состоянии, когда она зависла физически или крашнулась ее ОС. Выглядит это примерно вот так:
Обновление платформы основного сервера
В связи с карантином и наплывом игроков я решил, что пора привести в порядок инфраструктуру и обновить ключевой сервер. Сколько стоят современные решения можете поискать сами, цены убегают далеко не за одну сотню тысяч. Поэтому у надежного поставщика была приобретена подержанная платформа из европейского ДЦ - Dell R620 с двумя процами E5-2643 v2 3.50GHz и 64Gb памяти. Что бы не трогать рабочий сервер и лишний раз не дергать пользователей было куплено три SSD от Samsung (под систему, под проекты и их логи, и отдельный диск на 500GB под кор-дампы, формирующиеся при падениях ядра). Вообще, за последний год у меня собралась уже целая коллекция из дисков, установленных в те или иные серверы проекта:
Да, железо не первой свежести, но под наши задачи его за глаза, плюс стоимость апгрейда уложилась примерно в 100 000 рублей с учетом дисков. Работая второй десяток лет с платформами Intel мы были приятно удивлены решением от Dell, начиная от внешнего вида, дисплея с настраиваемым текстом на торце и заканчивая iDRAC - интерфейсом удаленного управления, детально продуманным и очень удобным в эксплуатации. Само состояние сервера в техническом плане идеальное. Несколько фотографий платформы:
Платформа была установлена и подключена, после чего на нее был установлен свежий Debian 10, собран игровой мир, настроены скрипты для синхронизации логов со старым сервером. Миграция с одного сервера на другой заняла для вас минут 10 времени, я же на это потратил несколько дней. В итоге мы получили управляемый сервер с двумя процами уровнем выше чем наш старенький 3960x. Но на этом я решил не останавливаться.
Обновление дисковой подсистемы сервера базы данных
База данных уже много лет работала на платформе Intel S2600GZ, процессоре E5-2680 v2 2.80GHz и рейде из 4-ех SSD дисков на контроллере Adaptec. В свое время собрать ее стоило порядка 200 тысяч. И в целом все работало неплохо, но с массивом дисков были какие-то странные проблемы. Если вы помните, то в сентябре 2019 на наших мира довольно знатно колбасился дифф, плюс в рейде дважды отваливался диск по непонятным причинам. Тогда я решил это обновлением прошивки контроллера, но сама суть проблем осталась неизвестна. На дворе 2020 год, NVMe пришли в массы. Раз уж обновлять дисковую подсистему, то на M.2 диски. База данных - требовательная штука, особенно к записи, но и чтение в районе двух гигабайт не помешало бы. Сказано - сделано. В платформе, собранной году этак в 13-14, естественно, нет слотов под M.2, но это ведь не проблема? Берем PCI-E Адаптер от ASUS, парочку V-NAND 970 PRO SSD и заводимся? Звучит как план, минус 30 тысяч и железки готовы к установке.
В платформу установлен один процессор - E5-2680 v2 2.80GHz, в свое время он покупался для того, что бы запустить на нем игровые миры; он стоил бешенные 65 тысяч, но плохо оптимизированный код (о котором говорилось выше) не потянул, после чего на платформе и была собрала база данных, а миры так и остались на старом сервере. Так вот, процессор там один, а PCI-E линии - две, в одной из них стоит ADAPTEC и прекрасно работает, вставляем адаптер во второй иииии...? Ничего подобного, линии разделены на каждый из сокетов, нихрена не работает - GG, ночь пропала, апгрейд не удался. Забавно, что предварительно адаптер со стареньким NVMe M.2 тестировался на платформе, на которой размещен хостинг (она идентичная за исключением того, что 2U,а не 1) и там стоит 2 процессора... С учетом процедуры обновления BIOS`а - еще одна ночь.
Проц в свое время стоивший 65, сейчас у тех же ребят, что продали платформу, стоит 18. Суббота, звоню, договариваемся - забираю из офиса. Очередная ночь. Вставляем камень, отменно смазав его термопастой MX-4, с первого раза правильно раскидываем память - стартует, 20 ядер 40 потоков, круто.
И даже адаптер заводится, но технология разделения PCI-E шины появилась примерно в 2017 году и платформа видит только 1-ый слот адаптера, а дисков в нем стоит два. Так как запускать базу данных без резервирования - абсолютно идиотсткая идея - очередная ночь потеряна, GG, расходимся.
Потрачено уже достаточно много денег и очень много времени, не бросать же все в таком состоянии? Как решить проблему? Правильно, берем еще один такой же PCI-E - M.2 адаптер от ASUS , заодно и диск под новую ОС, 6-ой CentOS морально устарел.
Еще одна бессонная ночь. Резервируем файлы базы данных, вытаскиваем Adaptec, вставляем две новых платы с диском в каждой:
Ура, платформа видит оба NVMe диска, создаем RAID1, запускаем базу данных - работает!
Дело осталось за малым: устанавливаем Debian 10, настраиваем сервисы и включаем миры в работу. Победа!
Как я и говорил в самом начале - стабильная работа и снижение серверной задержки. Немного жаль потраченного времени и 7 бессонных ночей, но результатами я крайне доволен. Спасибо тем, кто прочел данную статью, тем же кто из нее что-то понял - отдельное уважение.