Войти или зарегистрироваться

Совет Как сделать сервер отказоустойчивым

  • Автор темы Автор темы InterVi
  • Дата начала Дата начала

InterVi

Старожил
Пользователь
Баллы
173
Имя в Minecraft
InterVi
Защита от падения
Задача системы в том, чтобы предотвратить падение сервера в случае если VPS или VDS вдруг перезагрузится, вывалится сам сервер или кто-то из админов напишет /stop

Первый шаг - это использование цикла при запуске севрера
Код:
while : ; do sleep 10 && java -Xmx2000M -Xms2000M -jar /root/craftbukkit.jar nogui; done
sleep 10 - это таймаут перезапуска, если сервер действительно нужно остановить, то за это время можно успеть нажать CTRL+C и оборвать выполнение цикла/сессии screen

Второй шаг - скрипт автозапуска, на случай перезагрузки самого VPS/VDS
1. Идем в /usr/sbin/ и создаем там текстовый файл с уникальным именем, записав в него это:

Код:
#!/bin/sh
screen bash -c 'while : ; do sleep 10 && java -Xmx2000M -Xms2000M -jar /root/craftbukkit.jar nogui; done'

Знаю, что многие сидят под виндами, поэтому вот как можно сделать все через консоль:
nano /usr/sbin/minestart #копируем содержимое, CTRL+O, CTRL+X
chmod +x /usr/sbin/minestart

2. Прописываем скрипт в автозагрузку:
открываем /etc/rc.local и перед exit 0 вставлям путь до скрипта, в нашем случае /usr/sbin/minestart

nano /etc/rc.local

Подробнее об автозапуске здесь.

Немного о PEX
Это тоже важно, если продаются/раздаются админки. Вот ударит кому-нибудь моча в голову и он удалит полмира, что тогда?

Нужно не поленится прописать все ручками, вот мой пример:
Код:
 inheritance:
- User
- Moder
permissions:
- commandbook.*
- essentials.*
- worldedit.*
- iConimy.*
- ChestShop.*
- authme.admin.register
- anticheat.*
- clearlag.*
- mcjobs.*
- scavenger.*
- worldguard.stack 
- worldguard.stack.illegitimate 
- worldguard.stack.damaged
- worldguard.locate
- worldguard.fire-toggle.*
- worldguard.halt-activity
- worldguard.region.define
- worldguard.region.list
- worldguard.region.setpriority.own.*
- worldguard.region.teleport.*
- worldguard.region.setparent.own.*
- fly.*

Немного о WorldEdit
Совсем его запретить не очень хорошо, но волшебный топорик надо органичить. Для этого заходим в папку плагина и правим config.yml, вот так:
Код:
limits:
    allow-extra-data-values: false
    max-blocks-changed:
        default: 30000
        Admins: 30000
        Moder: 30000
        maximum: -1

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

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

Я использую плагин AutoSaveWorld. Интервал автосохранения карты стоит 60 секунд, интервал автобэкапа - 86400 секунд (24 часа). А максимальное кол-во бэкапов - 20. Моих 20ГБ хватит и на 30-40, так что боятся не стоит.

часть config.yml
Код:
backup:
  enabled: true
  interval: 86400
  MaxNumberOfBackups: 20
  broadcast: true
  toextfolders: false
  disableintfolder: true
  pluginsfolder: true
  zip: false
  slowbackup: true
  worlds:
  - '*'
  warn: false
  warntime:
  - 0

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

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

Если есть мысли - дополняйте. Только прошу не флудить, а то многие ценности как всегда потеряются в горе бессмыслицы и пользователи их не найдут.
 
