Содержание


Большое, быстрое, стабильное и недорогое хранилище данных

Создание и поддержка быстрого сервера хранения данных при помощи ZFS и RAID-Z

Comments

Введение в ZFS и RAID-Z

ZFS –одна из самых совершенных из существующих сегодня файловых систем. Ее название – это аббревиатура от словосочетания zettabyte file system (зетабайтная файловая система), которое прямо указывает на ее возможности по хранению данных: до 256 квадриллионов зетабайт (один зетабайт равен 1 073 741 824 терабайт!).

Этот уникальный и мощный инструмент имеет множество граней. Мы сконцентрируемся на аспектах, относящихся к созданию масштабируемого резервируемого сервера хранения данных. Такая система создается на основе технологии RAID-Z, которая, как видно из названия, является аналогом технологии RAID (точнее, RAID-5).

Тех, кто знаком с технологией RAID, вероятно заинтересует вопрос, какое устройство (или контроллер) управляет дисками и данными. В RAID-Z все делает сама файловая система. При этом, в отличие от аналогичных технологий, она самостоятельно восстанавливает поврежденные блоки и исправляет их на лету без вмешательства пользователя. RAID-Z постоянно проверяет контрольные суммы данных для поддержания их целостности и может идентифицировать блоки, требующие перекомпоновки. Это делается до того, как запрашиваемые данные попадают к пользователю.

Существует целый ряд операционных систем, поддерживающих и RAID-Z, и ZFS, поэтому выбор конкретной ОС остается за вами. Большинство примеров и методик, обсуждаемых в данной статье, должны работать корректно независимо от ОС.

Конструкция системы хранения

Сколько дискового пространства необходимо в данный момент? Сколько понадобится в течение года? Сколько жестких дисков нужно для данной конфигурации? На эти вопросы нужно ответить до начала работы. Для оптимальной подготовки рассмотрим подробно все конструктивные решения.

Операционная система

Настоятельно рекомендуется взять операционную систему со встроенной поддержкой файловой системы ZFS, чтобы воспользоваться всеми ее функциональными возможностями и производительностью. Все примеры, которые будут рассматриваться далее, в качестве операционной системы используют OpenIndiana (поддерживаемое сообществом ответвление Open Solaris), поэтому рассматриваемые команды и взаимодействие с терминалом будут отражать работу именно в этой среде. Ссылки на подробную информацию об OpenIndiana приведены в разделе Ресурсы.)

Однако если вам удобнее работать в Linux® и вам известны совместимые команды для получения тех же результатов, убедитесь, что ваш дистрибутив поддерживает zfs-fuse, порт файловой системы ZFS.

Объем дискового пространства

Из-за того, что данный аспект непосредственно влияет на последующие решения, очень важно запланировать необходимый объем дискового пространства в самом начале фазы проектирования. На объем дискового пространства оказывает влияние также и тип конфигурации RAID-Z (более подробно об этом – в разделе Варианты RAID-Z).

Не следует размещать ОС в самом хранилище. Я рекомендую устанавливать ОС на отдельном жестком диске, поскольку это облегчит ее переустановку и восстановление без воздействия на совместно используемую область.

Убедитесь в том, что число жестких дисков соответствует потребностям вашей системы RAID-Z (например, в нашем случае необходимо как минимум пять жестких дисков). Хотя RAID-Z может использовать жесткие диски различного размера (например, 5 дисков по 2 терабайта 1 диск на 1 терабайт), фактически ZFS будет использовать жесткие диски по наименьшему объему.

Оптимальную производительность обеспечивают диски одинакового размера и одного производителя.

Варианты RAID-Z

При установке RAID-Z доступно много разных конфигураций. Я кратко опишу две из них, а затем подробнее рассмотрю ту, которая была выбрана для нашего проекта.

Конфигурация RAID-Z является наименее устойчивой к ошибкам. В ней для контроля четности выделяется один диск в пуле. Если возникают проблемы более чем с одним диском, данные в пуле системы хранения портятся и восстановлению не подлежат.

RAID-Z2 использует для контроля четности два диска. Это обеспечивает безопасность даже при возникновении таких проблем, как повреждение или отказ диска. Хотя для RAID-Z2 требуется два дополнительных диска, эта система является более отказоустойчивой, чем RAID-Z.

Для RAID-Z2 необходимо не менее пяти дисков (два из них для контроля четности); при этом три диска остается на формирование общей системы хранения. Например, при емкости каждого диска 2 терабайта емкость системы хранения данных составит около 6 терабайт.

Жесткие диски

Как уже говорилось, лучше всего остановиться на дисках одного производителя и одинакового размера. Надежнее всего работать с максимально похожими дисками.

