Туториал Делаем RAMdisk для сервера [Update-03.09.2012]

  • Автор темы Автор темы Mr. Sota
  • Дата начала Дата начала

Mr. Sota

Старожил
Пользователь
Баллы
123
Здравствуйте!
У меня на днях появилась проблема с зависанием сервера и лагами, с падением тиков ниже 10.
В случаи покупки VDS у меня делаю рамдиск для вас бесплатно!
Частично проблема была решена переносом карты и плагинов на рамдиск. Вот именно про это действие я и раскажу.
Что требуется:
- VPS/VDS/DS на Linux
- Больше 4гб RAM
- Cron
Что получим:
- Уменьшение(а может и вообще пропажа) лагов
Риски:
- Потеря карты и/или плагинов на время до 5 минут.

И так приступим.

Скажем наш сервер лежит в директории /GreenTech125/. А мир называется GreenTech.
Тогда мы создаем два баш скрипта - sync.sh и start.sh.
Код:
#start.sh
#!/bin/sh
MAIN_DIR_V="/dev/shm/gt125"
MAIN_DIR_P="/GreenTech125"
WORLD_VOLATILE_1="$MAIN_DIR_V/GreenTech/"
WORLD_PERM_1="$MAIN_DIR_P/perm_GreenTech/"
WORLD_VOLATILE_2="$MAIN_DIR_V/plugins/"
WORLD_PERM_2="$MAIN_DIR_P/perm_plugins"
touch $MAIN_DIR_P/restore.lock
if [ ! -d $MAIN_DIR_V ]; then
echo "Recreating directories\n"
mkdir $MAIN_DIR_V
echo "Done... !\n"
echo "Restoring Maps... !\n"
rsync -r -t -v "$WORLD_PERM_1" "$WORLD_VOLATILE_1"
rsync -r -t -v "$WORLD_PERM_2" "$WORLD_VOLATILE_2"
echo "Done... !\n"
echo "Removing LOCK file, syncng will continue as scheduled"
rm -f  $MAIN_DIR_P/restore.lock
fi
Код:
#sync.sh
#!/bin/sh
MAIN_DIR_V="/dev/shm/gt125"
MAIN_DIR_P="/GreenTech125"
WORLD_VOLATILE_1="$MAIN_DIR_V/GreenTech/"
WORLD_PERM_1="$MAIN_DIR_P/perm_GreenTech/"
WORLD_VOLATILE_2="$MAIN_DIR_V/plugins/"
WORLD_PERM_2="$MAIN_DIR_P/perm_plugins"
if [ -d $MAIN_DIR_V ] && [ ! -e  $MAIN_DIR_P/restore.lock ]; then
rsync -r -t -v "$WORLD_VOLATILE_1" "$WORLD_PERM_1"
rsync -r -t -v "$WORLD_VOLATILE_2" "$WORLD_PERM_2"
echo "Sync done!"
else
echo "Sync error!"
fi

Как видим скрипты используют папки "perm_GreenTech" и "perm_plugins". Давайте создадим их:
Код:
cd /GreenTech125
mkdir perm_GreenTech
mkdir perm_plugins
Теперь нужно поместить наш мир и плагины в эти директории. Они используются для постоянного хранения мира и плагинов соответственно.
Теперь переместим в эти директории наши файлы:
Код:
mv /GreenTech125/GreenTech /GreenTech125/perm_GreenTech
mv /GreenTech125/plugins /GreenTech125/perm_plugins

Теперь добавим sync.sh в cron:
Код:
crontab -e
В кроне вводим "*/5 * * * * sh /GreenTech/sync.sh"
Не забудьте дать права на выполнение. Например 775

Теперь создадим ссылки на новые директории:
Код:
ln -s /dev/shm/gt125/GreenTech .
ln -s /dev/shm/gt125/plugins/perm_plugins/plugins .
На этом все.
Вам осталось только выполнить файл start.sh и после каждой перезагрузки вашего VPS/VDS/DS тоже нужно будет его выполнить, а потом запускать сервер как обычно.

Команда GreenTech и лично я желаю вам успехов в этом деле!
P.S. Не забывайте следить за "весом" карты и плагинов, чтобы было достаточно РАМы для самого сервера
P.P.S. Делалось на сервере под управлением CentOS 6.2 64bit. i7-3960K, 64GB RAM(1333MHz)
P.P.P.S. Не забудьте перед выключением VDS/DS запустить sync.sh