И еще немного о PEX и WorldGuard
Совершенно случайно я узнал о куче флагов, которых нет в вики. Например запрет ломания рамки. И... установка gamemode на регион. Т.е. если юзеры могут приватить территорию, то они запросто включат себе креатив. Поэтому надо прописывать в PEX какие флаги можно использовать:
Код:
- worldguard.region.flag.flags.passthrough.*
- worldguard.region.flag.flags.build.*
- worldguard.region.flag.flags.pvp.*
- worldguard.region.flag.flags.mob-damage.*
- worldguard.region.flag.flags.mob-spawning.*
- worldguard.region.flag.flags.creeper-explosion.*
- worldguard.region.flag.flags.enderman-grief.*
- worldguard.region.flag.flags.enderpearl.*
- worldguard.region.flag.flags.ghast-fireball.*
- worldguard.region.flag.flags.sleep.*
- worldguard.region.flag.flags.tnt.*
- worldguard.region.flag.flags.lighter.*
- worldguard.region.flag.flags.fire-spread.*
- worldguard.region.flag.flags.lava-fire.*
- worldguard.region.flag.flags.lightning.*
- worldguard.region.flag.flags.chest-access.*
- worldguard.region.flag.flags.water-flow.*
- worldguard.region.flag.flags.lava-flow.*
- worldguard.region.flag.flags.use.*
- worldguard.region.flag.flags.vehicle-place.*
- worldguard.region.flag.flags.vehicle-destroy.*
- worldguard.region.flag.flags.snow-fall.*
- worldguard.region.flag.flags.leaf-decay.*
- worldguard.region.flag.flags.invincible.*
- worldguard.region.flag.flags.entry.*
- worldguard.region.flag.flags.entry-group.*
- worldguard.region.flag.flags.exit.*
- worldguard.region.flag.flags.exit-group.*
- worldguard.region.flag.flags.greeting.*
- worldguard.region.flag.flags.farewell.*
- worldguard.region.flag.flags.deny-spawn.*
- worldguard.region.flag.flags.heal-delay.*
- worldguard.region.flag.flags.heal-amount.*
- worldguard.region.flag.flags.teleport.*
- worldguard.region.flag.flags.spawn.*
- worldguard.region.flag.flags.price.*
- worldguard.region.flag.flags.feed-min-hunger.*
- worldguard.region.flag.flags.feed-max-hunger.*
- worldguard.region.flag.flags.ice-form.*
- worldguard.region.flag.flags.ice-melt.*
- worldguard.region.flag.flags.potion-splash.*
- worldguard.region.flag.flags.pistons.*
- worldguard.region.flag.flags.item-drop.*
- worldguard.region.flag.flags.entity-painting-destroy.*
- worldguard.region.flag.flags.other-explosin.*
- worldguard.region.flag.flags.enderdragon-block-damage.*
- worldguard.region.flag.flags.invincible.*
- worldguard.region.flag.flags.exp-drops.*
- worldguard.region.flag.flags.vehicle-destroy.*
- worldguard.region.flag.flags.entity-item-frame-destroy.*
- worldguard.region.flag.flags.grass-growth.*
- worldguard.region.flag.flags.mycelium-spread.*
 
Спасибо за защиту от падения, остальное я знал =)
 
никак не пойму
Код:
 inheritance:
- User
- Moder
зачем наследовать права 2-х групп, одна из которых наследует другую?
группа Moder скорей всего уже наследует User...
 
@Serrrgio, и правда, надо поправить

Немного о команде запуска
Если выделить джаве всю память в -Xms, то она ее сожрет и отвалится. Если этот параметр меньше допустимого максимума, то джава будет стремится укладыватся в его рамки и исервер будет жить хорошо. У меня при онлайне в 20 человек и 34 плагинах остается 1Гб свободной памяти. А команда такая:
Код:
while : ; do sleep 10 && java -Xmx2000M -Xms512M -jar /root/craftbukkit.jar nogui; done

И еще о WorldGuard
В нем есть очень полезная штука - блэклист. Я запретил динамит в обычном мире, лаву (ведро и сами блоки, т.к. их может поставить модер или админ), коммандный блок (защита от хитрости модеров и админов, ведь им доступен give).
Код:
[lavabucket]
ignore-groups=gods
on-use=deny,tell
[tnt]
ignore-groups=gods
on-place=deny,notify
[10]
ignore-groups=gods
on-place=deny,notify
[11]
ignore-groups=gods
on-place=deny,notify
[commandblock]
ignore-groups=gods
on-place=deny,notify,kick
blacklist.txt лежит в /plugins/WorldGuard/worlds/папка мира, для каждого мира он настраивается отдельно, и можно разрешить лаву с динамитом в нижнем мире

