Продвинутый уровень. Ротация лог файла.

Тема в разделе "Установка и настройка сервера", создана пользователем Filter, 30 мар 2014.

  1. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Многие, особенно те у кого постоянный онлайн 20+ наверное задавались вопросом, как сделать что бы server.log автоматически архивировался и не рос до безумных значений объема.
    Решение для Windows довольно простое:
    1. Устанавливаем формат даты и времени в системе на русский.
    2. Добавляем в ваш start.bat, в самое начало, такие строки:
    Код:
    FOR /F "usebackq" %%a IN (`time /t`) DO (
    set time=%%a
    )
    set time=%time::=.%
    
    FOR /F "usebackq" %%a IN (`date /t`) DO (
    set date=%%a
    )
    mkdir logs
    rar a ".\logs\%date%-%time%_server.zip" server.log
    del server.log
    3. Кладем в папку с сервером файл rar.exe из комплекта winrar. Его можно скачать в интернете бесплатно, так как он является условно бесплатной программой.

    После проведенных манипуляций при запуске сервера посредством вашего файла start.bat будет автоматически создана папка logs, куда будут сохраняться архивированные версии логов сервера в формате "текущая дата - текущее время"_server.zip и сам server.log будет удаляться.
     
    Annabuilder нравится это.
  2. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    При таком подходе, часть логов, которая генерируется сервером в период запуска и работы архиватора - будет теряться и если онлайн около 100 на сокете - то теряться будет очень много. Так как удаляется файл с логами уже после того, как прошел процесс архивации и в файл с логами который удаляется уже дописалась информация, которая не попала в архив.
    Для избежания такого рода потерь в лог-файлах нужно делать перенос лог-файла в другой каталог (туда где хранятся бекапы) и уже в нем архивировать. После переноса, при очередной записи в лог-файл, создастся новый файл с логами и тем самым потери будут исключены, так как они войдут в следующий архив.
     
  3. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Нет, не будет. Знающий человек заметит, что данный скрипт я рекомендую писать до запуска сервера, то есть в начале файла start.bat, это означает что сервер на момент архивации и последующего удаления лога еще не запущен, никто к нему подключиться не может, никакие логи от непосредственно сервера в лог файл не пишутся.
     
    Annabuilder нравится это.
  4. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Ну знающий человек, обычно делает бекапы баз MySQL и остального по крону, с заданным интервалом времени, а не от случая к случаю при остановке сервера.
    Но уже замечено и не раз, что на ММ этим пренебрегают, так как уже многократно были ситуации, когда вы ссылаясь на отсутствие свежих бекапов откатывали игровые миры на недели назад и игроки теряли свои ресурсы и строения, а соответственно и интерес продолжать играть на сервере.
    Это нужно прекратить, а то играть и так не с кем уже.
    Могу помочь в написании скриптов профессионального бекапирования игровых миров по крону с интервалом, например, каждые три часа без остановки серверов.
     
  5. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    1. Игровые миры хранятся не в БД, а на диске в собственном формате.
    2. Предложенное решение действует для лог файла который тоже не пишется в БД, при том никогда.
    3. Непосредственно БД у нас бэкапится, но это не относится к миру.
    4. Мы откатывали мир tech сервера и было это 1 раз всего.
    5. Как бы и сам могу, было бы куда скидывать всякий раз миры размером более 4-х гигабайт. К тому же постоянное бэкапирование таких больших объемов может негативно сказаться на производительности серверов в момент бэкапирования.
     
    Wulwsten и Annabuilder нравится это.
  6. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Ну игровые миры же наверняка хранятся не на диске, а в оперативной памяти - на RAM drive (если речь про WIN), так как, чтобы игроки не жаловались на лаги от "курочек и коровок" - игровые миры размещаются на RAM drive. Под каждый игровой мир отводится 2-8 гиг оперативы на сервере (на линуксе проще - там не нужно задавать размер "ram" диска - он увеличивается системой по мере увеличения размера файла автоматически но раз речь про win - то тут менее удобно, но терпимо). Так вот бекапирование в таких случаях осуществляется средствами самого RAM drive - путем настройки бекапа содержимого RAM drive каждые 30 минут на жесткий диск с последующим архивированием и автоматическим разносом дублей архива на удаленный хост. Сам процесс архивирования при этом не затрагивает игровые миры - так как они живут в оперативке и серваку нет дела до медленного винта, пусть даже это винт SSD и проходят в фоновом режиме без всяких негативных последствий для игроков. Обычно хранятся последние 30 бекапов, а устаревшие автоматически удаляются скриптом бекапирования - проверкой даты создания файла.
     
  7. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Annabuilder, я вам говорил, мир весит 4 с небольшим гигабайта. На машине в нормальной обстановке может работать до 4 игровых серверов. Считаем 4х4=16 гигабайт. Стандартно сервер держит(если не двухпроцессорный) до 32 гигабайт RAM. Если от 32-х отнять 16, то получим 16. 1 сервер в день, без рестартов пожирает 5 гигабайт и более RAM, а это 5х4=20. И все это еще не считая служебных нужд операционной системы. О каком рамдрайве может идти речь? Если сделать рамдрайв, то рестарт прийдется делать каждые 2-3 часа, иначе оперативная память кончится.

    PS: Если не знаете предмета который обсуждаете, то не смешите людей. Вы уже показали свою некомпетентность когда сказали в первом вопросе что логи будут теряться, хотя это в принципе не возможно, так как сервер майнкрафта запускается только после того как все операции с логами уже выполнены, и другого быть не может, потому что скрипт всегда ждет окончания исполнения той задачи которую выполняет прежде чем перейти к другой. Логи даже не терялись бы если предложенный мной скрипт положить в конец, однако в случае мертвого зависания сервера майнкрафт, когда его пришлось бы выключать жестко, не выполнились бы операции по архивированию лога.
     
    Annabuilder нравится это.
  8. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    В одном подъезде со мной живет админ сервера Майнкрафта, на котором пиковый онлайн 1800+ человек. Там много игровых миров и несколько серверных машин, но конкретно на сервере с двумя ксеонами на борту и 64 гиг оперативы размещены 8 сокетов на каждом из которых играет ежедневно по 100 (800 в сумме) человек - все работает без единого лага с бекапами каждые 15 минут. И соответственно стоит не винда, а 64 битный debian. Все игровые миры в оперативе, несмотря на то, что там аппаратный RAID на SSD под систему и 4 терабайтный RAID на обычных винтах под бекапы.
    Мы помогали ему переехать из дата-центра в Франкфурте на новое оборудование сконфигурированное нами и поставленное на коллокейшен в Московсий дата-центр и отстроить работу серваков, сократив тем самым количество серверных машин в 4 раза по всему проекту, за что и были отблагодарены соответственно) Отец там получает ЗП до сих пор, так как попросили его админить по железу и он по соседски согласился.

    Да - с логами и вашим примером был наш косяк. признаю. Но кто мог предположить, что в теме с таким громким названием - Продвинутый уровень. Ротация лог файла будет всего-навсего архивирование текстового файла при выключенном игровом сервере))) При выключенном - потерь не будет, спору нет и не было. При включенном - будут. О чем и было написано.
    Поэтому признаём свою ошибку - так как купившись на заголовок повели речь сразу о более масштабном мероприятии - Ротации полных бекапов всего сервера, включая базы MySQL при ВКЛЮЧЕННЫХ и РАБОТАЮЩИХ игровых мирах. Ну мы ламеры и нубы - что с нас взять)
     
  9. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Простая математическая выкладка:
    8 миров (игровых серверов), в случае если их размеры равны 4 гигабайта, это 32 гигабайта на диске.
    Каждый мир (игровой сервер) за сутки потребляет около 5 гигабайт, следовательно 5х8=40.
    теперь считаем: 64-32=32. 32-40=-8. Итого мы имеем недостаток оперативной памяти в 8 гигабайт.

    Я не знаю какого объема миры у вашего соседа, но могу сказать что наши миры на такой конфигурации не могут быть размещены в RAM.
     
    Annabuilder нравится это.
  10. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Неверный расчёт. Так как уже писалось выше в линуксе не нужно задавать размер рам диска, да и самого как такового там нет понятия рам-диск - все это автоматически умеет делать стандартная файловая система, нужно только настроить. Так вот - там нет жестих 3-5-6 Гиг под каждый мир - есть фактически занимаемое место каждым миром и выделенная сервером оперативная память под нужды каждого мира - по его потребностям.
    Поэтому там расчет иной.
    А насчет того, что съедается память самим сервером - отец там оптимизировал что-то из этой оперы.
    То, что смотреть и куда копать - подчеркнуто.
    Приват - наверно стоит перенести на Ram-диск. Это значительно снизит проблемы лагов - они на привате присутствует, так как играю там регулярно.
     
  11. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Annabuilder, вы читаете то что хотите видеть или то что я пишу? Я вам ответственно заявляю, что наши миры (игровые серверы) в среднем УЖЕ занимают 4 гигабайта, а в сутки потребляют до 5 гигабайт РАМ. Если учитывать эти особенности, то никакой памяти не хватит на организацию хранения миров в ней. Еще раз подчеркиваю: это у нас и я не знаю как обстоят дела у вашего соседа, возможно его миры занимают меньше места, возможно он рестартит серверы чаще 1-го раза в сутки, я не знаю.
     
    Annabuilder нравится это.
  12. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Возможно вы тоже не видите того, что пишу я)) У вас "текут" серваки, раз выедают столько оперативы - обновите JDK и настройте выделение и очистку памяти - это делается в батнике запуска (дополнительно к тем циферкам по объёму использования оперативы, которую вы отдаёте серваку).
    Отец так сказал - "Игровые миры занимают 2-7 гигов - по разному. Если не настраивать выделение памяти и не использовать сборку мусора встроенную в JDK - то Java сожрет все, что есть и сдохнет. Встроенные сборщики мусора работают гораздо быстрей сейчас, чем даже ручное управление памятью. И линукс автоматически умеет вбивать в Swp (убирать из памяти и складывать на винт) мусор из оперативной памяти и тем самым работает приложение без снижения производительности. И серваки перезагружаются принудительно ежедневно по крону с 4 часов утра до 6 по очереди - в периоды наименьшего онлайна одновременно с контрольным полным бекапом сервера, который идет в "вечный" архив и не очищается в отличии от 15-ти минутных динамических бекапов".

    Вы не воспринимайте мои сообщения как критику или негатив - я же стараюсь сделать серверы ММ лучше)

    И прочитав сообщение моё отец попросил добавить: "Да и память оперативная в наше время стоит совсем не дорого и 128 гиг оперативы поставить на сервер - без проблем, для среднего и крупного донат-проекта.
    А процы современные поддерживают до 750 гиг оперативы в легкую, как раз серваки на ксеонах, которые они ставили в коллакейшен - с возможностью апгрейда в будущем до 128 гиг оперативы, так как стоят планки по 16 гиг и есть место куда вставить дополнительные, но пока не требуется - 64 гиг хватает по уши для 8-ми сокетов по 100 чел. Типа там уже упирается не в количество памяти а в частоту ядра проца серверного, так как серваки Java в основном однопоточные.
    Говорит, что скоро они перейдут на с++ серваки - там им немного осталось довести до ума, тогда можно будет снять ограничение на 100 чел на сокет".
     
  13. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Спасибо за советы[smile] И мнения как мне что лучше настроить [smile]
     
    Annabuilder нравится это.
  14. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Я всегда влезу, куда меня не просят, а отец потом отдувается))

    Но мне главное, чтобы ММ работал хорошо и процветал.
     
  15. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Кстати, еще момент, почему у нас нет рамдрайва. У вашего соседа, по вашим словам, стоит ксеон. Ксеон работает с ЕСС оперативкой. На наших топовых серверах не стоит ксеонов, и оперативка там хоть и одна из лучших моделей, но все же не ECC. Следовательно ошибки в работе памяти, а они 100% есть будут на нашей оперативке, будут кране негативно влиять на работу расположенных в ней миров, в плоть до полной невозможности восстановления их работоспособности и последующего поднятия миров из бэкапа. Напомню что на текущий момент у нас был всего 1 прецедент когда потребовалось восстанавливать мир из бэкапа.

    Более того, добавлю. При тестировании производительности сервера в рамдрайве и без него, крайним моментом быа не скорость записи/чтения SSD, а скорость обработки процессором всех этих данных. Так что выделение RAM под скорость чтения/запися является почти бессмысленной тратой ее (памяти) ресурса.
     
    Annabuilder нравится это.
  16. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Он сказал, что не будет никаких проблем у вас - там типа сам Ram-драйв умеет бороться с этими проблемами и все данные 100% верифицированы, помимо серваков на ксеонах там есть машины на высокочастотных Intel Core i7-4960X с обычной оперативкой, не регистровой и не ECC и не было никаких проблем. Типа смело ставьте - все будет в порядке и производительность игровых миров вырастет значительно. Единственно попросил акцентировать внимание на бекапах - мол если дата-центр ваш шалит и может отрубить питание на серваке - то мир откатится до последнего бекапа. Но это редкость, но тем не менее - пусть сам рам-драйв бекапит чаще, на производительности игрового процесса, это не сказывается.
     
  17. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Там узкое место вроде как в том, что если несколько серверов на 1 машине + система на том же винте, то считывание с нескольких мест одновременно ведет к падению скорости даже на SSD, особенно когда идет считывание координат для постоянного расчёта пути движения и обхода препятствий зверюшек - там идет потоком считывание и размещение в оперативной памяти для последующей передачи процессору для расчета - в случае с Ram-драйвом там исключаются из этой цепочки 2 пункта и тут как раз и повышение КПД + данные размещенные на Ram-драйве не попадают в кеш - не задействован и этот механизм.
    Есть много вариантов, когда использование Ram-драйва не дает выигрыша, в случае с майнкрафтом - выигрыш есть, почти такой же как с фотошопом - в 10-ки раз.

    Предлагаю попробовать и посмотреть - останутся ли почти ежедневные реплики игроков в чат сервера на привате о лагах.
     
    Pabloader нравится это.
  18. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    В части ОС скажу, что на всех наших системах она стоит на отдельном HDD и не касается работы SSD, на которых стоят сервера майнкрафта. В части попробовать, то безусловно попробуем в будущем, когда появятся такие возможности. Так что как я и говорил: спасибо за советы [smile]
     
    Wulwsten, Pabloader и Annabuilder нравится это.
  19. Filter

    Filter
    Администратор
    7.591
    5.191
    643
    Аналогичный код для ротации лог файла но для Linux like систем:
    Код:
    !/bin/bash
    Y=$(date +"%Y")
    M=$(date +"%m")
    D=$(date +"%d")
    H=$(date +"%H")
    Min=$(date +"%M")
    Sec=$(date +"%S")
    DATE=$Y-$M-$D
    TIME=$H-$Min-$Sec
    DATETIME="$DATE"_"$TIME"
    tar -cf ./logs/log_$DATETIME.tar server.log
    gzip ./logs/log_$DATETIME.tar
    rm server.log
    screen -dmS mcserver java -jar craftbukkit.jar 
    Немного поясню почему я решил сделать все именно так для знающих, а для незнающих объясню что тут вообще происходит.
    Код:
    Y=$(date +"%Y")
    Получаем год в формате 4 знаков, то есть на момент написания заметки "2014".
    Далее строки до 7 включительно это аналогичные действия для месяцев, дней, часов, минут и секунд. Такой код сделан умышленно что бы строками ниже можно было бы собрать нужный нам формат и переделывать его под конкретные необходимые нужды.

    Код:
    DATE=$Y-$M-$D
    TIME=$H-$Min-$Sec
    DATETIME="$DATE"_"$TIME"
    Собирают нужный формат времени и даты.

    Код:
    tar -cf ./logs/log_$DATETIME.tar server.log
    Собирает файл .tar в папке где хранятся логи.

    Код:
    gzip ./logs/log_$DATETIME.tar
    Сжимает полученный выше файл .tar

    Код:
    rm server.log
    Удаляет ставший не нужным server.log

    Код:
    screen -dmS mcserver java -jar craftbukkit.jar
    Достаточно загадочная для непосвященных строка, она запускает наш сервер майнкрафта в терминальном мультиплексоре screen (проще говоря менеджере терминалов) сразу "свернутым", для того что бы можно было в любой момент подключиться к нему и наблюдать за его работой при этом сохраняя независимость консоли, то есть позволяя совершать любые другие действия в OS (конечно это актуально только для работы без GUI, ведь известно что для реального сервера GUI не нужна). Для подключения к уже запущенному серверу майнкрафта можно использовать 2 команды screen -r (если вы следите за сервером в одиночку и никто не может и не перехватывает у вас "окно" терминала), и screen -x (если вы управляете сервером вдвоем и кто-то в это же время может наблюдать за ним). Конечно же screen должен стоять в системе, и если его нет, то обязательно установите. Для Debian это команда apt-get install screen.