Протокол Server message block (SMB) в той или иной форме используется в любой организации для доступа к хранилищам. Это может быть доступ к сценариям регистрации, установочным дискам с программным обеспечением, либо к пользовательским документам и коллекции музыки MP3. Где SMB не применяется, так это в протоколах доступа к файлу (здесь клиент вместо прямого доступа к блокам на диске получает доступ к файлам) при обращении корпоративных приложений к внешнему хранилищу. Что касается обмена данными с хранилищем в корпоративной рабочей среде, то в списке лидируют блочные технологии (где сервер напрямую взаимодействует с блоками на диске), такие как iSCSI и Fibre Channel (и, возможно, NFS для отличных от Windows рабочих приложений).

. Когда пользователь редактирует документ Microsoft PowerPoint, хранящийся на общем ресурсе SMB, части этого документа локально кэшируются, и время от времени пользователь нажимает кнопку «Сохранить». При возникновении проблемы на файловом сервере SMB, например связанной с перезагрузкой, либо с перемещением общей папки на другой узел кластера (если сервер является частью кластера), пользователь теряет дескриптор доступа к файлу, но без каких-либо последствий. При следующем нажатии кнопки «Сохранить» все восстанавливается, и ничего страшного не происходит. Теперь рассмотрим Hyper-V и виртуальную машину, хранящуюся на файловом ресурсе SMB общего доступа. При возникновении проблемы с хостом общий ресурс перемещается на другой узел кластера. Hyper-V ожидает наступления тайм-аута TCP, после чего констатирует ошибку первоначального соединения. Для виртуальной машины это может означать 30-секундную паузу. Однако Hyper-V уже утратил дескрипторы на виртуальном жестком диске VHD, а это более серьезная проблема. Если продолжительность работы с пользовательским документом может исчисляться несколькими часами, то корпоративные службы, виртуальные машины и базы данных требуют бесперебойной доступности файловых дескрипторов на протяжении многих месяцев.

К счастью, SMB 3.0 решает эту проблему (как и многие другие). При создании Windows Server 2012 было решено сделать SMB протоколом хранилища файлового уровня, способным обслуживать критически важные корпоративные рабочие нагрузки, такие как Microsoft Hyper-V и SQL Server. Эта перемена требовала крупных изменений в протоколе SMB.

Прозрачная отказоустойчивость

Применительно к обслуживанию корпоративных данных (например, виртуальных машин или баз данных SQL Server) SMB, как правило, используется не на отдельном файловом сервере, а на кластере, что должно обеспечить высокую доступность. При реализации службы файлов на кластере на одном из узлов обычно монтируется логический том с номером LUN, содержащий общую файловую систему и открывающий доступ клиентам SMB к ресурсу общего доступа. При отказе этого узла LUN монтируется на другом узле кластера. При этом клиент SMB теряет файловые дескрипторы.

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

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

Однако даже прозрачная отказоустойчивость SMB Transparent Failover не исключает паузы в операциях ввода/вывода, когда LUN монтируется на другом узле кластера. Группа разработчиков отказоустойчивой кластеризации проделала огромную работу по оптимизации демонтажа и монтажа LUN, сократив максимальную длительность этой процедуры до 25 секунд. Это время кажется долгим, но оно относится к наиболее неблагоприятному сценарию с участием большого числа логических устройств и десятков тысяч дескрипторов. Для наиболее распространенных сценариев эта процедура будет выполняться за пару секунд, а корпоративные службы, такие как Hyper-V и SQL Server, способны обрабатывать 25-секундную паузу в работе подсистемы ввода/вывода без ошибок.