Тяжко админам без топорика и полный прав на wg, но с ними еще хуже. Вот сегодня старый админ разнес весь спавн, который сам же и построил. Что еще раз говорит о пользе настройки PEX и бэкапирования. Никому нельзя давать OP и полные права в пермишене, это школьники которых вы никогда не видели, в чем я еще раз убедился и закрутил гайки :(
 
Подскажите, а плагин AutoSaveWorld бэкапит абсолютно весь сервер? У меня просто стоит MultiWorld/
 
Да, там можно настроить в конфиге чтобы бэкапил не только карту но и папку плагинов.
Антибот. Совсем забыл про антибот. Очень нужная вешь, я использовал этот. Айпишники у атакующего быстро заканчиваются, спам и падения можно потерпеть. У других, судя по описанию, тупо кик если ты с прокси - это не годится. Кстати он еще выкидывает флудеров на капчу, просто незаменимая вещь от "админ дай админку я харошый" повторяющихся 100 раз.
Бэкапирование без плагина
Нафига держать лишний плагин, если тоже самое легко делается из консоли и не вызывает лагов в игре? Вот скрипт:
Код:
#!/bin/bash
DATE=`/bin/date '+%H:%M:%S-%d.%m.%Y'`
echo 'создание папки'
mkdir /root/backups/$DATE
echo 'копирование карты'
cp -r /root/server/ /root/backups/$DATE/server/
echo 'копирование плагинов'
cp -r /root/plugins/ /root/backups/$DATE/plugins/
echo 'скопировано'
Нужно засунуть, например, в /root/backup.sh, сделать исполняемым, в консоли (не игровой, а серверной) прописать путь для него (запуск).
 
Да, там можно настроить в конфиге чтобы бэкапил не только карту но и папку плагинов.
Антибот. Совсем забыл про антибот. Очень нужная вешь, я использовал этот. Айпишники у атакующего быстро заканчиваются, спам и падения можно потерпеть. У других, судя по описанию, тупо кик если ты с прокси - это не годится. Кстати он еще выкидывает флудеров на капчу, просто незаменимая вещь от "админ дай админку я харошый" повторяющихся 100 раз.
Бэкапирование без плагина
Нафига держать лишний плагин, если тоже самое легко делается из консоли и не вызывает лагов в игре? Вот скрипт:
Код:
#!/bin/bash
DATE=`/bin/date '+%H:%M:%S-%d.%m.%Y'`
echo 'создание папки'
mkdir /root/backups/$DATE
echo 'копирование карты'
cp -r /root/server/ /root/backups/$DATE/server/
echo 'копирование плагинов'
cp -r /root/plugins/ /root/backups/$DATE/plugins/
echo 'скопировано'
Нужно засунуть, например, в /root/backup.sh, сделать исполняемым, в консоли (не игровой, а серверной) прописать путь для него (запуск).
А отключать встроенный сейв отгружаюшахся чанков кто будет?
Иначе отнюдь не копеечный шанс что бэкап побьётся.
 
А отключать встроенный сейв отгружаюшахся чанков кто будет?
Иначе отнюдь не копеечный шанс что бэкап побьётся.
открыть 2 вкладки: с обычной и игровой консолью, прописать save-off, сделать бэкап, прописать save-on
если он раз в месяц делается вполне приемлимо
 
открыть 2 вкладки: с обычной и игровой консолью, прописать save-off, сделать бэкап, прописать save-on
если он раз в месяц делается вполне приемлимо
Бэкап раз в месяц?
Какой вообще в нём тогда смысл?
 
Да, и если тпс падает то это знак того что с жёстким диском всё нехорошо.
ну так VPS, его там еще фиг знает сколько серверов насилуют вот он и подтормаживает
и почему карта должна побится? ASW во время бэкапа много раз успевает ее сохранить, ничего
 
ну так VPS, его там еще фиг знает сколько серверов насилуют вот он и подтормаживает
и почему карта должна побится? ASW во время бэкапа много раз успевает ее сохранить, ничего
Есть такой шанс что побьётся, правда должно крайне не повезти на Linux для этого.
На windows шанс побольше будет.
 
Помогите выполнил первый пункт.При запуске сервера пишет
start.sh: 1: start.sh: Syntax error: "do" unexpected
 
  1. while : ; do sleep 10 && java -Xmx2000M -Xms2000M -jar /root/craftbukkit.jar nogui; done

выглядит правильно, даже незнаю
Допилил скрипт запуска, теперь он перемещает лог в специальную папку. Теперь он не будет разростатся до километровых размеров. У меня есть плагин, который стопорит сервер каждый день в одно время, и теперь логи будут разделятся по дням.
Код:
mkdir /root/logs
сам скрипт
Код:
#!/bin/bash
while : ;
do
DATE=`/bin/date '+%H:%M:%S-%d.%m.%Y'`
mv /root/server.log /root/logs/$DATE.log
sleep 10 && java -Xmx2000M -Xms512M -jar /root/craftbukkit.jar nogui;
done
Плагин называется TimedCommands, полезная штука. Иначе сервер сам вываливается когда ему вздумается и из-за этого уменьшается онлайн.

AutoSaveWorld все-таки оставил: со встроеным автосохранением какая-то фигня, какую-то часть карты он может упорно не сохранять. Ну и для чистки аккаунтов он понадобится.
 
Назад
Верх