1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем InterVi, 6 июн 2013.

  1. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Защита от падения
    Задача системы в том, чтобы предотвратить падение сервера в случае если 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.
    Эту ценную информацию я не смог найти, поэтому придумал все сам. Особенно важна первая часть, подобных решений я вообще нигде не видел, а ведь это важно.

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

    Если есть мысли - дополняйте. Только прошу не флудить, а то многие ценности как всегда потеряются в горе бессмыслицы и пользователи их не найдут.
     
    Alexgrist, 11STRYDER11, HocOK245 и 7 другим нравится это.
  2. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    И еще немного о 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.*
     
    HocOK245 и Official_dizziel нравится это.
  3. MySt1k

    MySt1k Старожил Пользователь

    Баллы:
    173
    Спасибо за защиту от падения, остальное я знал =)
     
    MrXamster нравится это.
  4. Serrrgio

    Serrrgio Старожил Пользователь

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    никак не пойму
    Код:
     inheritance:
    - User
    - Moder
    зачем наследовать права 2-х групп, одна из которых наследует другую?
    группа Moder скорей всего уже наследует User...
     
    Likeobot и InterVi нравится это.
  5. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    @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 и полные права в пермишене, это школьники которых вы никогда не видели, в чем я еще раз убедился и закрутил гайки :(
     
  6. AlexGL

    AlexGL Старожил Пользователь

    Баллы:
    123
    Подскажите, а плагин AutoSaveWorld бэкапит абсолютно весь сервер? У меня просто стоит MultiWorld/
     
  7. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Да, там можно настроить в конфиге чтобы бэкапил не только карту но и папку плагинов.
    Антибот. Совсем забыл про антибот. Очень нужная вешь, я использовал этот. Айпишники у атакующего быстро заканчиваются, спам и падения можно потерпеть. У других, судя по описанию, тупо кик если ты с прокси - это не годится. Кстати он еще выкидывает флудеров на капчу, просто незаменимая вещь от "админ дай админку я харошый" повторяющихся 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, сделать исполняемым, в консоли (не игровой, а серверной) прописать путь для него (запуск).
     
  8. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    А отключать встроенный сейв отгружаюшахся чанков кто будет?
    Иначе отнюдь не копеечный шанс что бэкап побьётся.
     
  9. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    открыть 2 вкладки: с обычной и игровой консолью, прописать save-off, сделать бэкап, прописать save-on
    если он раз в месяц делается вполне приемлимо
     
  10. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Бэкап раз в месяц?
    Какой вообще в нём тогда смысл?
     
  11. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    даже раз в неделю тоже норм, когда карта большая и много игроков каждый день не вариант
     
  12. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    У меня карта 20гигов весит и это не мешает делать бэкап каждый день.
     
  13. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    через ASW? не у всех так, у меня при полных слотах если бэкап врубить тпс до 10 падает
     
  14. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Да, и если тпс падает то это знак того что с жёстким диском всё нехорошо.
     
    Alexgrist нравится это.
  15. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    ну так VPS, его там еще фиг знает сколько серверов насилуют вот он и подтормаживает
    и почему карта должна побится? ASW во время бэкапа много раз успевает ее сохранить, ничего
     
    ВремяПриключений нравится это.
  16. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Есть такой шанс что побьётся, правда должно крайне не повезти на Linux для этого.
    На windows шанс побольше будет.
     
    MineMan910 нравится это.
  17. Darth Udko

    Darth Udko Старожил Пользователь

    Баллы:
    103
    Помогите выполнил первый пункт.При запуске сервера пишет
    start.sh: 1: start.sh: Syntax error: "do" unexpected
     
  18. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    покажи тело скрипта, жалуется на ошибку в синтаксисе
     
  19. Darth Udko

    Darth Udko Старожил Пользователь

    Баллы:
    103
    1. while : ; do sleep 10 && java -Xmx2000M -Xms2000M -jar /root/craftbukkit.jar nogui; done
     
  20. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    выглядит правильно, даже незнаю
    Допилил скрипт запуска, теперь он перемещает лог в специальную папку. Теперь он не будет разростатся до километровых размеров. У меня есть плагин, который стопорит сервер каждый день в одно время, и теперь логи будут разделятся по дням.
    Код:
    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 все-таки оставил: со встроеным автосохранением какая-то фигня, какую-то часть карты он может упорно не сохранять. Ну и для чистки аккаунтов он понадобится.
     

Поделиться этой страницей