Другая возможная причина перерыва в работе подсистемы ввода/вывода – неосведомленность клиента SMB о недоступности сервера SMB. В обычном сценарии (например, при перезагрузке узла после установки исправлений) сервер уведомляет клиентов о происходящем, и они могут принять соответствующие меры. Но при аварийном отказе хоста клиенты уведомлений не получают. В этом случае клиент ожидает наступления тайм-аута TCP, прежде чем принимает меры по восстановлению соединения, что означает бесполезную трату ресурсов. Клиент SMB может не знать о том, что узел, с которым он взаимодействует, вышел из строя, однако другие узлы в кластере узнают об этом менее чем за секунду, благодаря сообщениям синхронизации IsAlive, которыми обмениваются узлы.

Благодаря этому знанию новая служба-свидетель Witness Service в Windows Server 2012 позволяет одному из узлов кластера выступать свидетелем по отношению к клиенту SMB. Если узел, с которым общается клиент, выходит из строя, то узел-свидетель уведомляет об этом клиента SMB, что позволяет клиенту подключиться к другому узлу, а время прерывания обслуживания сокращается до пары секунд. Диалог выглядит примерно так (с использованием 1 и 0 вместо слов):

Клиент SMB – серверу A: «Я хочу установить соединение».

Сервер A: «Соединение установлено. Я являюсь частью кластера, в котором также есть серверы B, C и D».

Клиент SMB – серверу B: «Я установил соединение SMB с сервером A. Прошу наблюдать за сервером A и уведомить меня в случае его отказа».

Сервер B: «ОК. Удачного дня».

Чтобы воспользоваться преимуществами прозрачной отказоустойчивости SMB или службы-свидетеля, ничего делать не нужно. При создании нового ресурса общего доступа на отказоустойчивом кластере Windows Server 2012 функция прозрачной отказоустойчивости SMB включается автоматически. Процесс создания нового ресурса на кластере файловых серверов Windows Server 2012 направляет мастер. Вначале требуется решить, какой тип ресурса вы создаете. Ответ на этот вопрос помогает установить некоторые параметры по умолчанию для создаваемого ресурса, как показано на экране 1. Для всех типов ресурсов SMB режим Enable continuous availability включен (см. экран 2).

 

Создание общего файлового ресурса
Экран 1. Создание общего файлового ресурса

 

Включение режима прозрачной отказоустойчивости
Экран 2. Включение режима прозрачной отказоустойчивости

Схема SMB «активный/активный»

Ранее я уже говорил о необходимости сокращения паузы в работе подсистемы ввода-вывода при перемещении совместно используемого LUN с узла на узел. Похожая проблема возникает у Windows Server 2008 Hyper-V при перемещении виртуальных машин между узлами. Дело в том, что NTFS не является файловой системой коллективного пользования и не предусматривает возможность одновременного доступа к ней нескольких экземпляров операционной системы без риска повреждения. Эта проблема была решена за счет поддержки общего тома кластера cluster shared volume (CSV) в Windows Server 2008 R2. Благодаря CSV все узлы кластера могут одновременно получать доступ к группе логических устройств (LUN) для выполнения операций чтения и записи, что устраняет необходимость в демонтаже LUN на одних узлах и последующем монтаже на других.

Windows Server 2012 расширяет возможности применения CSV для конкретного типа файлового сервера, а именно, нового масштабируемого файлового сервера. Этот новый вариант предназначен для использования только при коллективном доступе к данным приложений, таких как базы данных SQL Server и виртуальные машины Hyper-V. Для других данных по-прежнему доступен традиционный вариант универсального файлового сервера (см. экран 3).

 

Выбор варианта файлового сервера
Экран 3. Выбор варианта файлового сервера

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

Использование масштабируемых файловых серверов имеет дополнительные преимущества. При создании обычного файлового сервера необходимо дать новому файловому серверу кластера NetBIOS-имя и уникальный IP-адрес. Этот IP-адрес должен храниться на том узле кластера, который в данный момент хостирует файловый сервер. При использовании масштабируемых файловых серверов хостами являются все узлы кластера. Таким образом, никаких дополнительных IP-адресов не требуется. Точкой доступа к IP-адресам узлов кластера служит распределенное сетевое имя Distributed Network Name (DNN).

