RE:NODE

Эксплуатация13 мин чтения

Как переехать с игровым сервером и не потерять игроков

Порядок действий, при котором миграция проходит без происшествий: что копировать, когда останавливать старый сервер, как на самом деле ведёт себя TTL в DNS и как откатиться.

Обновлено

0 прочтений

Миграция не сложна технически. Она проваливается из-за времени: мир скопировали, пока в него ещё писали, или адрес поменяли раньше, чем об этом сказали игрокам. Работает такой порядок: снизьте TTL в DNS за сутки, полностью соберите новый сервер и один раз запустите его, пока никто не подключается, остановите старый сервер, копируйте данные только после его полной остановки, проверьте своим клиентом, смените DNS и оставьте старый сервер остановленным, но целым, на неделю. Всё остальное в этой статье - детали к этим семи шагам, а миры теряются как раз в деталях.

Заложите час, большая часть которого уйдёт на ожидание. Реальный простой для игроков должен составить от пяти до пятнадцати минут.

Что на самом деле идёт не так#

Три сбоя покрывают почти каждую миграцию, которая кончилась плохо, и все они предотвратимы.

Копию сняли с работающего сервера. Файл мира или база данных, в которые идёт запись, - это не файл, а файл на середине записи. Копия обычно загружается, и в этом вся жестокость, а через несколько дней отказывает: один чанк, который роняет каждого клиента, забредшего в него, или игрок, потерявший три дня прогресса. Проверить это в момент копирования невозможно. Сначала остановите сервер.

Адрес сменился раньше, чем игроки. Домен с TTL в 24 часа меняется не за 24 часа, а на протяжении 24 часов, и в это окно половина ваших игроков попадает на старую машину, а половина - на новую. Если старая машина всё ещё работает, они играют в два мира, которые никогда не удастся свести воедино.

Версии не совпадают. Новый хостер поставил свежайшую сборку, а ваш мир и ваши моды отстают на две версии. Никто не может подключиться или, что хуже, мир открывается более новой версией и тихо обновляется, а это необратимо без резервной копии, которую вы всё-таки сняли.

Порядок, который работает#

  1. За день-два до переезда снизьте TTL записи DNS, которой пользуются игроки, до 300 секунд с того значения, какое там стоит. Пока ничего больше не меняйте.
  2. Полностью соберите новый сервер. Та же версия игры, те же версии модов или плагинов, та же конфигурация, те же порты. Запустите его один раз на пробном мире, чтобы убедиться, что он стартует, и остановите.
  3. Объявите окно работ. Для компании друзей достаточно предупреждения за день и сообщения в игре за час; публичному серверу нужно три дня и закреплённое сообщение.
  4. Снимите резервную копию старого сервера и скачайте её. Это ваш откат, и он не факультативен.
  5. Остановите старый сервер. Штатно, через Stop в панели, а не Kill, и дождитесь в консоли подтверждения сохранения.
  6. Скопируйте данные на новый сервер. Сначала заархивируйте, перенесите один файл, распакуйте там.
  7. Запустите новый сервер и подключитесь сами. Дойдите до базы, загляните в сундук, проверьте права, проверьте, что ваши права админа работают.
  8. Смените DNS на новый адрес или объявите новый адрес, если домена нет.
  9. Оставьте старый сервер остановленным, но целым минимум на неделю. Удалите его, когда никто не жаловался семь дней.

Шаг 5 - тот, который люди пытаются пропустить, потому что это единственный шаг, стоящий простоя. Копировать живой мир ради пяти минут экономии - самая дорогая уловка во всём администрировании серверов. Эти пять минут - самая дешёвая часть всего переезда.

запроспосле сменысначала остановленпроверка по прибытииИгрокисохранённый адресСтарый серверостановлен, неделяЗапись DNSA или SRV, TTL 300Архивснят после остановкиНовый серверте же версии
Что на самом деле переключает переезд

Что копировать, по играм#

«Скопируйте мир» - это сокращение для трёх разных вещей: данных мира, конфигурации и файлов идентичности, которые говорят, кто админ, а кто забанен. Пропустите третье, и первый вечер на новом хостинге уйдёт на то, чтобы объяснять людям, почему они не получили права оператора.