UPD.09.08.2012: Можно добавить в крон строку "@reboot sh /GreenTech/start.sh" и тогда не нужно будет каждый раз после выключения его выполнять вручную.
UPD.03.09.2012: Сравнение скорости:
Код:
[root@GreenTech shm]# time dd if=/dev/shm/myfile.zero of=/dev/shm/myfile2.zero bs=64k count=4096000
165966+0 записей считано
165966+0 записей написано
скопировано 10876747776 байт (11 GB), 5,03276 c, 2,2 GB/c
 
real    0m5.346s
user    0m0.018s
sys    0m5.324s
Код:
[root@GreenTech shm]# time dd if=/dev/shm/myfile.zero of=/dev/shm/myfile2.zero bs=16k count=409600
210813+1 записей считано
210813+1 записей написано
скопировано 3453964288 байт (3,5 GB), 1,7396 c, 2,0 GB/c
 
real 0m1.741s
user 0m0.019s
sys 0m1.722s
Как видите скорость 2 и 2.2ГБ, именно гигабайта, а не бита, т.е. 16 и 17.6Гб/с.
Код:
[root@GreenTech shm]# time dd if=/dev/shm/myfile.zero of=/myfile2.zero bs=64k count=4096000
161999+0 записей считано
161999+0 записей написано
скопировано 10616766464 байта (11 GB), 56,2528 c, 189 MB/c
 
 
real    0m56.502s
user    0m0.043s
sys    0m7.686s
Код:
[root@GreenTech shm]# time dd if=/myfile2.zero of=/dev/shmmyfile2.zero bs=64k count=4096000
161999+0 записей считано
161999+0 записей написано
скопировано 10616766464 байта (11 GB), 41,0642 c, 259 MB/c
 
real 0m51.288s
user 0m0.020s
sys 0m7.279s
 
В кроне вводим "*/5 * * * * sh /МояПапка/sync.sh"

У меня выдает:
485f9628ba60f65cacd46f6146e12497.png
 
Я вводил без кавычек, сейчас попробую
 
Вопрос, после этого карта будет лежать все время в другой папке. тобишь надо в конфигах поменять названия мира под папку?
 
Попробуйте не crontab -u USERNAME -e
USERNAME замените на того юзера под которым вы сидите, я так думаю что это root
P.S. я надеюсь вы вводите без символов "
отучаться нужно сидеть под рутом. дел натворить можно. я больше как уверен, что тут сидят новички со знанием основы, дай бог
 
rm -r -rf /bin

НЕ ВВОДИТЕ ЭТО! ИНАЧЕ СЕРВЕР НЕ УВИДИТЕ!:trf:
 
Не буду спорить с человеком, благодаря которому я сижу с макбука стоимостью 1.6к $
 
А если нужно будет изменить какойто конфиг плагина то куда нужно будет лезть?
 
Очень даже интересно... надо будет как-нибудь попробывать :) лови лайк ;)
 
У меня проблема такая же как у:
В кроне вводим "*/5 * * * * sh /МояПапка/sync.sh"

У меня выдает:
485f9628ba60f65cacd46f6146e12497.png
Пробовал делать и так:
Попробуйте не crontab -u USERNAME -e
USERNAME замените на того юзера под которым вы сидите, я так думаю что это root
P.S. я надеюсь вы вводите без символов "
Результат такой же... + если можно объясните более доходчиво, как запускать это все дело после добавления крона. В какой последовательности, и пр.
 
OS, разрядность её, от какого юзера запускаете сервера, от кого редактируете кронтаб? Что вводите(буква в букву)?
CentOS 6.0 x64, пробую от root чтобы исключить возможность недостатка прав.

Ввожу:
crontab -e (пробовал еще crontab -u root -e)

Выводится список, куда вставляю строку:
*/5 * * * * sh /world/sync.sh (через шифт+инсерт)
После чего жму экнтер, и ошибка.

Может я не правильно крон добавляю? Я не сильно разбираюсь в unix системах:(
 
Тока вот интересно .. простой юзер разве может в хронтаб прописать какойнибуть таск? Или это моя паранойя так работает , что все ограничено).....
 
Тока вот интересно .. простой юзер разве может в хронтаб прописать какойнибуть таск? Или это моя паранойя так работает , что все ограничено).....
Это не майн.)
pex user Foxi add crontab.create.self
:D
 
А при чём тут майн? Короче лижбы ляпнуть , не понимая о чём говориш.
 
Вобшем хорошо работает. Спасибо за идею)
Добавил ешё кеш от анти X-ray
 
Назад
Верх