Почему нельзя использовать RAID 5 для сервера базы данных
SYSDBA (обсуждение | вклад) (→Как работает RAID 5?) |
SYSDBA (обсуждение | вклад) (→Ссылки по теме) |
||
(не показаны 8 промежуточных версий 1 участника) | |||
Строка 16: | Строка 16: | ||
− | Минимальный объем информации, который контроллер считывает или записывает на один диск, называется стрипом (strip). В параметрах большинства контроллеров, с которыми нам приходилось сталкиваться, указывается не размер стрипа, а размер страйпа (stripe) – блока информации, который распределяется на все диски массива. На рисунке ниже один страйп выделен более темным цветом: | + | Минимальный объем информации, который контроллер считывает или записывает на один диск, называется '''стрипом''' (strip). В параметрах большинства контроллеров, с которыми нам приходилось сталкиваться, указывается не размер стрипа, а размер '''страйпа''' (stripe) – блока информации, который распределяется на все диски массива. На рисунке ниже один страйп выделен более темным цветом: |
+ | |||
+ | http://gsbelarus.com/gs/images/gs/2008/raid5_2.png | ||
+ | |||
+ | |||
Размер страйпа равен размеру стрипа помноженного на количество дисков в массиве. Т.е. в случае с четырьмя дисками и размером страйпа 64К, минимальное количество информации, которое контроллер способен записать или считать с диска, равняется 64 / 4 = 16К. | Размер страйпа равен размеру стрипа помноженного на количество дисков в массиве. Т.е. в случае с четырьмя дисками и размером страйпа 64К, минимальное количество информации, которое контроллер способен записать или считать с диска, равняется 64 / 4 = 16К. | ||
Строка 26: | Строка 30: | ||
Благодаря транзитивности операции xor в случае выхода из строя одного из дисков с полезной информацией её можно восстановить xor-ированием данных оставшихся дисков, включая диск с контрольной суммой. Например, вышел из строя диск B. | Благодаря транзитивности операции xor в случае выхода из строя одного из дисков с полезной информацией её можно восстановить xor-ированием данных оставшихся дисков, включая диск с контрольной суммой. Например, вышел из строя диск B. | ||
+ | |||
+ | http://gsbelarus.com/gs/images/gs/2008/raid5_3.png | ||
+ | |||
+ | |||
При запросе блока информации с диска B контроллер восстановит его по формуле: | При запросе блока информации с диска B контроллер восстановит его по формуле: | ||
B = A xor C xor D | B = A xor C xor D | ||
− | Сервер Firebird обменивается с дисковой подсистемой страницами данных. Оптимальный размер страницы 8К, что намного меньше размера страйпа и в большинстве случаев даже меньше чем размер стрипа. Ситуации, когда на диск записываются последовательно расположенные страницы, также достаточно редки. Таким образом, если в нашем примере происходит запись информации на диск А, то контроллеру придется выполнить следующие операции: | + | Сервер Firebird обменивается с дисковой подсистемой страницами данных. Оптимальный размер страницы в большинстве случаев составляет 8К, что намного меньше размера страйпа и в большинстве случаев даже меньше чем размер стрипа. Ситуации, когда на диск записываются последовательно расположенные страницы, также достаточно редки. Таким образом, если в нашем примере происходит запись информации на диск А, то контроллеру придется выполнить следующие операции: |
# Прочитать данные стрипов с дисков B и C. Две операции чтения. | # Прочитать данные стрипов с дисков B и C. Две операции чтения. | ||
Строка 36: | Строка 44: | ||
# Запись информацию на диск A и контрольную сумму на диск D. Две операции записи. | # Запись информацию на диск A и контрольную сумму на диск D. Две операции записи. | ||
− | Итого, два чтения, две записи и две операции xor. Было бы удивительно, если бы при таком объеме работы, общая производительность не падала. Теперь становится очевидным почему RAID 5 не подходит для размещения файла базы данных. | + | '''Итого, два чтения, две записи и две операции xor. Было бы удивительно, если бы при таком объеме работы, общая производительность не падала. Теперь становится очевидным почему RAID 5 не подходит для размещения файла базы данных.''' |
− | Важной особенностью RAID 5 является существенное падение производительности при выходе из строя одного из дисков в массиве. Ведь теперь, для восстановления информации с этого диска, необходимо считать и перексорировать данные со всех остальных дисков. | + | Важной особенностью RAID 5 является '''существенное падение производительности''' при выходе из строя одного из дисков в массиве. Ведь теперь, для восстановления информации с этого диска, необходимо считать и перексорировать данные со всех остальных дисков. |
Впрочем, как и у любого правила, у нашего — тоже есть свое исключение. Производительность дискового массива RAID 5 не будет снижаться, если размер энергонезависимой кэш памяти контроллера сопоставим с размером файла базы данных. Например, при размере кэш памяти в 512 Мб вполне можно использовать RAID массив пятого уровня для баз до 1-1,5 Гб. При условии, что сервер выделен только для работы с базой данных и не выполняет других задач. | Впрочем, как и у любого правила, у нашего — тоже есть свое исключение. Производительность дискового массива RAID 5 не будет снижаться, если размер энергонезависимой кэш памяти контроллера сопоставим с размером файла базы данных. Например, при размере кэш памяти в 512 Мб вполне можно использовать RAID массив пятого уровня для баз до 1-1,5 Гб. При условии, что сервер выделен только для работы с базой данных и не выполняет других задач. | ||
+ | |||
+ | Стоит заметить, что приведенная выше схема работы RAID 5 из методических соображений '''серьезно упрощена'''. В реальности контроллер распределяет страйпы циклически по всем дискам массива, так что выделенного диска для хранения контрольных сумм нет. Все диски хранят и данные и контрольные суммы разных страйпов, что позволяет выровнять приходящуюся на них нагрузку. | ||
== Какой уровень RAID выбрать? == | == Какой уровень RAID выбрать? == | ||
Если RAID 5 не подходит, то какой уровень выбрать для размещения файла базы данных? При количестве дисков меньше четырех единственным вариантом является зеркало (mirror) – RAID 1. Если в массиве от четырех дисков и больше, то оптимальным с точки зрения производительности и надежности является RAID 10 – объединение (RAID 0) нескольких зеркал (RAID 1). Иногда можно встретить написание как RAID 1+0. На рисунке ниже представлен массив RAID 10 из четырех дисков. Темным тоном выделены данные одного страйпа. Штриховка показывает дубликат этого страйпа. | Если RAID 5 не подходит, то какой уровень выбрать для размещения файла базы данных? При количестве дисков меньше четырех единственным вариантом является зеркало (mirror) – RAID 1. Если в массиве от четырех дисков и больше, то оптимальным с точки зрения производительности и надежности является RAID 10 – объединение (RAID 0) нескольких зеркал (RAID 1). Иногда можно встретить написание как RAID 1+0. На рисунке ниже представлен массив RAID 10 из четырех дисков. Темным тоном выделены данные одного страйпа. Штриховка показывает дубликат этого страйпа. | ||
+ | |||
+ | |||
+ | http://gsbelarus.com/gs/images/gs/2008/raid5_4.png | ||
+ | |||
Отметим так же, что если массив RAID 5 способен пережить потерю только одного диска, то RAID 10 из m зеркал по два диска выживет в случае потери от одного до m дисков, при условии, что откажут не более чем по одному диску в каждом зеркале. | Отметим так же, что если массив RAID 5 способен пережить потерю только одного диска, то RAID 10 из m зеркал по два диска выживет в случае потери от одного до m дисков, при условии, что откажут не более чем по одному диску в каждом зеркале. | ||
Попробуем количественно сравнить массивы RAID 5 и RAID 10, в каждом из которых n дисков. n кратно двум. Примем размер читаемого/записываемого блока данных равным размеру стрипа. В таблице ниже приведено необходимое количество операций чтения/записи и xor-ирования данных. | Попробуем количественно сравнить массивы RAID 5 и RAID 10, в каждом из которых n дисков. n кратно двум. Примем размер читаемого/записываемого блока данных равным размеру стрипа. В таблице ниже приведено необходимое количество операций чтения/записи и xor-ирования данных. | ||
+ | |||
+ | |||
+ | http://gsbelarus.com/gs/images/gs/2008/raid5_5.png | ||
+ | |||
Хорошо видно, что массив RAID 10 имеет не только более высокую производительность при записи, но и не допускает общего снижения производительности при выходе из строя одного диска. | Хорошо видно, что массив RAID 10 имеет не только более высокую производительность при записи, но и не допускает общего снижения производительности при выходе из строя одного диска. | ||
Строка 56: | Строка 74: | ||
Чем больше – тем лучше. Главное, чтобы контроллер имел батарейку (аккумулятор) для сохранения содержимого памяти при аварийном отключении питания. Во многих контроллерах батарейка не входит в стандартную поставку и ее необходимо заказывать отдельно. Без батарейки кэш на запись будет отключен. | Чем больше – тем лучше. Главное, чтобы контроллер имел батарейку (аккумулятор) для сохранения содержимого памяти при аварийном отключении питания. Во многих контроллерах батарейка не входит в стандартную поставку и ее необходимо заказывать отдельно. Без батарейки кэш на запись будет отключен. | ||
=== Уровень RAID === | === Уровень RAID === | ||
− | RAID 10. Почему? Читайте статью с самого начала. | + | RAID 10. Если количество дисков меньше четырех, то RAID 1 (зеркало). Почему? Читайте статью с самого начала. |
+ | |||
=== Размер страйпа === | === Размер страйпа === | ||
Размер страницы базы данных умноженный на количество зеркал в массиве. Например, если в массиве 8 дисков, объединенных в четыре зеркала по два диска, а размер страницы базы данных равен 8К, то размер страйпа следует выставить в 8 * 4 = 32К. | Размер страницы базы данных умноженный на количество зеркал в массиве. Например, если в массиве 8 дисков, объединенных в четыре зеркала по два диска, а размер страницы базы данных равен 8К, то размер страйпа следует выставить в 8 * 4 = 32К. | ||
Строка 65: | Строка 84: | ||
=== Резервный (spare) диск === | === Резервный (spare) диск === | ||
Если возможности контроллера позволяют, то рекомендуется включить в массив резервный диск. Такой диск в обычном режиме работы пребывает в состоянии stand by. В случае выхода из строя одного из рабочих винчестеров, резервный диск автоматически добавляется в массив. | Если возможности контроллера позволяют, то рекомендуется включить в массив резервный диск. Такой диск в обычном режиме работы пребывает в состоянии stand by. В случае выхода из строя одного из рабочих винчестеров, резервный диск автоматически добавляется в массив. | ||
+ | |||
+ | == Ссылки по теме == | ||
+ | |||
+ | * [http://ru.wikipedia.org/wiki/RAID RAID] | ||
+ | * [http://www.miracleas.com/BAARF/BAARF2.html BAARF] | ||
+ | |||
+ | [[Category:Школа системного администратора]] |
Текущая версия на 16:16, 11 января 2012
Мы столкнулись с такой проблемой, что большинство серверов, приобретаемых пользователями наших программ, поставляются с дисковым массивом, сконфигурированным в уровень RAID 5. Впоследствии системные администраторы не хотят тратить время на переконфигурирование, или просто боятся что-то менять в уже настроенном и работающем компьютере. В результате производительность работы с базой данных, установленной на такой сервер, оказывается меньше, чем была на старом, который проработал на предприятии 3-4 года. Наверное, стремление поставщиков сконфигурировать дисковый массив именно в RAID пятого уровня можно объяснить желанием удивить клиента огромным размером дискового пространства. Сисадмины, в свою очередь, часто просто не обладают достаточными знаниями о том как работает RAID массив того или иного уровня. Цель данной статьи дать ответы на два вопроса:
Почему нельзя использовать RAID 5 для сервера базы данных?
и
Как оптимальным образом сконфигурировать RAID контроллер для размещения базы данных сервера Firebird?
Сразу оговоримся, что выводы, сделанные в данной статье, не относятся к тем редким случаям, когда база данных используется исключительно (или в основном) только для чтения.
Содержание |
[править] Как работает RAID 5?
Рассмотрим упрощенную схему работы массива из четырех дисков. Один из дисков выделяется для хранения контрольной суммы. Три – доступны для размещения данных. На рисунке ниже, диски с полезной информацией названы A, B и C. Диск D хранит контрольные суммы.
Минимальный объем информации, который контроллер считывает или записывает на один диск, называется стрипом (strip). В параметрах большинства контроллеров, с которыми нам приходилось сталкиваться, указывается не размер стрипа, а размер страйпа (stripe) – блока информации, который распределяется на все диски массива. На рисунке ниже один страйп выделен более темным цветом:
Размер страйпа равен размеру стрипа помноженного на количество дисков в массиве. Т.е. в случае с четырьмя дисками и размером страйпа 64К, минимальное количество информации, которое контроллер способен записать или считать с диска, равняется 64 / 4 = 16К.
Контрольная сумма, которая попадает на диск D, рассчитывается по следующей формуле:
D = A xor B xor C
Благодаря транзитивности операции xor в случае выхода из строя одного из дисков с полезной информацией её можно восстановить xor-ированием данных оставшихся дисков, включая диск с контрольной суммой. Например, вышел из строя диск B.
При запросе блока информации с диска B контроллер восстановит его по формуле:
B = A xor C xor D
Сервер Firebird обменивается с дисковой подсистемой страницами данных. Оптимальный размер страницы в большинстве случаев составляет 8К, что намного меньше размера страйпа и в большинстве случаев даже меньше чем размер стрипа. Ситуации, когда на диск записываются последовательно расположенные страницы, также достаточно редки. Таким образом, если в нашем примере происходит запись информации на диск А, то контроллеру придется выполнить следующие операции:
- Прочитать данные стрипов с дисков B и C. Две операции чтения.
- Рассчитать новую контрольную сумму. Две операции xor.
- Запись информацию на диск A и контрольную сумму на диск D. Две операции записи.
Итого, два чтения, две записи и две операции xor. Было бы удивительно, если бы при таком объеме работы, общая производительность не падала. Теперь становится очевидным почему RAID 5 не подходит для размещения файла базы данных.
Важной особенностью RAID 5 является существенное падение производительности при выходе из строя одного из дисков в массиве. Ведь теперь, для восстановления информации с этого диска, необходимо считать и перексорировать данные со всех остальных дисков.
Впрочем, как и у любого правила, у нашего — тоже есть свое исключение. Производительность дискового массива RAID 5 не будет снижаться, если размер энергонезависимой кэш памяти контроллера сопоставим с размером файла базы данных. Например, при размере кэш памяти в 512 Мб вполне можно использовать RAID массив пятого уровня для баз до 1-1,5 Гб. При условии, что сервер выделен только для работы с базой данных и не выполняет других задач.
Стоит заметить, что приведенная выше схема работы RAID 5 из методических соображений серьезно упрощена. В реальности контроллер распределяет страйпы циклически по всем дискам массива, так что выделенного диска для хранения контрольных сумм нет. Все диски хранят и данные и контрольные суммы разных страйпов, что позволяет выровнять приходящуюся на них нагрузку.
[править] Какой уровень RAID выбрать?
Если RAID 5 не подходит, то какой уровень выбрать для размещения файла базы данных? При количестве дисков меньше четырех единственным вариантом является зеркало (mirror) – RAID 1. Если в массиве от четырех дисков и больше, то оптимальным с точки зрения производительности и надежности является RAID 10 – объединение (RAID 0) нескольких зеркал (RAID 1). Иногда можно встретить написание как RAID 1+0. На рисунке ниже представлен массив RAID 10 из четырех дисков. Темным тоном выделены данные одного страйпа. Штриховка показывает дубликат этого страйпа.
Отметим так же, что если массив RAID 5 способен пережить потерю только одного диска, то RAID 10 из m зеркал по два диска выживет в случае потери от одного до m дисков, при условии, что откажут не более чем по одному диску в каждом зеркале.
Попробуем количественно сравнить массивы RAID 5 и RAID 10, в каждом из которых n дисков. n кратно двум. Примем размер читаемого/записываемого блока данных равным размеру стрипа. В таблице ниже приведено необходимое количество операций чтения/записи и xor-ирования данных.
Хорошо видно, что массив RAID 10 имеет не только более высокую производительность при записи, но и не допускает общего снижения производительности при выходе из строя одного диска.
[править] Как настроить RAID контроллер?
Ниже приведены рекомендации по настройке массива RAID для размещения базы данных сервера Firebird.
[править] Размер кэш памяти
Чем больше – тем лучше. Главное, чтобы контроллер имел батарейку (аккумулятор) для сохранения содержимого памяти при аварийном отключении питания. Во многих контроллерах батарейка не входит в стандартную поставку и ее необходимо заказывать отдельно. Без батарейки кэш на запись будет отключен.
[править] Уровень RAID
RAID 10. Если количество дисков меньше четырех, то RAID 1 (зеркало). Почему? Читайте статью с самого начала.
[править] Размер страйпа
Размер страницы базы данных умноженный на количество зеркал в массиве. Например, если в массиве 8 дисков, объединенных в четыре зеркала по два диска, а размер страницы базы данных равен 8К, то размер страйпа следует выставить в 8 * 4 = 32К.
[править] Упреждающее чтение
Так как последовательное обращение к страницам базы данных весьма редко, да и сами они в результате фрагментации могут находиться в разных местах диска, упреждающее чтение следует отключить, или использовать режим adaptive (упреждающее чтение в случае последовательного обращения к двум подряд идущим страницам).
[править] Политика кэша на запись
Выбрать режим write back. Данные будут помещаться в кэш, а потом записываться на диск. Операция записи будет считаться завершенной сразу же после помещения данных в кэш.
[править] Резервный (spare) диск
Если возможности контроллера позволяют, то рекомендуется включить в массив резервный диск. Такой диск в обычном режиме работы пребывает в состоянии stand by. В случае выхода из строя одного из рабочих винчестеров, резервный диск автоматически добавляется в массив.