MySQL на ZFS под FreeBSD: подготовка

Итак, что есть на руках:

# uname -rm
8.0-RELEASE amd64
# atacontrol list
ATA channel 2:
    Master:  ad4 ST3500320NS/SN06 SATA revision 1.x
    Slave:       no device present
ATA channel 3:
    Master:  ad6 ST3500320NS/SN06 SATA revision 1.x
    Slave:       no device present
# zpool status
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad4s1d  ONLINE       0     0     0
            ad6s1d  ONLINE       0     0     0

errors: No known data errors

Имеем мы 64 битную FreeBSD 8-й ветки, релиз которой состоялся совсем недавно Операционная система установлена на ZFS зеркале из двух SATA жестких дисков. FreeBSD ZFS Tuning Guide рекомендует именно такие версии софта для наиболее стабильной работы. Для начала создадим в уже имеющемся ZFS пуле с названием tank файловые системы, которые мы будем использовать для хранения данных Не забыв при этом остановить сервер MySQL и сделать бэкап директории с данными.

zfs create tank/mysql
zfs set atime=off tank/mysql
zfs set mountpoint=/var/db/mysql tank/mysql

zfs create tank/mysql/ibdata
zfs set recordsize=16k tank/mysql/ibdata

zfs create tank/mysql/iblogs
zfs set recordsize=128k tank/mysql/iblogs

Глобально выключаем atime для всех файлов MySQL, указываем различные размеры блоков записи для файлов данных и журналов innodb.За размещение файлов данных и логов в нужном месте будут отвечать следующие директивы файла my.cnf:

[mysqld]
innodb_data_home_dir=/var/db/mysql/ibdata
innodb_log_group_home_dir=/var/db/mysql/iblogs

Проверим, что хранилище смонтировалось:

# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
tank               1.87G   451G    18K  none
tank/mysql         1018K   451G   982K  /var/db/mysql
tank/mysql/ibdata  18.5K   451G  18.5K  /var/db/mysql/ibdata
tank/mysql/iblogs  18.5K   451G  18.5K  /var/db/mysql/iblogs

Проведем тестирование хранилища с помощью bonnie++

# bonnie++ -d /var/db/mysql -u mysql -s 20g:128k

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine   Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
testserver 20G:128k    81  99 89670   5 37368   5   231  99 64592   7 132.2   6
Latency              2187ms    4782ms    5459ms     565ms   56235us     930ms

# bonnie++ -d /var/db/mysql/ibdata -u mysql -s 20g:16k

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine   Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
testserver 20G:16k    68  99 69055  16 32324   6   220  99 64062   6 137.3  11
Latency               232ms   10037ms   11570ms   87897us    1165ms    1243ms

Тестирование показывает, что innodb сможет писать в файл данных со скоростью в 64 мегабайта в секунду, что весьма неплохо.

Теперь можно скопировать данные из бэкапа в хранилище ZFS, не забыв переместить файлы ib_logfile и ibdata в соответствующие поддиректории хранилища. После этого можно запускать сервер.

Список используемой литературы:
MySQL Innodb ZFS Best Practices
ZFS Evil Tuning Guide
ZFS For Databases
FreeBSD ZFS Tuning Guide

См. также: Тюнинг ZFS, MySQL и InnoDB

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *