Дата последнего изменения: 23.09.2021
Если вы периодически наблюдаете близкую к 100% утилизацию диска в iostat, то пришло время задуматься над тем, правильно ли вы выбрали дисковую систему.
Самое, как кажется, очевидное решение: надо использовать более быстрые диски - SSD. Но требуется поддержка SSD в серверах (контроллер, драйверы) и это довольно дорого.
Другой подход - использовать не один, а несколько дисков: RAID.
Для высоконагруженных проектов актуальны, прежде всего software RAID, так как такие проекты, как правило, размещаются в облачных структурах. Поэтому предложим методики тестирования для определения конфигурации RAID подходящей для вашего проекта.
Пример тестирования проведём на работе с RAID 10. Именно он одновременно и быстрый, и надежный. А, вот, различных его конфигураций - достаточно много.
Собрано 5 стендов:
# mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/xvd[g-j]
# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/xvd[g-h] # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/xvd[i-j] # mdadm --create /dev/md2 --level=0 --raid-devices=2 /dev/md[0-1]
# mdadm --create /dev/md0 --level=10 --raid-devices=8 /dev/xvd[g-n]
# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/xvd[g-h] # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/xvd[i-j] # mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/xvd[k-l] # mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/xvd[m-n] # mdadm --create /dev/md4 --level=0 --raid-devices=4 /dev/md[0-3]
На всех тестовых стендах используйте однотипную файловую систему, например: ext4. Параметры монтирования:
noatime,nodiratime,data=writeback,barrier=0
Для тестов лучше использовать sysbench - на файле 256 Мб; режимы - random read, random write, random read/write; разным количеством потоков, от 1 до 16.
По тестам видно, что в чтении все сопоставимо по результатам. Рейд не дает особого преимущества. Но картинка эта - весьма искаженная, так как на результаты очень сильно повлиял файловый кэш (тестовый файл помещается в RAM целиком). По записи рейды несколько проигрывают (сказываются некоторые накладные расходы).
Чтобы определить, какая дисковая система лучше в конкретно вашем случае, необходимо чётко поставить задачу. В нашем случае выбирается дисковая система для базы. Формат хранения данных: InnoDB. Это означает, что работа в основном ожидается с большими файлами (несколько Гб) ibdata.
Значит, типичный профиль нагрузки - random read/write (чтений больше). И вот уже исходя из более понятной реальной задачи делаем новую серию тестов - на файле размером 16 Гб:
Видно, что при чтении один диск сразу упирается в потолок, и увеличение количества потоков не дает прироста производительности. А рейды из 4 дисков на нескольких потоках дают прирост производительности в 3-4 раза. Рейды из 8 дисков — в 6-7 раз.
На запись у рейдов примерно та же картина, что и с одним диском.
Типичная работа базы MySQL - random read/write, чтений больше, чем записи. Самые производительные для такой задачи: RAID 10 с большим количеством дисков.
Минус такого решения - в удвоенной стоимости дисков (что при текущей их стоимости не является критичным).
Главное преимущество - у нас есть простое решение (software RAID можно собрать как на физическом сервере, так и в "облаке") для масштабирования производительности дисковой системы.