Ускорение работы mysql за счёт TMPFS\RAMFS

Тема в разделе "Администрирование серверов", создана пользователем Nemo-tec, 20 сен 2013.

  1. Nemo-tec

    Nemo-tec

    Регистрация:
    4 апр 2013
    Сообщения:
    13
    Симпатии:
    27
    Итак, пока что опишу сумбурно. Завтра загляну и допишу. Если создал не там - простите, не нашел куда.
    Имеется "сервак" всё лежит на ноутбуке :'( следующей конфы:
    Для тех, кому интересно
    CPU: Intel Core2Duo T9400 @ 2.5 Ghz
    MainBoard: Intel PM45 Express
    RAM: 4 Гбайт DDR2 @ 800 Mhz
    HDD: WD 320 Гбайт @ 5400 об./мин
    Всё настроено по инструкции "Идеальный сервер - Ubuntu 12.04 [ISPConfig 3]"+ я поставил memcache, nginx, eaccelerator...
    Долгое время юзал memcache+nginx и был доволен, но сегодня в "заду" загорелось и решил поискать я что-то эдакое. Эдаким оказалась TMPFS. В кратце - это файловая система, целиком сидящая в RAM, отличия от RAMFS в том, что RAMFS может динамично увеличиваться, пока не "съест" всю память и не использует swap (если я всё правильно понял).
    Короче, заинтересовался я и начал рыть. Нашел вот этот пост. В нём меня дико заинтересовала фраза:
    Теперь вопрос:
    Как это всё настроить так, чтобы всё было прозрачно? То есть чтобы при создании сайта или базы в ISPconfig они ложились в TMPFS раздел, который бы монтировался при включении и сохранялся при выключении.
    Попробовал - получилось. Перенёс сайт на Opencart, но на глаз не сильно понял что же поменялось... Подумал, подумал и решил, что виновата база. Рискнул и перенёс всю папку /var/lib/mysql
    Итог - всё просто летает. Изменений в fstab не вносил, то есть при ребуте всё сотрётся и надо будет монтировать и переносить опять.
    Продолжая рыть нашел такой пост. В нём уже гораздо интересней, так как есть возможность:
    Теперь вопрос:
    Как это всё настроить так, чтобы всё было прозрачно? То есть чтобы при создании сайта или базы в ISPconfig
    они ложились в TmPFS раздел, который бы монтировался при включении и сохранялся при выключении.

    Я знаю что:
    1. У меня в есть около 1,5гб свободной оперативы.
    2. Есть /var/www
    3. Сайты, которые там лежат вместе с базами, спокойно уместятся в 1,5гб
    Ну что, попробуем?!

    И сразу ответ :Smile:

    MySQL в TMPFS
    Итак, только что у меня получилось завести MySQL в TMPFS. Я делал это на Ubuntu 13.04
    Всё делалось с помощью статей, приведённых в первом посте, и методом тыка. Так что любые дополнения и улучшения приветствуются.

    1. Первым делом создаём две директории: "mysql_tmp" - рабочая папка MySQL в TMPFS и "mysql_arch" - папка для сохранения на жестком диске.

    Код:
    mkdir /var/lib/mysql_tmp
    mkdir /var/lib/mysql_arch
    2. Далее назначаем владельца рабочей папки, и делаем её доступной для записи
    Код:
    chown mysql:mysql /var/lib/mysql_tmp/tmp/mysql_tmp
    chmod 777 -R /var/lib/mysql_tmp
    3. Копируем файлы из нынешней рабочей папки, в новую (TMPFS).
    Код:
    rsync -a /var/lib/mysql/ /var/lib/mysql_tmp/
    rsync -a /var/lib/mysql/ /var/lib/mysql_arch/
    4. Чтоб при включении перенести файлы из mysql_arch в mysql_tmp добавил в /etc/init.d/rc.local команду "rsync -a /var/lib/mysql_arch/ /var/lib/mysql_tmp/":
    Код:
    nano /etc/init.d/rc.local
    И допишите в конец файла
    Код:
    rsync -a /var/lib/mysql_arch/ /var/lib/mysql_tmp/
    5.Теперь нужно-же сохранять изменения в mysql_arch при выключении сервера.
    Тут немного сложнее. В /etc/init.d кидаем файлик такого содержания:
    Код:
    #!/bin/sh
    rsync -a /var/lib/mysql_tmp/ /var/lib/mysql_arch/
    exit 0
    Обзываем S00ramdisk-sync-shutdown и ставим права на выполнение.
    Код:
    nano /etc/init.d/ramdisk-sync-shutdown
    #Вставляем содержимое
    chmod 7777 /etc/init.d/S00ramdisk-sync-shutdown
    Теперь в папку /etc/rc0.d и /etc/rc6.d делаем символические ссылки с нашего файла: S00ramdisk-sync-shutdown.
    Код:
    ln -s /etc/init.d/S00ramdisk-sync-shutdown /etc/rc0.d
    ln -s /etc/init.d/S00ramdisk-sync-shutdown /etc/rc6.d
    Все, теперь при выключении или перезагрузке содержимое нашего TMPFS будет сохранено на HDD в mysql_arch.

    6. Ну и на последок не забываем про форсмажор - добавим задание в cron, чтобы копирование происходило каждых 20 минут.
    Код:
    crontab -e
    и в конец файла вставить:
    Код:
    */20 * * * * rsync -a /var/lib/mysql_tmp/ /var/lib/mysql_tmp_arch/
    7. Теперь осталось добавить монтирование в fstab
    Код:
    nano /etc/fstab
    Добавить в конец
    Код:
    tmpfs /var/lib/mysql_tmp tmpfs size=1024m 0 0
    8. Теперь окончательно - поменяйте рабочий путь в файле конфигурации MySQL my.cnf
    Код:
    nano /etc/mysql/my.cnf
    В секции "datadir = /var/lib/mysql_tmp"

    Итак, вроде бы всё работает. Пока так и не понял насколько помогло - только обновил сервер, сайты ещё не перенёс, поэтому пока сказать не могу.
    Если вдруг после ребута mysql откажется запускаться - попробуйте дать права на папку повторно.
    Код:
    chown mysql:mysql /var/lib/mysql_tmp/
    chmod 777 -R /var/lib/mysql_tmp