Следует отметить, что, хотя все узлы в кластере способны выполнять одни и те же серверные функции и обслуживать доступ к коллективному ресурсу, при использовании масштабируемого файлового сервера каждый клиент SMB единовременно подключается только к одному узлу. Инициируя соединение, клиент SMB получает список IP-адресов всех хостов в кластере. Из списка клиент выбирает один узел, с которым начинает сеанс связи SMB. Впоследствии клиент использует только этот узел, пока на нем не возникают проблемы. Если они возникли, клиент обращается к альтернативному узлу, за исключением случаев применения службы-свидетеля.

Защита от ошибки соединения: многоканальное подключение SMB

Прозрачная отказоустойчивость SMB и схема SMB «активный/активный» позволяют избежать перерывов в работе, возникающих из-за отказа узла. Однако существуют и другие типы отказов, например ошибка соединения. Для противодействия подобным проблемам можно применять технологию многопутевого ввода/вывода Microsoft Multipath I/O (MPIO) с поддержкой нескольких маршрутов взаимодействия между сервером и хранилищем. В SMB 3.0 реализована функция многоканального подключения SMB, позволяющая клиенту SMB во время одного сеанса устанавливать несколько соединений, что обеспечивает защиту от ошибок подключения и повышает производительность.

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

Определить, работает ли на сервере функция многоканального подключения SMB, можно с помощью команды PowerShell Get-SMBConnection, позволяющей вывести список подключений SMB к ресурсу общего доступа. На экране 4 показан результат выполнения этой команды. Как мы видим, используется только одно подключение к серверу.

 

Команда PowerShell Get-SMBConnection выводит?список подключений SMB
Экран 4. Команда PowerShell Get-SMBConnection выводит?с писок подключений SMB

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

 

Команда Get-SmbMultichannelConnection выводит?список всех возможных путей
Экран 5. Команда Get-SmbMultichannelConnection выводит? список всех возможных путей

Однако этот список формируется в результате «отложенной» проверки и не означает, что данный маршрут действительно может быть установлен между IP-адресами 10.1.3.1 и 10.1.2.1 клиента и сервера.

Узнать, какой путь фактически используется между клиентом и сервером, можно по ТСР-подключениям к удаленному порту 445, используемому для SMB. В моем случае проверка подтверждает, что я использую единственный возможный путь, а именно, удаленный адрес 192.168.1.30 (см. экран 6).

 

Проверка пути между клиентом и сервером
Экран 6. Проверка пути между клиентом и сервером

В отношении подключения клиента SMB к общему ресурсу SMB, хостируемому кластером по схеме «активный/активный», возникает очевидный вопрос: устанавливаются ли эти несколько вариантов соединений с разными узлами кластера? Ответ — нет. Клиент SMB получает один IP-адрес, принадлежащий одному из узлов в кластере, и все соединения устанавливаются с этим узлом. Все сеансы SMB для данного кластера, инициируемые клиентом SMB, всегда проходят с участием одного и того же узла. Это не вызывает проблем, поскольку кластер высокой отказоустойчивости, как правило, имеет сотни, если не тысячи, подключений клиентов SMB. Нагрузка распределяется равномерно по всему кластеру.

Максимальное увеличение пропускной способности: масштабирование на стороне приема и удаленный доступ к памяти

Еще один аспект SMB 3.0, на который следует обратить внимание, касается крупных магистралей сетевых соединений в современных информационных центрах. Многие информационные центры уже перешли со стандарта 1 Гбит/с на стандарт 10 Гбит/с. Однако по мере такого перехода проблему с производительностью начинает создавать процессор на сервере. Одно TCP-соединение может обрабатываться только одним ядром процессора, которое не способно справиться с 10-гигабитным потоком и таким образом ограничивает пропускную способность. Именно здесь оказывается полезной функция масштабирования на стороне приема Receive Side Scaling (RSS), с помощью которой единый сетевой интерфейс разделяется на несколько принимающих соединений, каждое из которых обслуживается отдельным процессорным ядром. Это позволяет в полной мере использовать имеющуюся пропускную способность. Большинство сетевых адаптеров современных серверов автоматически поддерживают RSS. Определить, поддерживает ли данное оборудование RSS, можно с помощью команды Get-SmbMultichannelConnection (см. экран 7).

 

