Кластер ARK - это два или больше выделенных сервера, запущенных с одинаковым -clusterid= и направленных на одну и ту же папку через -ClusterDirOverride=. Когда игрок выгружает персонажа, существо или предмет у обелиска или передатчика, сервер записывает это в файл в той папке; когда игрок прибывает на другую карту кластера, тот сервер читает файл обратно. Вот и весь механизм. Нет никакого центрального сервиса и никакой сетевой связи между серверами - только папка, в которую могут писать оба. Всё, что ломается в кластерах, ломается потому, что эта папка не общая, по ней не делается backup или её читает сервер, правила которого говорят «нет».
Здесь предполагается, что каждая карта уже работает сама по себе. Об одиночном сервере - в руководстве по установке ARK: Survival Ascended; здесь мы соединяем несколько.
Что такое кластер и сколько он стоит#
Каждая карта в кластере - отдельный полноценный сервер: свой процесс, своя установка, своё сохранение, свои порты, своя память. Кластер из трёх карт - это три сервера, которые просто договорились об общей папке. Общие у них только данные переноса.
У этого есть два последствия, которые недооценивают.
- Стоимость растёт с числом карт, а не игроков. Десять игроков на трёх картах занимают примерно втрое больше памяти, чем десять игроков на одной, потому что каждая карта держит свой мир, своих диких существ и свои постройки, кто бы на ней ни был. Тихая карта, на которой никого нет, всё равно стоит почти столько же, сколько загруженная.
- Население размазывается. Сервер с двенадцатью активными игроками ощущается живым. Те же двенадцать на трёх картах ощущаются как три сервера по четыре человека. Кластеры подходят сообществам, которые достаточно велики, чтобы заполнить больше одной карты, или группам, которые хотят пройти сюжетные карты по порядку, сохраняя своих существ.
| Размер кластера | Память на все карты вместе | Кому подходит |
|---|---|---|
| Одна карта, без кластера | 10-16 GB | Группам примерно до пятнадцати человек |
| Две карты | 20-32 GB | Основная карта плюс карта прогрессии или событий |
| Три-четыре карты | 30-64 GB | Сообществам с 30+ постоянными игроками |
| Пять и больше | от 50 GB | Большим публичным сообществам с модераторами |
Эти цифры следуют из расчёта для одиночного сервера в статье сколько RAM нужно серверу ARK; кластер не меняет цифру на карту, он её умножает. С CPU то же самое - каждой карте нужно собственное быстрое ядро для игрового потока.
Аргументы запуска, которые делают кластер#
Задействованы три аргумента запуска, и два из них должны быть одинаковыми на всех серверах.
TheIsland_WP?listen?SessionName=Longship Island?Port=7777?QueryPort=27015?RCONPort=27020 -clusterid=longship-c1 -ClusterDirOverride=/srv/ark/cluster -NoTransferFromFiltering -logScorchedEarth_WP?listen?SessionName=Longship Scorched?Port=7779?QueryPort=27017?RCONPort=27022 -clusterid=longship-c1 -ClusterDirOverride=/srv/ark/cluster -NoTransferFromFiltering -log| Аргумент | Должен совпадать на серверах | Что делает |
|---|---|---|
-clusterid= | Да | Задаёт имя кластера. Серверы видят только данные переноса с тем же ID |
-ClusterDirOverride= | Да, та же физическая папка | Куда пишутся и откуда читаются данные переноса |
-NoTransferFromFiltering | Желательно | Ослабляет проверку того, откуда пришли выгруженные данные |
Cluster ID - произвольная строка. Сделайте её уникальной и немного неочевидной: cluster ID, который использует ещё одно сообщество, безвреден, только пока вы никогда не делите с ним хранилище, а у хостера, где папка кластера лежит в общем месте, это готовая коллизия. longship-c1 лучше, чем cluster.
-ClusterDirOverride указывает родительскую папку; файлы переноса сервер хранит во вложенной папке, названной по cluster ID. Если аргумент не задать, каждый сервер использует место по умолчанию внутри своей установки, а значит, у каждого сервера своя личная папка «кластера», и ничего не переносится. Это самая частая причина, по которой только что собранный кластер вроде бы работает - обелиск позволяет выгрузить, - а на другой карте ничего не появляется.
Каждому серверу также нужны свой игровой порт, свой query-порт, свой порт RCON и свой SessionName. Два сервера на одном адресе с одинаковым портом вместе не запустятся. Держите короткую таблицу, на какой карте какие порты; она понадобится, когда кто-нибудь спросит, почему Scorched Earth не находится в браузере серверов. В статье порты игровых серверов объясняется, почему от query-порта зависит, будет ли сервер в списке.
Правила выгрузки и загрузки#
Может ли что-то покинуть карту и может ли оно на неё прибыть - это отдельные переключатели, которые задаются на каждом сервере в GameUserSettings.ini, в секции [ServerSettings].
| Ключ | Действие при True |
|---|---|
NoTributeDownloads | На этом сервере вообще ничего нельзя загрузить |
PreventDownloadSurvivors | Персонажи не могут сюда прибыть |
PreventDownloadItems | Предметы здесь загружать нельзя |
PreventDownloadDinos | Существ здесь загружать нельзя |
PreventUploadSurvivors | Персонажи не могут отсюда уйти |
PreventUploadItems | Предметы здесь выгружать нельзя |
PreventUploadDinos | Существ здесь выгружать нельзя |
Для открытого кластера поставьте все семь в False на каждом сервере. Но именно ограничения делают кластер интересным, а настройка на уровне сервера позволяет строить односторонние правила:
- Кластер прогрессии, где существа могут уходить вперёд на более поздние карты, но не возвращаться на ранние: разрешите выгрузку существ на ранних картах и загрузку на поздних, но запретите загрузку на ранних.
- Карта событий или арена, куда приходят с персонажами, но без существ:
PreventDownloadDinos=Trueтолько на сервере событий. - Карта «с чистого листа», которая принимает выживших, но ничего из того, что они несут: запретите там загрузку предметов и существ.
Запишите правила до того, как выставлять их, и опубликуйте там, где игроки смогут их прочитать. Существо, которое не может вернуться с карты, - это существо, которое кто-нибудь потеряет, и сервер не должен быть первым, кто ему об этом скажет.
[ServerSettings]NoTributeDownloads=FalsePreventDownloadSurvivors=FalsePreventDownloadItems=FalsePreventDownloadDinos=TruePreventUploadSurvivors=FalsePreventUploadItems=FalsePreventUploadDinos=TrueЛимиты переноса и срок хранения#
Выгруженные данные не ждут вечно, и их количество ограничено. Этим управляют ключи ниже. Значения по умолчанию менялись от релиза к релизу, так что проверьте, как ведёт себя ваша сборка, прежде чем полагаться на число.
| Ключ | Чем управляет |
|---|---|
MaxTributeDinos | Сколько существ один игрок может держать выгруженными одновременно |
MaxTributeItems | Сколько стаков предметов один игрок может держать выгруженными одновременно |
TributeDinoExpirationSeconds | Сколько живёт выгруженное существо, прежде чем будет удалено |
TributeItemExpirationSeconds | Сколько живёт выгруженный предмет |
TributeCharacterExpirationSeconds | Сколько живёт выгруженный персонаж; 0 обычно означает «никогда не истекает» |
Больнее всего бьют таймеры срока хранения. Игрок выгружает своё лучшее существо в пятницу, забывает о нём и через неделю обнаруживает, что его нет - не из-за бага, а потому что срок истёк по расписанию. При настройках в духе официальных выгруженные существа и предметы истекают примерно через сутки. На частном кластере, где люди играют несколько вечеров в неделю, если поднять таймеры для существ и предметов до недели или больше, целая категория обращений в поддержку исчезает. Не ставьте их в ноль, пока не проверили, что ноль значит в вашей сборке: для одних ключей это «никогда не истекает», а для других значение просто не учитывается.
Лимиты количества существуют, чтобы папка кластера не превратилась в склад. Выгруженные данные хранятся вне обоих миров, поэтому это соблазнительное место, где можно спрятать вещи от рейдов, и на PvP-кластере люди будут использовать его именно так. На PvP держите лимиты скромными, на PvE ослабьте.
Существа и предметы, привязанные к карте#
Не каждому существу разрешено покидать родную карту. Некоторые существа и предметы ограничены картами, с которых они происходят, - либо самой игрой, либо правилами переноса той карты, на которую они прибыли бы. Обычный пример - существа сюжетных карт, которые игра считает частью прогрессии этой карты. Настройка сервера CrossARKAllowForeignDinoDownloads ослабляет ограничение для существ, прибывающих с других карт, в тех сборках, которые её учитывают; поведение здесь менялось между Evolved и Ascended и от патча к патчу, так что проверьте на одном существе, которое не жалко потерять, прежде чем говорить игрокам, что перенос безопасен.
Element и некоторые предметы, связанные с боссами, тоже в разное время ограничивались при переносе. Правило то же: если перенос позволил бы кому-то пропустить прогрессию карты, считайте, что игра может его заблокировать, и проверьте.
Моды и кластеры#
С модами кластеры становятся хрупкими. Существо или предмет из мода - это ссылка на то, что определяет мод. Если на карте назначения нет того же мода, ссылка указывает в пустоту:
- Предмет из мода, который сервер назначения не загружает, удаляется при загрузке или так и не появляется.
- Существо из отсутствующего мода не прибывает.
- Персонаж в броне из мода может прибыть без неё.
Безопасное правило - держать одинаковый список модов в одинаковом порядке на каждом сервере кластера. Где это невозможно - например, мод карты, который нужен только одному серверу, - Ascended позволяет указать моды на остальных серверах как пассивные через -passivemods=: так загружаются данные мода без его содержимого, и его предметы переживают перенос. Поведение пассивных модов менялось с обновлениями; после каждого изменения модов проверяйте тестовым переносом. О самом списке модов - в статье моды ARK из CurseForge на сервере.
Обновляйте моды на всём кластере одновременно. Кластер, где на одной карте стоит версия мода 1.4, а на другой 1.5, может переносить данные, которые старая версия прочитать не в состоянии. Остановите все карты, обновите и запустите их вместе.
Где должна лежать общая папка#
Это честное ограничение кластеров, и именно оно решает, где вы вообще можете его запустить.
Папка должна быть одной физической папкой, в которую пишет каждый сервер. На одной машине это тривиально: направьте все серверы на один и тот же путь. Между машинами это означает сетевую файловую систему, которая работает, но добавляет задержку и новый способ сломаться - сетевой ресурс, отвалившийся посреди записи, может повредить файл переноса, и сервер вам об этом не скажет.
У хостеров на панелях, включая Pterodactyl и всё, что на нём построено, каждый сервер - это свой контейнер со своими файлами. Два сервера на одном аккаунте не видят папок друг друга, и общую папку кластера между ними хостер должен настроить специально, если он вообще это делает. Спросите до того, как покупать второй сервер, и если ответ расплывчатый, считайте, что нет. Одна машина под вашим управлением - выделенный сервер или VDS - самый прямой способ держать кластер, потому что все карты могут делить один локальный путь. В статье несколько игровых серверов на одном VDS разобрано, как разделить одну машину между несколькими серверами, - а кластер именно это и есть.
Резервные копии, перезапуски и данные кластера#
Папка кластера не входит в сохранение ни одной карты. Делайте её backup отдельно, по тому же расписанию, что и карт. Если восстановить карты, но не папку кластера, все предметы и существа, которые на момент копии были в пути, пропадут, а если восстановить папку кластера без карт, можно получить дубликаты: существо, выгруженное после того, как сделана копия карты, будет существовать и в восстановленной карте, и в папке кластера.
Безопасный порядок полного отката:
- Остановите все серверы кластера.
- Восстановите все сохранения карт и папку кластера из резервных копий, сделанных в одно и то же время.
- Запустите серверы.
На загруженном кластере перезапуски требуют такой же согласованности. Перезапускать все карты в одну и ту же минуту по расписанию проще для игроков и исключает пограничный случай, когда кто-то выгружается на карте A, карта B перезапускается, и он прибывает на сервер, которого ещё нет. Ежедневный перезапуск для ARK и так нормален; в статье расписания перезапусков, которые помогают разобрано, когда и как предупреждать игроков.
Администрирование кластера#
Команды администратора действуют на один сервер. Баны, кики и объявления на одной карте не распространяются на другие; игрок, забаненный на The Island, всё равно может зайти на Scorched Earth. Баньте на каждой карте или используйте инструмент, который отправляет команды RCON на все сразу. В статье безопасный RCON разобрано, как держать несколько портов RCON рабочими, не открывая их всему миру, а отдельный ServerAdminPassword для каждой карты нужен, только если на то есть причина - один пароль на кластер проще менять.
Держите игровые настройки одинаковыми, если карта не задумана другой. Игроки переносят разведение туда, где рейты быстрее, а фарм - туда, где лучше добыча. Если разница нужна, делайте её осознанно и объявляйте. Ключи - в руководстве по настройкам ARK.
Если перенос не работает#
Выгрузка работает, но на другой карте ничего не появляется. У серверов нет общей папки. Проверьте, что -ClusterDirOverride задан на обоих и указывает на одну и ту же физическую папку, а не на две папки с одинаковым именем.
Другой карты нет в списке переноса. Проверьте, что значения -clusterid совпадают в точности, включая регистр, и что оба сервера запущены.
Существо выгрузилось нормально, а загрузить его не удалось. PreventDownloadDinos на сервере назначения, существо, привязанное к карте, или отсутствующий мод.
Предметы исчезли из списка выгрузки через несколько дней. Таймеры срока хранения. Поднимите TributeItemExpirationSeconds и TributeDinoExpirationSeconds.
Выживший прибыл без снаряжения. Предметы из мода, которого нет на сервере назначения. Выровняйте списки модов или используйте пассивные моды.
После восстановления у игроков появились дубликаты существ. Карты и папка кластера были восстановлены из разных моментов времени. Восстанавливайте и то, и другое из одного набора резервных копий.
FAQ#
Должны ли все карты кластера ARK быть на одной машине?
Нет, но все они должны читать и писать одну и ту же папку кластера. На одной машине это общий путь. Между машинами нужна сетевая файловая система, которая медленнее и добавляет новые способы отказа.
Можно ли держать кластер с разными модами на каждой карте?
Можно, но предметы и существа из модов не переживут перенос на карты без этого мода. Держите один список везде или укажите недостающие моды как пассивные на тех картах, которым не нужно их содержимое.
Как запретить игрокам приводить прирученных существ на новую карту?
Поставьте PreventDownloadDinos=True в GameUserSettings.ini этого сервера. Персонажи и предметы по-прежнему смогут прибыть, если не запретить и их.
Почему пропал мой выгруженный дино?
Скорее всего, истёк срок хранения. Выгруженные существа удаляются по истечении TributeDinoExpirationSeconds, а при настройках по умолчанию это около суток. На частном кластере увеличьте значение.
Стоит ли кластер того для шести игроков?
Редко. Вы платите за каждую карту, есть на ней кто-то или нет, а шесть человек на двух картах ощущаются пустотой. Играйте на одной карте, а когда группа будет готова, сделайте вайп и переходите на следующую.




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