При создании сервера хранения данных лучше всего приобрести как минимум еще один дополнительный жесткий диск для уменьшения потенциальных задержек в работе. Нередко попадаются жесткие диски с производственными дефектами.

Рост и масштабируемость

Добавление жестких дисков повышает скорость, поскольку данные распределяются по всем дискам, поэтому важно убедиться в том, что общий объем соответствует требуемому. Возможности системной платы можно расширять дополнительными SATA-контроллерами , но их установка может стать причиной появления узких мест, если не спланировать ее заранее.

Масштабируемое, способное к росту хранилище данных требует наличия трех ключевых элементов:

  1. Количество жестких дисков.
  2. Общий объем памяти.
  3. Количество жестких дисков, помещающихся в сервере.

Совсем недавно я скомпоновал сервер хранения данных на 16 терабайт, объем которого можно удвоить. Это дает возможность роста и помогает сэкономить бюджет.

Создание пула

Изначально мы решили установить операционную систему на отдельном диске, имея в распоряжении пять других. Необходимо записать метки дисков, чтобы указывать их в дальнейшем при создании пула хранения.

Листинг 1. Поиск меток устройств
root@raidz:~# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
0. c7d0 DEFAULT cyl 4092 alt 2 hd 128 sec 32
/pci@0,0/pci-ide@1,1/ide@0/cmdk@0,0
1. c9t0d0 DEFAULT cyl 1022 alt 2 hd 128 sec 32
/pci@0,0/pci8086,2829@d/disk@0,0
2. c9t1d0 DEFAULT cyl 1022 alt 2 hd 128 sec 32
/pci@0,0/pci8086,2829@d/disk@1,0
3. c9t2d0 DEFAULT cyl 1022 alt 2 hd 128 sec 32
/pci@0,0/pci8086,2829@d/disk@2,0
4. c9t3d0 DEFAULT cyl 1022 alt 2 hd 128 sec 32
/pci@0,0/pci8086,2829@d/disk@3,0
5. c9t4d0 DEFAULT cyl 1022 alt 2 hd 128 sec 32
/pci@0,0/pci8086,2829@d/disk@4,0

Specify disk (enter its number):

Для определения меток (или идентификаторов) мы выполняем команду format, но не вводим число для выбора действия. Для выхода нажмите Ctrl-C.

Я установил операционную систему на устройство 0, а затем решил добавить пять других устройств, поэтому для пула хранения представляют интерес следующие метки:

  • c9t0d0
  • c9t1d0
  • c9t2d0
  • c9t3d0
  • c9t4d0

Прекрасным свойством ZFS является быстрота создания файловой системы. Обычно форматирование или переформатирование жесткого диска требует много времени. В данном случае создание файловой системы занимает около двух секунд. В среднем это значение не должно превышать нескольких секунд независимо от размеров жестких дисков.

Листинг 2. Создание пула хранения
zpool create tank raidz2 c9t0d0 c9t1d0 c9t2d0 c9t3d0 c9t4d0

Команда zpool create tank указывает файловой системе создать и отформатировать определенные диски и пометить этот пул хранения как tank (накопитель). В качестве типа RAID-Z я указал raidz2, но вы можете выбрать raidz или raidz3. Идентификаторы пяти выбранных мною устройств приведены в листинге 1.

Мы завершили еще один важный этап: пул хранения смонтирован и готов к использованию!

Листинг 3. Проверка создания пула
root@raidz:~# df -h
Filesystem             size   used  avail capacity  Mounted on
swap                   642M    16K   642M     1%    /tmp
swap                   642M    44K   642M     1%    /var/run
rpool/export/home      7.8G    21K   4.1G     1%    /export/home
rpool                  7.8G    77K   4.1G     1%    /rpool
tank                   5.8G    34K   5.8G     1%    /tank

Информация, выводимая командой, для ясности сокращена, но можно заметить, что tank имеет размер почти 6 гигабайт и уже смонтирован в корень (root) файловой системы. Поскольку мы выбрали настройку с двумя дисками контроля четности, эффективный объем системы хранения будет близок к емкости трех остальных дисков. Теперь, когда пул хранения смонтирован и готов к использованию, давайте проверим состояние дисков и массива в целом.

Листинг 4. Состояние пула хранения
root@raidz:~# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
raidz2      ONLINE       0     0     0
c9t0d0      ONLINE       0     0     0
c9t1d0      ONLINE       0     0     0
c9t2d0      ONLINE       0     0     0
c9t3d0      ONLINE       0     0     0
c9t4d0      ONLINE       0     0     0

errors: No known data errors