ИграДанные мираТакже скопируйте
Minecraftworld/, world_nether/, world_the_end/server.properties, ops.json, whitelist.json, banned-players.json, banned-ips.json, plugins/
ValheimName.db и Name.fwladminlist.txt, bannedlist.txt, permittedlist.txt
Project ZomboidSaves/Multiplayer/<name>/Server/<name>.ini, <name>_SandboxVars.lua, <name>_spawnregions.lua, база данных игроков
PalworldPal/Saved/SaveGames/0/<id>/PalWorldSettings.ini
Factoriosaves/*.zipserver-settings.json, mods/
TerrariaФайл .wldserverconfig.txt, а при использовании TShock - его база данных
FiveMresources/server.cfg и экспорт базы данных
7 Days to DieПапка сохранений в Saves/serverconfig.xml, serveradmin.xml, папки модов

Две заметки, справедливые для всех игр. Во-первых, имя мира и имя папки обычно совпадают как строка, и новый сервер молча создаст новый мир, если эта строка не совпадёт в точности, включая регистр. Следите в журнале запуска за строкой, которая говорит, что ваш мир загружен, а не создан. Во-вторых, всё, что опирается на базу данных, - плагин прав, экономика, плагин журналирования вроде CoreProtect, фреймворк FiveM, - хранит настоящее состояние в базе, а не в папке мира. Экспортируйте её отдельно.

Для экземпляра PostgreSQL или MongoDB это pg_dump или mongodump при простаивающем сервере:

bash
$ pg_dump -h old.example.net -U appuser -Fc appdb > appdb.dump$ pg_restore -h new.example.net -U appuser -d appdb --no-owner appdb.dump$ mongodump --uri "mongodb://user:pass@old.example.net:27017/appdb" --out dump/

Для небольшого слота базы данных, который идёт рядом с игровым сервером, экспорт - это файл .sql из phpMyAdmin и импорт с другой стороны. Следите за кодировкой: база, экспортированная без неё и импортированная с другой кодировкой по умолчанию, - вот как имена игроков с акцентами превращаются в вопросительные знаки. Форматы и ловушки подробнее разобраны в статье резервные копии и восстановление баз данных.

Как копировать файлы, чтобы это не заняло всю ночь#

SFTP годится для мира и мучителен для папки с модами, потому что каждый файл стоит одного обмена, а сборка модов - это 4 000 мелких файлов. Всегда сначала архивируйте:

bash
$ tar -czf world-2026-09-21.tar.gz world world_nether world_the_end$ sha256sum world-2026-09-21.tar.gz

Затем перенесите один архив и распакуйте его на другой стороне. На RE:NODE файловый менеджер распаковывает архивы на месте, так что весь перенос - две операции перетаскивания, а не сеанс SFTP, который застревает на 62 процентах. Если перенос был большим или соединение ненадёжным, сверьте хэш по прибытии; пять секунд сейчас против испорченного мира потом - хорошая сделка. Подробности подключения и доводы за каждый способ есть в статье SFTP и файловый менеджер.

Если на обоих концах у вас есть доступ к shell, rsync лучше всего остального, и предварительный --dry-run стоит лишней минуты:

bash
$ rsync -avz --dry-run /home/mc/world/ user@new.example.net:/home/mc/world/$ rsync -avz --delete /home/mc/world/ user@new.example.net:/home/mc/world/

Самый быстрый законный обходной путь - вообще пропустить копирование: снимите резервную копию на старом хостинге, скачайте её, загрузите на новый и восстановите. Это те же байты с одной возможностью ошибиться в списке файлов меньше, и приятный побочный эффект - вы доказываете, что ваша копия восстанавливается. Если вы никогда этого не делали, сделайте до того, как понадобится: весь довод - в статье проверка восстановления до того, как оно понадобится.

DNS, TTL и адрес, который игроки на самом деле вводили#

Если игроки подключаются по имени, а не по числу, переезд - это смена записи. Если по числу, переезд - это объявление, которое приходится повторять неделями. Поэтому поддомен перед адресом стоит настроить задолго до того, как он понадобится, и поэтому статья поддомены для серверов - в той же мере про миграции, что и про DNS.

Механика:

  • Снижайте TTL за день-два, а не в сам день. Запись с TTL в 3 600 секунд уходит из кэшей до часа после того, как вы её снизили, и только потом начинает действовать новый короткий TTL. Снижение в момент переключения ничего не даёт.
  • 300 секунд - разумный нижний порог. Некоторые резолверы ограничивают всё, что короче, а некоторые вообще игнорируют ваше значение и используют собственный минимум. Закладывайте, что в худшем случае смена займёт два-три ваших TTL.
  • Верните его на 3 600 или больше через неделю после переезда. Постоянно короткий TTL означает, что клиент каждого игрока постоянно делает запрос впустую.
  • Проверяйте распространение из-за пределов своей сети, потому что ваш собственный резолвер - самый нерепрезентативный из доступных:
bash
$ dig +short play.example.com$ dig +short @1.1.1.1 play.example.com$ dig +short SRV _minecraft._tcp.play.example.com

Minecraft Java - единственная игра, где запись SRV по-настоящему оправдывает себя, потому что несёт и порт, и хост и позволяет игрокам вводить просто домен. Клиенты Bedrock записи SRV не читают вообще. Формат разобран в статье SRV-записи для Minecraft; всё остальное, включая то, почему ваше изменение ещё не видно, - в статье DNS-записи простыми словами.

Для игр семейства Steam - Valheim, Counter-Strike, Project Zomboid, Palworld и остальных - есть вторая проблема, которую не решает ни одна запись DNS. Список избранного в игре хранит адрес, который ввёл игрок, а часто и уже разрешённый IP, а браузер серверов находит серверы по адресу, а не по имени. Игрок, добавивший в избранное 203.0.113.10:2456 год назад, будет продолжать стучаться на это число, что бы вы ни делали со своей зоной. Планируйте сообщить таким игрокам напрямую. В статье как привязать домен к игровому серверу объяснено, какие игры следуют за именем, а какие нет.

Смена тарифа - это не миграция#

Большая часть сказанного выше относится к смене хостинга. Смена размера на том же хостинге обычно ничего из этого не требует.

На RE:NODE смена тарифа не пересобирает сервер: меняются лимиты уже существующего контейнера, поэтому мир, конфигурация, порты и адрес остаются ровно там, где были. Это не миграция, и она не требует ни переключения, ни смены DNS, ни объявления. Если вам не хватает памяти, а не терпения к вашему хостеру, вам нужна именно эта операция. Как понять, какая у вас проблема, разобрано в статье когда повышать тариф, а диагностика за ним - в статье CPU или RAM для игровых серверов.

Та же логика верна и в обратную сторону: если причина переезда - лаги, сначала убедитесь, что на новом месте действительно будет лучше. Расстояние и качество маршрута - физика, и сервер в одной стране не станет быстрее для игроков в другой только потому, что панель приятнее. Измеряйте до переезда: метод описан в статье задержка, джиттер и потеря пакетов, а рассуждение - в статье как выбрать, где живёт ваш сервер.

Проверьте, прежде чем кого-то на него направлять#

Чек-лист занимает десять минут и ловит почти всё:

  1. В журнале запуска сказано, что мир загружен, а не что создан новый. Если сомневаетесь, проверьте сид или размер мира.
  2. Подключитесь сами и дойдите до конкретного места: своей базы, постройки у спавна, сундука, содержимое которого вы знаете.
  3. Проверьте собственные права. Списки админов - самый часто забываемый файл, и симптомом становится то, что вы обнаруживаете это на глазах у всех.
  4. Проверьте, что плагины или моды загрузились, по числу и по версии, сверяя со старым журналом запуска. Плагин, который не загрузился, сказал об этом один раз, где-то вверху.
  5. Проверьте порты, включая порт запроса. Сервер, который работает, но не появляется в браузере, почти всегда потерял один UDP-порт. Пары портов есть в статье порты игрового сервера.
  6. Проверьте всё, что пишет: поставьте блок, сохраните, перезапустите, убедитесь, что блок на месте. Это доказывает, что путь сохранения работает, - единственный сбой, который не найти тестом только на чтение.
  7. Снимите резервную копию нового сервера до того, как зайдёт первый игрок, чтобы у вас была чистая точка отсчёта на новом хостинге.

Если пошло не так, откатывайтесь#

Откат у вас есть ровно до тех пор, пока существует старый сервер и его не запускали снова. Именно поэтому шаг 9 - оставить его остановленным, а не удалить.

Если новый сервер отказал в первый же вечер: остановите его, запустите старый, верните DNS и напишите короткое сообщение, что переезд откладывается. Вы потеряете всё, что было сыграно на новом сервере, и поэтому проблему нужно найти в первый час, а не на третий день.

Если проблема проявляется позже - повреждённый регион, пропавшая таблица в базе, сбросившаяся экономика, - вы восстанавливаетесь из резервной копии, а не откатываетесь, потому что данные старого сервера теперь устарели на дни. Здесь и пригождается копия, которую вы скачали на шаге 4. Храните её, пока новый сервер не проработает две недели без происшествий.

Два практических предупреждения о том, чтобы полагаться на резервные копии самого хостера как на откат. Они живут вместе с сервером, поэтому отмена старого тарифа уносит их с собой, заблокированные или нет. И копия, которую вы никогда не восстанавливали, - гипотеза; статья резервные копии, которые действительно восстанавливаются существует потому, что это утверждение верно гораздо чаще, чем люди ожидают. Скачайте одну копию на свой компьютер до того, как что-либо отменять.

Устранение неполадок после неудачного переезда#

Новый сервер создал свежий мир. Имя мира в конфигурации не совпадает с именем папки или файла. Оригинал по-прежнему на диске, нетронутый. Исправьте имя, перезапустите и никому не давайте играть на новом мире в это время.

Игроки получают «outdated server» или «incompatible version». Новая установка - другая сборка. Закрепите точную версию, из которой взят мир, а обновляйтесь потом, осознанно. Для Minecraft как безопасно это сделать, описано в статье обновление версии Minecraft.

Всё работает, кроме одного плагина. Его данные лежат в базе, которую вы не экспортировали, или в папке за пределами plugins/. Посмотрите в его собственном конфиге путь или строку подключения.

Половина игроков видит старый сервер, половина - новый. TTL истёк ещё не везде. Немедленно остановите старый сервер - это тот самый сбой двух миров, происходящий прямо сейчас, - и переждите.

Никто не может подключиться, а консоль выглядит нормально. Порты. Затем брандмауэр. Затем то, тот ли адрес вы дали людям, к которому на самом деле привязан сервер.

Мир загружается, но отстаёт на часы. Копию сняли с работающего сервера или с резервной копии старше, чем вы думали. Проверьте время создания архива, прежде чем считать, что при передаче что-то потерялось.

FAQ#

Сколько простоя требует переезд сервера?

От пяти до пятнадцати минут реального простоя при хорошей подготовке: время на остановку старого сервера, перенос одного архива и запуск нового. Смена DNS добавляет хвост в несколько ваших TTL, в течение которого часть игроков ещё попадает на старый адрес, и поэтому старый сервер нужно остановить, а не оставлять работающим.

Можно ли копировать мир, пока сервер работает?

Нет. Обычно это выглядит как успех, а иногда даёт мир, который портится через несколько дней, и в момент копирования никак не узнать, какой вариант вам достался. Штатная остановка к тому же принудительно сохраняет мир, так что снятая копия - текущее состояние, а не состояние на момент последнего автосохранения.

Сохранят ли игроки своих персонажей и инвентарь?

В большинстве игр да, потому что эти данные лежат в мире или в файлах игроков сервера, а вы скопировали и то, и другое. Исключение, о котором стоит знать, - Valheim: персонажи живут на машине каждого игрока и путешествуют вместе с ним, так что переезд Valheim инвентарь игроков вообще не затрагивает.

Что делать, если игроки подключаются по IP, а домена нет?

Тогда переезд - это объявление, а не смена записи, и стоит запланировать три канала: игра до переезда, ваш Discord или форум и название старого сервера в браузере после его повторного запуска в роли указателя. Потом настройте поддомен, чтобы следующий переезд был записью DNS.

Стоит ли переносить и резервные копии?

Скачайте минимум одну полную резервную копию на свой компьютер до отмены чего бы то ни было на старом хостинге. Копии хостера привязаны к серверу, который они защищают, и исчезают вместе с ним, так что копия, лежащая где-то ещё, - единственная, которая переживёт отмену.

Как долго хранить старый сервер?

Минимум неделю после последней жалобы. В худшем случае это ещё один месяц небольшого тарифа, и это единственный откат, не требующий восстановления. Остановленные серверы никому не вредят.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000