Глава 3. Совместное использование наборов данных

OpenZFS интегрировала совместное использование наборов данных посредством Server Message Block (SMB), Network File System (NFS) и Internet Small Computer System Interface (iSCSI). Комплект FreeBSD, однако, подерживает только NFS и iSCSI. Данная глава проведёт вас по реализациям iSCSI и NFS в FreeBSD и их тоношению к ZFS, плюс несколько замечаний по применению SMB в ZFS.

 SMB

Вы можете совместно использовать наборы данных ZFS поверх SMB, с применением программ, аналогичных Samba (https://www.samba.org) Это будет работать в точности как Samba в любой другой файловой системе. ZFS накладывает буквально нулевые ограничения или требования на Samba, хотя вы, возможно, захотите установить свойство casesensitivity в значение mixed для набора данных с клиентами Windows через SMB. {Прим. пер.: за подробностями о прочих подводных камнях в именах файловоой системы отсылаем к нашему переводу Исправление имён файлов Unix/Linux/POSIX.}

Однако, совместно используемый набор данных ZFS может выглядеть чудным для клиентов SMB. По мере заполнения пула клиент видит сокращение размера набора данных. Мы подробно обсуждали это в книге Мастерство FreeBSD: ZFS, однако не будет плохо повторить здесь: если вы наблюдаете за свободным пространством средствами SMB, вы получите ужасно странные результаты. FreeNAS содержит специальную поддержку для отображения используемого пространства для Windows корректным образом.

Вы можете усилить Samba с ZFS для реплицирования многих функций, которые можно найти в файловых серверах Windows. Например, после небольшой работы, снимки ZFS могут быть доступны через Windows Volume Shadow Copy. FreeNAS применяет многие подобные трюки для поддержки клиентов Windows.

Если главная цель для ZFS состоит в поддержке клиентов Windows через SMB, авторы настоятельно рекомендуют использовать FreeNAS.

 iSCSI

Вы можете совместно использовать zvol посредством любого предпочитаемого вами программного обеспечения iSCSI таргегов. FreeBSD 10 и последующие версии содержат демон Cam Target Layer ctld(8), который выступает в качестве службы iSCSI таргета. Программное обеспечение ctld(8) обычно имеет более высокую производительность, чем пакет istgt, применяемый в более ранних версиях FreeBSD.

Однако, пока инструментарий администрирования ZFS не встроен ни в какое программное обеспечение таргета iSCSI FreeBSD. Управляйте совместным использованием zvol в рамках ctld, а не при помощи zfs(8). Мы рассмотрим настройку таргета iSCSI на основе zvol и некоторые вопросы производительности для устрйств iSCSI на основе ZFS.

Для получения более подробной информации по iSCSI и тому как их применять возьмите книгу Лукаса FreeBSD Mastery: Specialty Filesystems {Прим. пер.: ищем спонсоров на перевод Специализированные файловые системы.}

  Настройка таргета

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

Основным службам iSCSI необходимы группа портала, таргет и адрес дискового устройства, или LUN (Logical Unit Number). Группа портала является именем, определяемым для специальной комбинации адреса IP и порта TCP. ("Все IP адреса на данном хосте" является допустимой компонентой группы портала.) Таргет является особой группой устройств хранения, экспортируемой через iSCSI. Одна группа портала может иметь любое число таргетов. LUN является отдельным устройством хранения в пределах одного таргета.

Вот часть /etc/ctl.conf, которая определяет отдельную группу портала.


portal-group group0 {
 discovery-auth-group no-authentication
 listen 0.0.0.0
 listen [::]
}
 	   

Группа портала имеет имя group0. Хотя мы можем (и должны) настраивать аутентификацию для промышленного таргета iSCSI, для начала работы нам не требуется аутентификация. Данная группа портала доступна всем адресам IPv4 и IPv6 на данной машине.

Далее мы определяем таргет для данной группы портала. Этот таргет содержит один LUN.


target iqn.2013-11.org.mwlucas:target0 {
 auth-group no-authentication
 portal-group group0
 lun 0 {
  path /dev/zvol/vm/db1
  size 1T
 }
}
 	   

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

Схема именования для устройств SCSI всегда начинается со строки iqn. Затем у вас идут год и месяц регистрации имени домена с последующим именем домена в обратном порядке. В нашем случае, mwlucas.org был зарегистрирован в ноябре 2013, поэтому имя таргета начинается с iqn.2013-11.org.mwlucas. Затем у нас идёт двоеточие и собственно имя данного определённого таргета.

Как и группа портала, данный таргет не требует аутентификации. Ключевое слово portal-group привязывает нас к группе потала group0 созданной ранее.

Данный таргет имеет единственный LUN, номер 0. Мы определяем путь к файлу или устройству и размер этого таргета. Отметим, что здесь мы используем узел устройства /dev/zvol/vm/db1. Хотя zvol может иметь множество узлов устройства, всегда осуществляйте доступ к узлу устройства для iSCSI экспортируя zvol из /dev/zvol {Прим. пер.: подробнее Узлы устройств множества путей}. Было бы лучше создавать такие zvol при помощи свойства volmode dev так, чтобы уровень GEOM сервера не пробовал и не настраивал предварительно этот zvol. {Прим. пер.: см. раздел Режим Zvol первой книги}.

Если /etc/ctl.conf существует, запустите ctld(8).


# service ctld start
 	   

Состояние и сообщения об ошибках появятся в /var/log/messages.

Если ctld(8) не отвечает вашим потребностям, применяйте любое предпочитаемое вами программное обеспечение таргета. Воспользуйтесь узлом устройства zvol для того, чтобы предложить его вашему инициатору. {Прим. пер.: повторим, подробнее о множественности путей и связанных с именованием проблем в разделе Узлы устройств множества путей.}

 Network File System

Про Network File System, или NFS, были написаны целые книги. Много различных операционных систем поддерживает NFS либо в качестве сервера, либо в качестве клиента, либо оба варианта сразу. Для данной книги мы сосредоточимся на предложении совместных ресурсов NFS посредством инструментария интегрированного с ZFS.

  Типы настроек NFS

Вы можете управлять экспортом NFS на основе ZFS при помощи традиционного файла /etc/exports FreeBSD и ничего ужасного с вами не случится. Если вы придерживаетесь старого стиля FreeBSD, /etc/exports может даже ощущаться более комфортным. Однако zfs(8) обрабатывает много аспектов управления NFS для вас, и к тому же работает одинаково на всех платформах ZFS.

Однако поскольку вы управляете NFS на своём хосте, мы настоятельно рекомендуем вам выбрать один метод и придерживаться его. Не применяйте одновременно оба, и /etc/exports, и ZFS для управления вашими совместными ресурсами NFS. FreeBSD читает информацию о совместных ресурсах из обоих местоположений, делая поиск неисправностей ещё более раздражающим.

Хост FreeBSD должен иметь файл /etc/exports для обслуживания совместных ресурсов NFS, даже если вы управляете NFS целиком из ZFS. Простейший способ получить его состоит в выполнении touch /etc/exports, хотя вы можете захотеть экспортировать файл, который содержит только комментарии, отправляющие прочих системных администраторов к zfs(8).

Как и в случае с iSCSI, мы не собираемся полностью охватывать NFS. Мы обсудим управление NFS с точки зрения ZFS, отображая, где это полезно, сравнивая с традиционным NFS.

  Разрешение NFSv2/v3

Разрешение NFS на уровне ZFS не даст ничего если хост не выполняет необходимые для NFS службы. Установите приводимые ниже строки в /etc/rc.conf для запуска процессов необходимых для обслуживания NFS при загрузке.


nfs_server_enable=YES
rpcbind_enable=YES
mountd_enable=YES
rpc_lockd_enable=YES
rpc_statd_enable=YES
 	   

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

Вы также можете разрешить хостам в вашей сетевой среде доступ к rpcbind(8) при помощи записи /etc/hosts.allow. Вот, например, сетевая среда 203.0.113.0.24 доступ к моим службам NFS.


rpcbind: 203.0.113.0/255.255.255.0 : allow
 	   

Без этой записи hosts.allow ваши клиенты подводить вас к грани безумия бессмысленными ошибками.

  Настройка NFSv2/v3 через ZFS

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

Если она установлена в off, ZFS не настраивает совместные ресурсы для этого набора данных. Этот набор данных, однако, всё ещё может совместно использоваться с применением /etc/exports

Установка данного свойства в значение on делает доступным этого набора данных для совместного применения через NFS. Это эквивалентно перечислению файловой системой себя в сприске /etc/exports. Установка sharenfs в значение on для zroot/home будет аналогично приводимой ниже записи в /etc/exports.


/home
 	   

Любой хост по всему миру может быть доступным и NFS смонтирует этот хост.

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


# zfs set sharenfs="203.0.113.208" zroot/home
 	   

Данная команда создаст /etc/zfs/exports подобный такому.


/home    203.0.113.208
 	   

Вы можете ввести более сложные значения в свои свойства, заключая их в кавычки или экранируя (escape) их прочим образом.


# zfs set sharenfs="-network 203.0.113.0 -mask 255.255.255.0" zroot/home
 	   

Любые записи, которые делают допустимые записи /etc/exports могут применяться в качестве значений для sharenfs.

Свойство sharenfs не может поддерживать никакйю настройку NFS, которая требует множества строк в /etc/exports. Для подобных сред вы должны применять традиционный файл exports.

  Разрешение NFSv4

NFSv4 является совершенно отличным протоколом от NFSv2 или v3. Не делайте доступным NFSv4, пока не разберётесь с его пониманием. Этот раздел посвящён тем людям, которые уже имеют некое ноу-хау NFSv4 и работы с ним.

Чтобы сделать доступным NFSv4, в /etc/rc.conf установите следующее.


nfs_server_enable=YES
mountd_enable=YES
nfsv4_server_enable=YES
nfsuserd_enable=YES
 	   

Вам также понадобится одна строка в /etc/exports, определяющая корень вашего дерева NFS. Это обычный корень файловой системы.


V4: /
 	   

Разрешайте и запрещайте совместное применение NFS при помощи свойства sharenfs для каждого индивидуального набора данных.

  Настройка NFSv4 через ZFS

Как и в случае более ранних версий NFS, для настройки экспорта отдельного набора данных применяйте свойство sharenfs. Однако, NFSv4 экспортирует всё в дереве каталога, поэтому наследование играет чудесно большое значение. {Прим. пер.: подробности данного подхода в нашем переводе книги Ли Р. Сюрбера Полная виртуализация.}

Установка sharenfs в значение on сообщает NFS о необходимости совместно использовать этот набор данных с каждым, без ограничений. Вы целиком полагаетесь на межсетевые экраны или фильтры пакетов для предотвращения не авторизованного доступа к к этому набору данных и его дочерним наборам данных. {Прим. пер.: подробнее в нашем переводе раздела Наследование и переименование первой книги авторов по ZFS.} Как и прочие свойства ZFS, sharenfs наследуемое свойство. Если вы устанавливаете совместное применение для zroot/home, вы делаете доступными для совместного применения все домашние каталоги входящие в данный.

Установка sharenfs в значение off сообщает NFS не использовать совместно этот набор данных. Его применение намеренно переписывает установки sharenfs родительского набора данных.

Установка данного свойства в значение IP адреса или выражение маски делает доступным совместное применение этого набора данных в точности как это делается при экспортах NFSv2/v3.

  Отладка NFS ZFS

FreeBSD собирает свойства sharenfs в файл экспортов, /etc/zfs/exports. Если вы знакомы с NFS, проверка этого файла может снабдить вас внутренним пониманием того, почему совместное применение файлов работает именно так.

Проверьте /var/log/messages на клиенте и сервере для получения намёков почему не прошло монтирование. Большинство общих ошибок которые мы наблюдаем, в ряду сразу после hosts.allow и проблем с межсетевым маршрутизатором, это неверные свойства sharenfs. После десятилетий практики, Лукас всё ещё определяет разрешение сетевых сред как блоки CIDR вместо того, чтобы делать это в дружественном для NFS формате.