Если нужно, в накопителе tank пула хранения можно создать вложенные файловые системы. Это очень полезно, если необходимо установить конкретные изолированные требования к хранению данных и права доступа к совместно используемой области. Если у вас имеется только одна совместно используемая область, это может быть сложной задачей.

Листинг 5. Добавление совместно используемых областей
root@raidz:/tank# zfs create tank/bar 
root@raidz:/tank# zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
rpool                      3.74G  4.07G  77.5K  /rpool
rpool/ROOT                 2.99G  4.07G    19K  legacy
rpool/swap                  512M  4.43G   137M  -
tank                        160K  5.83G  34.8K  /tank
tank/bar                   34.0K  5.83G  34.0K  /tank/bar

Мы создали совместно используемую область под названием bar, которая отображается как отдельная область. Прекрасно! Но пусть вас не смущает ее отображаемый размер – почти 6 гигабайт. Мы не удваивали размер области, просто полезно знать, сколько есть места в общем пуле хранения.

Восстановление

После настройки пула хранения необходимо побеспокоиться о возможной порче данных или о повреждении жесткого диска. К счастью, ZFS и RAID-Z позволяют легко решать эти задачи. В данном разделе мы имитируем повреждение жесткого диска и общий сбой системы с невосстановимым повреждением ОС.

Неисправный жесткий диск

В данном сценарии я преднамеренно сделал жесткий диск недоступным для сервера. Давайте рассмотрим сообщения ZFS при возникновении этой ситуации.

Листинг 6. Состояние неисправного диска
root@raidz:~# zpool status tank
pool: tank
state: DEGRADED
status: One or more devices could not be opened.  
Sufficient replicas exist for the pool to continue functioning in 
a degraded state.
action: Attach the missing device and online it using 'zpool online'.
scrub: none requested
config:

NAME        STATE     READ WRITE CKSUM
tank        DEGRADED     0     0     0
raidz2      DEGRADED     0     0     0
c9t0d0      ONLINE       0     0     0
c9t1d0      ONLINE       0     0     0
c9t2d0      ONLINE       0     0     0
c9t3d0      ONLINE       0     0     0
c9t4d0      UNAVAIL      0     0     0  cannot open

errors: No known data errors

Наш пул хранения просто получает статус degraded (испорчен). Команда status показывает, что происходит в пуле и какие диски выглядят поврежденными. Важно также отметить, что система хранения полностью работоспособна. Помните - я выбрал конфигурацию raidz2, выдерживающую одновременное повреждение до двух жестких дисков. Чтобы сделать этот сценарий более реалистичным, я скопировал некоторые log-файлы в систему хранения для имитации состояния degraded.

После замены дефектного жесткого диска я снова запустил сервер для просмотра результатов.

Листинг 7. Восстановление из поврежденного состояния
root@raidz:~# zpool status tank
pool: tank
state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace.'
scrub: resilver completed after 0h0m with 0 errors on Tue Nov  9 07:25:23 2010
config:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
raidz2      ONLINE       0     0     0
c9t0d0      ONLINE       0     0     0
c9t1d0      ONLINE       0     0     0
c9t2d0      ONLINE       0     0     0
c9t3d0      ONLINE       0     0     0
c9t4d0      ONLINE       0     0     2  31.5K resilvered

errors: No known data errors

Система не только полностью восстанавливает без какого-либо вмешательства совместно используемую область, но и отображает подробную информацию о случившемся и предпринятых действиях, а также приводит возможные варианты действий, если вы не удовлетворены результатами (например, повреждены файлы).

Метка resilvered означает, что ZFS восстановила на конкретном диске указанное количество данных.

Невосстанавливаемая операционная система

В данном разделе я воспроизвожу системную ошибку, при которой невозможна загрузка системы. Поскольку операционная система была установлена на отдельный жесткий диск, ее можно переустановить, не затрагивая устройства, связанные с совместно используемой областью.

Как и прежде, мы используем команду zpool для диагностирования системы хранения и определения возможности повторного ее подключения.

Листинг 8. Состояние пула после переустановки
root@reinstalled:~# zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:

NAME        STATE     READ WRITE CKSUM
rpool       ONLINE       0     0     0
c7d0s0      ONLINE       0     0     0

errors: No known data errors

В листинге 8 показано, что переустановленная система работает, но все еще не видит систему хранения данных.

Листинг 9. Поиск пула
root@reinstalled:~# zpool import
pool: tank
id: 11026414298329032494
state: ONLINE
status: The pool was last accessed by another system.
action: The pool can be imported using its name or numeric identifier and
the '-f' flag.
see: http://www.sun.com/msg/ZFS-8000-EY
config:

tank        ONLINE
raidz2      ONLINE
c9t0d0      ONLINE
c9t1d0      ONLINE
c9t2d0      ONLINE
c9t3d0      ONLINE
c9t4d0      ONLINE