Команда Get-SmbMultichannelConnection показывает доступность RSS
Экран 7. Команда Get-SmbMultichannelConnection показывает доступность RSS

Заметим, что в выходных данных команды указано число 4 в качестве значений CurrentChannels и MaxChannels. Это значение по умолчанию для Windows Server 2012 при использовании сетевых карт с поддержкой RSS.

Если теперь проверить состояние многоканального SMB-соединения с сервером (см. экран 8), можно увидеть, что для IP-адреса, используемого SMB, установлены четыре отдельных соединения, что указывает на работу функции RSS.

 

Четыре отдельных соединения указывают на работу функции RSS
Экран 8. Четыре отдельных соединения указывают на работу функции RSS

Может возникнуть вопрос: почему сетевой интерфейс с поддержкой RSS по умолчанию разделен на четыре соединения? В этом можно убедиться с помощью команды PowerShell Get-SmbClientConfiguration, позволяющей просмотреть настройки клиента SMB. В первой строке полученных в ответ данных будет указано число соединений на один сетевой интерфейс RSS. Это значение можно изменить, но оно выбрано не случайно. В Microsoft был проведен большой объем тестирования 10-гигабитных соединений, в ходе которого выяснилось, что четыре соединения дают наибольший выигрыш, тогда как при дальнейшем увеличении их числа этот выигрыш уменьшается. Тем не менее, если у вас есть соединения с пропускной способностью свыше 10 Гбит/с, то увеличение этого значения может дать положительный эффект.

Удаленный прямой доступ к памяти Remote Direct Memory Access (RDMA) – еще одна технология, позволяющая повысить пропускную способность и минимизировать нагрузку на сервер. Сетевые адаптеры с поддержкой RDMA могут обходить большую часть сетевого стека и соединяться напрямую, что позволяет снять нагрузку с хост-серверов. С помощью ранее упомянутой команды Get-SmbMultichannelConnection можно узнать, поддерживает ли сетевой адаптер RDMA. Начальная инициализация соединения SMB предусматривает проверку наличия поддержки RDMA на обоих концах соединения. Если такая поддержка есть, то соединение переключается на RDMA. В этом случае также никакой ручной настройки не требуется.

Мощное решение

SMB 3.0 используется только между операционными системами с поддержкой SMB 3.0, то есть Windows Server 2012 и Windows 8. Для других операционных систем применяется новая общая для них поддерживаемая версия SMB, определяемая в ходе взаимного согласования возможностей. Например, если система Windows 7 подключается к файловому серверу Windows Server 2012, то используется SMB 2.1, поскольку это самая новая из поддерживаемых Windows 7 версий.

Основным побудительным мотивом для внесения большинства изменений в SMB 3.0 было стремление сделать SMB протоколом для корпоративных приложений. Именно в этой сфере реализуется наибольший положительный эффект от применения SMB. Есть также выгоды для постоянных клиентов – например, тех, кто перешел на Windows 8. SMB 3.0 недоступен для версий, предшествующих Windows 8 и Windows Server 2012. Например, новое шифрование SMB устраняет необходимость в сложных инфраструктурах открытых ключей public key infrastructure (PKI) для обеспечения безопасности. В комбинации со многими другими реализованными в Windows Server 2012 усовершенствованиями хранилищ, SMB 3.0 переводит новую операционную систему в разряд мощных решений для хранения данных и открывает перед клиентами еще более широкие возможности.