Прекрасно! Это пул. Он в безупречном состоянии и готов к импорту.

Листинг 10. Импорт и верификация пула
root@reinstalled:~# zpool import tank
cannot import 'tank': pool may be in use from other system, it was 
last accessed by raidz (hostid: 0x4013af) on Tue Nov  9 07:31:33 2010
use '-f' to import anyway
root@reinstalled:~# zpool import -f tank
root@reinstalled:~# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
raidz2      ONLINE       0     0     0
c9t0d0      ONLINE       0     0     0
c9t1d0      ONLINE       0     0     0
c9t2d0      ONLINE       0     0     0
c9t3d0      ONLINE       0     0     0
c9t4d0      ONLINE       0     0     0

errors: No known data errors
root@reinstalled:~# df -h
Filesystem             size   used  avail capacity  Mounted on
/                      7.8G   2.8G   4.2G    41%    /
/devices                 0K     0K     0K     0%    /devices
swap                   800M   368K   800M     1%    /etc/svc/volatile
rpool/export           7.8G    21K   4.2G     1%    /export
rpool                  7.8G    79K   4.2G     1%    /rpool
tank                   5.8G   104K   5.8G     1%    /tank

Я попытался импортировать пул, но отобразилось сообщение о том, что он используется другой системой, в данном случае установленной ранее. Я форсировал импорт и проверил состояние, получив сообщение об отсутствии ошибок. Наконец, я проверил монтирование и местоположение и убедился, что все работает точно так же, как до сбоя.

Мы выполнили типичные сценарии и восстановили систему хранения без особых усилий.

Совместное использование

Совместное использование организуется очень просто. В следующем разделе я рассмотрю подход к совместному использованию NFS, поддерживаемый в нескольких операционных системах, включая различные версии Linux и UNIX.

Поскольку ZFS имеет встроенную поддержку NFS, нам достаточно знать файловую систему, тип совместного использования и местоположение.

Листинг 11. Совместное использование в NFS
root@reinstalled:~# zfs set sharenfs=on tank

В данном случае tank – это область, которая готова к немедленному совместному использованию в NFS или по локальной сети. Также можно установить права доступа к отдельным совместно используемым областям, но нужно отметить, что при установке совместного доступа к корневому узлу такой доступ автоматически предоставляется для всех существующих потомков и тех, которые будут созданы впоследствии.

Рисунок 1. Подключение к совместно используемой области NFS в Mac OSX
Рисунок 1. Подключение к совместно используемой области NFS в Mac OSX
Рисунок 1. Подключение к совместно используемой области NFS в Mac OSX

Настройка совместно используемых областей на сервере обычно требует некоторого времени, но очень полезна способность файловой системы самостоятельно разрешать совместный доступ по определенным протоколам, таким как NFS.

Для предыдущей совместно используемой области не были установлены защита и права доступа, поэтому давайте изменим ее, чтобы разрешить чтение и запись для определенной подсети.

Листинг 12. Сетевые права доступа в совместно используемой области ZFS
zfs set sharenfs=rw=@10.0.0.0/8 tank

Этот тип сетевых ограничений работает без дополнительной настройки. Сразу же после выполнения этой команды, доступ ограничивается, и только указанные подсети будут иметь доступ по чтению и записи к указанной совместно используемой области.

Полномочия можно гибко настраивать для конкретных пользователей или групп пользователей, а реализация и конфигурация могут меняться в зависимости от системы.

Заключение

Файловая система ZFS портирована на многие операционные системы и в настоящее время доступна во многих версиях UNIX и Linux.

Хотя в связи с ZFS и RAID-Z можно было бы еще многое обсудить, в данной статье рассмотрены наиболее важные элементы создания совместно используемой области – от конструктивных решений до организации совместного доступа к системе хранения по сети.

RAID-Z – это не единственный поддерживаемый в ZFS тип дискового массива. Зеркала, как правило, работают быстрее и потребляют меньше памяти, но требуют дополнительно еще такого же количества жестких дисков. В нашем случае, имея пять жестких дисков, предназначенных для совместного использования, мы не смогли бы использовать их все.

ZFS является идеальной файловой системой для создания хранилища данных на сервере, который работающего с несколькими устройствами и предоставлять совместный доступ по сети. Однако вы не сможете воспользоваться всеми ее преимуществами, если не будете иметь как минимум два отдельных устройства. При увеличении количества устройств производительность повышается.

Я надеюсь, что вы уже исследовали эту файловую систему и нашли ее полезной, как и я.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=811134
ArticleTitle=Большое, быстрое, стабильное и недорогое хранилище данных
publish-date=04202012