между прикладными программами и аппаратурой.
Для схемы, когда корневой процесс взаимодействует с остальными, строится система с топологией звезда. Данная схема взаимодействия хорошо подходит для реализации алгоритмов, построенных по принципу хозяин-слуга.
В тех случаях, когда требуется взаимодействие всех процессов со всеми, можно использовать топологию гиперкуб. Узлы соединяются, как вершины N-мерного куба. Это соответствует оптимальному алгоритму коллективной операции распространения данных от одного процесса ко всем Broadcast, при этом для пересылки сообщений между наиболее удаленными процессорами требуется всего logN шагов. Наиболее известной реализацией вычислительной системы с топологией гиперкуб являлась nCUBE2. В топологии гиперкуб эффективно выполняются редукционные операции, транспонирование матриц, сортировка, рекурсивные алгоритмы.
Топология решетка применяется в случаях, когда требуется взаимодействие соседних процессоров, в частности, в регулярных сеточных методах, таких как решение дифференциальных уравнений в частных производных, задачах линейной алгебры. Обычно используются двух- и трехмерные решетки. Часто крайние узлы решетки замыкаются, и образуется топология N-мерный тор.
Из других топологий отметим дерево и идеальное тасование.
Главным недостатком систем с фиксированной коммутацией является аппаратно заложенная коммуникационная схема, которая эффективна только для определенных классов задач.
Системы могут поддерживать несколько видов топологии. В частности, IBM Blue Gene поддерживает трехмерный тор, используемый в основном в вычислениях, и дерево, приспособленное для коллективных операций.
Большое распространение получили системы, не использующие фиксированную коммутацию, а построенные с использованием коммутаторов или SCZ-колец. Так, в настоящее время универсальная коммуникационная сеть, построенная на коммутаторах, является основным способом соединений вычислительных узлов в кластере.
При использовании коммутаторов увеличивается латентность при передаче данных, что негативно сказывается на производительности системы при выполнении прикладных программ, особенно когда при увеличении количества узлов в вычислительной системе увеличивается количество уровней коммутации. Тем не менее это компенсируется универсальностью топологии - при любом отображении параллельных процессов программы на физические процессоры число шагов при пересылке составляет 1.
Вычислительный кластер представляет симбиоз перечисленных решений. Он состоит из вычислительных узлов, имеющих свою локальную память. Узел кластера часто представляет собой SMP-систему, процессоры обрабатывают данные с плавающей точкой конвейерным способом. При этом используются сразу несколько уровней параллелизма.
В следующем примере внешний цикл как наиболее крупноблочный реализуется на разных узлах кластера, параллелизм записан в синтаксисе HPF. Средний цикл реализуется нитями на SMP-узле кластера и записан в синтаксисе OpenMP. Внутренний цикл записан как команда для скалярного произведения в языке Фортран.
!$HPF INDEPENDENT
DO I = 1, N !$OMP PARALLEL DO DO J = 1, N
A(I,J)=DOTPRODUCT(B(I,1:N) ,C(1:N,J) ) ENDDO
!$OMP END PARALLEL DO ENDDO
При уменьшении частоты и объема взаимодействия параллельных процессов (то есть при уменьшении связности параллельной программы) снижаются требования к коммуникационной сети - латентности и пропускной способности. Слабо связные приложения возможно выполнять на ме-такомпьютере или вычислительной GRID-системе. С другой стороны, удаленная обработка экспериментальных данных также требует распределенных GRID-систем. Модели программирования ме-такомпьютеров принципиально не отличаются от программирования систем с распределенной памятью. В частности, реализованы версии MPI для GRID, такие как PACX-MPI и MPICH-G2.
ПАРАЛЛЕЛЬНАЯ КЛАСТЕРНАЯ ФАЙЛОВАЯ СИСТЕМА ДЛЯ ВЫСОКОПРОИЗВОДИТЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ
О.С. Аладышев, Б.М. Шабанов
Параллельные файловые системы с разделением дисков между узлами ввода-вывода очень широко используются на больших суперЭВМ во всем мире.
Основные принципы таких систем разрабатываются научным сообществом уже много лет. И сегодня принцип масштабируемости остается самым акту-
альным. Основой хорошей способности масштабируемости служит техника распределенных блокировок и восстановления после сбоев.
В последние годы просматриваются тенденции увеличения производительности суперЭВМ путем увеличения количества вычислительных узлов c общей памятью. Если еще в начале 90-х годов основные позиции занимали суперЭВМ, состоящие из одного многопроцессорного узла на общей памяти (SMP), и требования к файловым системам (ФС) исходили из принципа централизации, то сейчас все верхние позиции списка TOP500, рейтингового списка самых мощных компьютеров, занимают многоузловые системы, и требования к файловым системам существенно меняются.
От параллельной ФС (ПФС) прежде всего требуют удовлетворения всем основным принципам ФС POSIX, работающей на одном узле. Нарушение этих правил обычно приводит к существенному ограничению совместимости, обрекая ФС на использование ее в определенных рамках.
Второе требование - способность к масштабированию - предъявляется как непосредственно к носителям информации, так и к механизмам обеспечения разделяемого доступа к этим носителям.
Следующее требование - независимая работа вычислительных узлов на операциях чтения и записи с неперекрывающимися регионами общего файла, а также конкурентные операции записи и чтения различных файлов. Основополагающей в этом вопросе остается техника блокировки данных.
Не стоит забывать и о таких требованиях, как репликация данных, целостность и восстанавливаемость данных после сбоев.
Традиционно суперкомпьютерные приложения, выполняющиеся на кластере, нуждаются в параллельном доступе с множественных узлов к разделяемым файлам. Другие приложения, такие как web-серверы и большие электронные библиотеки, характеризуются параллельным доступом к индивидуальным файлам. В таких приложениях не требуется разделяемый доступ к индивидуальной информации в файлах, однако при расположении индивидуальных файлов в общих каталогах или на общем диске все еще нужен параллельный доступ к структурной системной информации, так называемым метаданным. Отсюда и требование: ПФС должна поддерживать параллельный доступ не только к данным, но к метаданным.
Параллельная кластерная ФС. Принципы работы различных ПФС рассмотрим на примере абстрактной параллельной кластерной ФС (ПКФС).
ПКФС, а именно хорошо масштабируемая и удовлетворяющая описанному комплексу требований ФС, может состоять из вычислительных узлов, подключенных к дискам или дисковой подсистеме через коммутирующую фабрику. Все узлы в кластере имеют равноправный доступ к разделяемым дискам. Данные распределяются по всем дискам равномерно для достижения максимального ускорения на операциях чтения и записи. Коммутирующая фабрика может быть сетью хранения информации SAN (Storage
area network), построенной по технологии FC (Fibre channel) или по технологии iSCSI (SCSI по TCP/IP). В качестве альтернативы, индивидуально подключенные диски к узлу ФС могут использоваться вычислительным узлом на программном уровне через сеть общего назначения. Операции чтения и записи ПКФС данных и метаданных различными узлами полностью синхронизированы. Для соблюдения целостности данных ПКФС использует механизм распределенной блокировки, максимально сохраняя при этом все преимущества параллельного доступа к файлам с множественных узлов.
ПКФС с помощью механизма работы с метаданными поддерживает тысячи дисков, каждый из которых может достигать емкости в несколько терабайт, тем самым поддерживая емкость систем хранения до нескольких петабайт.
Распределение данных по дискам, упреждающее чтение и кэширование записи. Для достижения максимальной пропускной способности на операциях чтения и записи в один большой файл ПКФС распределят данные по всем предоставленным дискам и дисковым контроллерам. Количество дисков, подключенных к одному узлу, может быть большим благодаря технологии SAN, где для идентификации устройства SCSI используется его логический номер.
Большие файлы в ПКФС делятся на блоки равной длинны, последовательно размещенные на разных дисках: первый блок на первом диске, второй на втором, ..., блок N на диске N, блок N+1, на первом диске и так далее. Чтобы минимизировать относительно долгую операцию позиционирования головок диска на нужный блок, используются блоки подходящей длинны. Для современных дисков размер блока ФС разумно выбирать 256 КБ. Если много больших файлов, тогда большой размер блока позволит за одну операцию ввода-вывода считать или записать большее количество данных. Малые файлы и концы больших файлов можно сохранять в блоках меньшего размера фиксированной длины, называемых подблоками ФС. Это позволяет экономить дисковое пространство и несущественно снижает производительность, особенно когда ПКФС использует механизмы упреждающего чтения и кэширование записи.
По запросу от одиночного пользовательского процесса блоки одного файла могут быть предупредительно считаны в буфер параллельно несколькими различными узлами ФС. Тем самым можно использовать дисковый параллелизм и добиться более полного использования пропускной способности коммутирующей фабрики (обычно пропускная способность сети хранения информации многим больше, чем может дать один современный жесткий диск). Используя механизмы кэширования, запись может быть проведена также параллельно.
Распределение по дискам будет оптимально в случае использования дисков равного объема. В таком случае приходится выбирать между производительностью и вместительностью, так как максимизирование используемого объема приводит к смещению нагрузки на большой диск, ослабляя нагрузку на малые диски.
Поддержка директорий. ПКФС использует механизм extensible hashing для организации директорий с большим количеством файлов. В директории, которая занимает больше одного блока, блок с нужным именем файла можно найти, применив хэш-функцию к имени и взяв n нижних бит как номер нужного блока (n зависит от размера директории).
При пополнении директории механизм extensible hashing добавляет блоки для дальнейшего размещения списка файлов. Как только не хватает места в блоке, указанном хэш-функцией, блок делится надвое. Логический номер нового блока директории вычисляется как номер старого блока с добавлением единички в (n+1) бит. Записи списка с '1' в (n+1) бите хэш-фунции перемещаются в новый блок, остальные блоки остаются неизменными. Большие директории в общем случае выглядят как разбросанный файл с дырками, представленными блоками директории, которые не были разбиты надвое. Проходя разбросанные регионы директории в списке директории, можно определить, как часто блок был раздвоен и как много бит в значении хэш-функции, а также вычислить номер блока, содержащего нужную нам запись директории. Для этого необходим доступ только к одному блоку директории, не зависимо от размеров и структуры директории.
Регистрация изменений и восстановление. В громоздкой ФС невозможно делать проверку целостности каждый раз при монтировании или выходе из строя одного из узлов кластера ФС. В подобных случаях записывают информацию об изменениях метаданных в журнал или специальный журнал упреждения записи.
Каждый узел кластера имеет отдельный журнал для каждой ФС, сохраняемый в той же ФС. Такой порядок предназначен для доступности журнала для других узлов ФС и восстановления целостности ФС другим узлом в случае отказа узла, ведшего журнал. Для восстановления целостности ФС достаточно, не дожидаясь отказавшего узла, исполнить изменения, которые зарегистрированы в журнале.
После того как все изменения, запротоколированные в журнале, сделаны, протокол может быть очищен. Таким образом, размер журнала может быть фиксирован.
Распределенные блокировки и централизованная синхронизация. Производительность кластерной ФС может существенно превосходить производительность некластерной ФС, если использовать параллелизм операций чтения и записи сразу с нескольких узлов. С другой стороны, необходимость соблюдения целостности информации и POSIX-семантики ограничивают параллелизм. ПКФС гарантирует исполнение POS/X-семантики на одиночном узле для операций по всему кластеру. Например, если два процесса на различных узлах запрашивают один и тот же файл, то гарантируется, что первый узел, читая файл, будет видеть изменения другого узла, который пишет в этот файл. Исключение составляют записи atime. Учитывая популярность общего использования информации для множественного чтения информации различными узлами без изме-
нения этой информации и дороговизну синхронизации чтения в таких случаях, ПКФС делает синхронизацию периодически, если не заданно другое.
Существует два подхода к организации необходимой синхронизации:
— распределенные блокировки, когда каждой операции требуется получить блокировку на чтение или запись для синхронизации с конфликтующей операцией на другом узле, перед тем как читать или править данные или метаданные;
— централизованная синхронизация, когда все конфликтные операции переадресуются центральному или заданному узлу, который выполняет запрашиваемую операцию чтения или записи.
Механизм распределенных блокировок обеспечивает больший параллелизм, чем централизованная синхронизация, до тех пор, пока разные узлы работают с разными частями данных или метаданных. С другой стороны, централизованный подход может быть более эффективным для часто запрашиваемых или изменяемых с разных узлов данных или метаданных. Когда конфликты блокировок начинают часто встречаться, то накладные расходы в механизме распределенных блокировок могут превышать затраты на переадресацию запросов на центральный узел в механизме централизованной синхронизации. Детализация блокировок также сильно влияет на производительность механизма: сильная детализация, когда блокируются малые блоки данных, может повлечь большое количество запросов на блокировку, в отличие от малой детализации, при которой будет большая вероятность конфликтных запросов.
Для эффективной работы широкого спектра задач недостаточно применения только одного подхода к организации механизма блокировок. Характер доступа к данным различен. Поэтому от ФС требуется применения всевозможных техник для различных типов данных, а именно механизма побайтовой блокировки для записи пользовательских файловых данных, механизма централизованной синхронизации с динамическим назначением метаузла для файловых метаданных, механизма распределенных блокировок с централизованными подсказками для выделения дискового пространства и центрального управления конфигурационными изменениями.
В механизме распределенных блокировок применяется менеджер централизованных глобальных блокировок, который запускается на одном из узлов кластера, в связке с локальными менеджерами на каждом узле ФС. Глобальный менеджер блокировок координирует процесс блокирования данных локальными менеджерами, раздавая так называемые блокировочные жетоны, которые дают право на блокировку данных без дополнительного обмена сообщениями каждый раз, когда данные блокируются или разблокируются. Повторяющийся запрос на чтение или запись одних и тех же данных одним и тем же узлом требует только одного сообщения для получения прав на объект - блокировочного жетона. Как только узел получил свой жетон от менеджера централизованных глобальных блокировок, последующая операция на том же узле может получить блоки-
ровку от локального менеджера без необходимости дополнительных обменов сообщениями между узлами кластера. Только когда на другом узле понадобится совершить операцию с заблокированными данными, возникнет необходимость отозвать блокировочный жетон с первого узла, дабы выдать жетон другому узлу.
Параллельный доступ к данным. Определенный класс приложений требует поддержания записи в один и тот же файл с множественных узлов. Для синхронизации чтения и записи файла используется механизм побайтовой блокировки. Данный подход позволяет писать одновременно нескольким узлам в различные части файла, соблюдая правила Р081Х-семантики. Применяя более сложный механизм побайтовой блокировки, можно существенно уменьшить накладные расходы на получение блокировочных маркеров в большинстве случаев.
Механизм побайтовой блокировки можно проиллюстрировать следующим примером. Первый узел для записи в файл получает жетон блокировки на весь файл. Пока этот файл не требуется другим узлам, все операции чтения/записи происходят локально, без обменов сообщениями между узлами. Когда второй узел начинает запись в наш файл, он потребует отзыва права побайтной блокировки хотя бы на свою часть файла. Первый узел, получив запрос на подтверждение прав на выданный побайтовый жетон на весь файл, проверит необходимость в данном файле, и если файл уже закрыт, то блокировка будет освобождена и жетон на весь файл будет выдан второму узлу. В этом случае механизм побайтовой блокировки ведет себя так же, как и механизм файловой блокировки и так же эффективен, так как требуется только один обмен жетонами для доступа ко всему файлу. Если файл еще не закрыт, первый узел уступит право только на часть файла. То есть если первый узел последовательно пишет с байта Оь а второй с О2, то первый узел уступит блокировку с байта О2 до бесконечности, если О2> Ох, и с начала файла до Оь если О2<ОХ. Это позволит больше не обмениваться жетонами, пока первый узел пишет в свою область файла, а второй в свою. В общем случае, когда множественные узлы последовательно пишут в неперекрывающиеся области одного и того же файла, каждому узлу требуется только один обмен жетонами как часть первой операции записи.
Информация о начальном байте и размере записываемого блока указывается в системном вызове процедуры итйв(). Это - требуемая область, а желаемая область включает в себя еще и последующие области записи данным узлом. Для последовательной записи желаемая область - это область от байта начала записи до бесконечности. Механизм побайтовой блокировки отзовет жетон только у того узла, с которым конфликтует операция записи; сервер блокировки выдаст жетон на блокировку такой области файла, которая будет наибольшей бесконфликтной областью.
С уменьшением размеров регионов, к которым происходит доступ различных узлов, возрастает и количество обменов сообщениями с жетонами. От-
метим, что механизм побайтовой блокировки не только гарантирует соблюдения Р057Х-семантики, но также синхронизирует операции ввода-вывода данных файла. Так как наименьший размер операции ввода-вывода равен размеру одного сектора, то размер жетона не может быть меньше, иначе два узла смогут писать один и тот же сектор одновременно, потеряв изменения.
Для приложений, которые не требуют выполнения Р057Х-семантики и разделяют данные одного файла между узлами с очень маленьким размером блокируемых данных, ФС должна иметь возможность отключать механизм побайтовой блокировки и переключаться на механизм доставки данных, который можно описать как централизованное разделение функций ввода-вывода данных различным узлам. Блоки файла друг за другом назначаются узлам так, чтобы только один определенный узел смог бы писать или читать назначенный блок. Операция чтения или записи пересылается узлу, отвечающему за нужный блок файла. Если приложение использует множественные блоки малого размера одного файла на разных узлах, то такой механизм будет более эффективен, чем механизм распределенной блокировки, так как необходимо небольшое количество обменов сообщениями с жетонами и нет необходимости записывать кэш-память узла в случае отзыва жетона у владельца. Время от времени происходит сброс кэшпамяти, который может происходить параллельно на всех узлах.
Синхронизация доступа к метаданным файла.
Для хранения атрибутов файла и адресов блоков данных ФС использует «тойвз» и списки блоков данных (косвенных блоков). Конкурентная запись в один и тот же файл различными узлами приводит к конфликтному изменению записи тоёв и косвенных блоков, так как при записи меняются размер файла, время последнего изменения (шПшв) и, возможно, списки блоков данных. Применение механизма блокирования записи метаданных всего файла приведет к постоянному конфликту при любой операции записи. Однако есть и более эффективный механизм блокировки совместной записи тоёв. При этом механизме конфликт возникает только в то время, когда есть запрос на размер файла или время его создания или когда процесс читает файл за меткой конца файла. Один из узлов, который запрашивает доступ к файлу, назначается метаузлом для данного файла. Только этот узел может читать или писать тоёв файла. Каждый пишущий узел содержит свою копию записи 1поёв в кэш-памяти и пересылает изменения записи 1поёв метаузлу периодически или когда отзывается жетон блокировки совместной записи из-за запроса по операциям или гваё() от другого узла. Метаузел обрабатывает информацию об изменениях записи 1поёв, оставляя наибольший размер и более позднее время изменения файла. Операциям, которые изменяют размер и время создания файла нестандартно (Ггипс() или иПшв()), требуется эксклюзивная блокировка записи 1поёв.
Изменения в косвенных блоках синхронизируются подобным же образом. Когда происходит за-
пись в новый файл, каждый узел независимо размечает дисковое пространство для новых блоков данных. Синхронизация, обеспеченная побайтовыми жетонами, гарантирует, что только один узел будет размечать дисковое пространство для каждого отдельного блока данных. Это одна из причин выдачи ФС жетонов на блокировку по границам блоков данных. Периодически или при отзыве жетона новые списки адресов блоков данных файла посылаются метаузлу, который обновляет в кэш-памяти данные косвенных блоков.
Таким образом, ФС, используя механизм распределенных блокировок, гарантирует выполнение РО57Х-семантики (системные функции предоставляют последнюю информацию о размере и времени обновления файла), а операции работы с записью тоёв и косвенными блоками синхронизируются по принципу централизации (пересылки изменений к метаузлу файла). Таким образом, наш механизм позволяет писать различным узлам в один и тот же файл без конфликтов блокировок метаданных и дополнительных сообщений метаузлу при каждой операции записи.
Метаузел выбирается динамически при помощи сервера блокировок. При первой попытке доступа к файлу узел получает жетон метаузла на файл. Таким образом, в традиционном использовании ФС каждый узел становится метаузлом какого-либо файла и делает все изменения метаданных локально в кэшпамяти.
Таблицы размещения. В таблице размещения записывается статус всех дисковых блоков (свободен или занят). Поскольку каждый блок может быть поделен на 32 части для хранения малоразмерных файлов, то таблица размещения имеет 32 бита для идентификации блока диска.
Выделение дискового пространства предусматривает изменение информации в таблице размещения, которое должно быть синхронизировано между узлами. Для правильного распределения данных по дискам, операция записи должна выделять место для одиночных блоков данных на отдельных дисках. Необходимо организовать таблицу размещений так, чтобы минимизировать конфликты между узлами и чередовать записи о свободном месте на разных дисках. Таблица разделяется на большое число п непересекающихся регионов, каждый регион содержит статус размещения 1/п-го блока каждого диска ФС. Такая карта позволяет ФС размещать дисковое пространство правильно, разделяя данные по всем дискам, обращаясь только к одному региону. Такой подход минимизирует конфликты блокировок, так как различные узлы могут выделять место в разных регионах. Общее число регионов определяется при создании ФС и исходит из числа узлов ПФС.
Для каждой ФС один из узлов в кластере отвечает за полную информацию о свободном пространстве всех регионов. Менеджер размещения узла инициализирует свободное пространство, обращаясь к таблице размещения в момент монтирования ФС. Статистика свободного пространства поддерживается не жестко, время от времени узлы посылают сообщения
о дисковом пространстве, занятом или освобожденном за последнее время. Вместо того чтобы искать свободное место узлу, у которого закончилось место в его регионах, он запрашивает свободное место у менеджера размещения. Менеджер размещения предотвращает конфликты блокировок между узлами выделением различным узлам различных регионов.
Удаление файла также изменяет таблицу размещения. Файл, создаваемый параллельной программой с нескольких сот узлов, может иметь данные в нескольких сотнях регионов. Удаление файла приводит к блокированию и изменению каждого из этих регионов, что узлы, отвечающие за соответствующий регион, могут проделать параллельно. Таким образом, узел, на котором происходит удаление файла, зная, какой регион у какого узла в использовании, пересылает запрос на удаление этому узлу. Менеджер размещения периодически оповещает о том, какой узел, за какой регион отвечает.
Глобальные метаданные ФС. Кроме файловых метаданных, ФС требуется такая информация, как конфигурация системы, квоты, списки доступа и расширенные атрибуты. Наша ФС использует распределенные блокировки для защиты целостности метаданных, но во многих случаях для координирования и сбора изменений метаданных более эффективным является централизация. Например, механизм квотирования позволяет выделять сравнительно большое место самим узлам, время от времени советуясь с менеджером квотирования.
Способность к масштабированию менеджера блокировок. Менеджер следит за всеми блокировочными жетонами, выданными узлам кластера. Получение, освобождение, увеличение полномочий или ослабление - во всех этих случаях требуется послать сообщение центральному менеджеру. В такой ситуации сервер блокировок может быть узким горлом или отказать в работе, если возникнет нехватка памяти из-за размера и количества выданных жетонов.
Можно преодолеть эту проблему раздачей функций выдачи жетонов нескольким узлам кластера. Самый простой способ передачи функций раздачи жетонов - это применение hash-функции к номеру гпоёв файла. Но это не дает необходимой масштабируемости в массовом параллельном обращении к одному файлу. В самом худшем случае конкурентная запись в файл с множества узлов породит побайтовый блокировочный жетон на каждый блок данных файла. Так как размер файла теоретически не ограничен, то и размер данных каждого жетона тоже не ограничен. Можно разделить право выдавать жетоны на один файл между всеми узлами кластера, но тогда получение блокировки на весь файл, что происходит в традиционных случаях, будет неоправданно дорогим. Не допустить бесконечного роста числа выданных жетонов можно, отслеживая использование оперативной памяти и уменьшая число выданных жетонов отзывом и выдачей их заново.
Конфликты блокировок - основная причина высокой нагрузки менеджера блокировок. Когда узел сокращает или освобождает жетон, данные и метаданные, которые покрываются жетоном, должны
быть записаны на диск и/или выброшены из кэшпамяти.
Отказоустойчивость. Кластер ФС может достигать больших размеров, а это означает, что вопрос устойчивости к системным сбоям и выходу оборудования из строя поднимается на первые места.
Выход узла ФС из строя. При выходе узла из строя ФС должна привести метаданные, находившиеся у узла, в согласованное состояние, освободить ресурсы (блокировочные жетоны), делегировать специфические роли другим узлам (менеджеру блокировок, менеджеру размещения, метаузлу).
Если сбойный узел вел журнал регистрации транзакций на общем диске, то восстановить согласованность представляется простым выполнением восстановительного процесса на рабочем узле по записанному журналу. После того как метаданные согласованны, менеджер блокировок может освободить блокировочные жетоны, занимаемые узлом, вышедшим из строя. По алгоритму механизма распределенных блокировок нужно убедиться, что неисправный узел должен был владеть всеми жетонами на метаданные, которые были изменены в кэш-памяти этого узла и еще не записаны на диск в момент сбоя. Метаданные, измененные плохим узлом, будут недоступны для других узлов, пока не закончится процесс восстановления, и только тогда, когда процесс закончится, блокировки метаданных будут сняты. Это справедливо и для механизмов, где применяется более централизованный подход к блокировкам, например, для изменения и оповещения о размере файла и шйшв. Даже когда операции записи, порождающие подобные изменения метаданных, не синхронизированы через механизм распределенных блокировок, метаданные еще недоступны и защищены протоколом механизма распределенных блокировок (в этом случае через жетон метаузла).
После восстановления другие узлы могут получить права метаузла тех данных, которые были блокированы вышедшем из строя узлом. Если какой-либо узел посылал исправления старому мета узлу, который в этот момент вышел из строя и не получил подтверждения, то этот узел вторично пересылает изменения данных уже новому метаузлу, и тот просто их применяет.
В случае выхода из строя менеджера блокировок другой узел возьмет себе его обязанности и реконструирует состояние выданных жетонов, запросив все оставшиеся узлы о жетонах, которые они сейчас имеют. Пока новый менеджер блокировок не опознает, какие жетоны были у вышедшего из строя узла, новые жетоны блокировок не будут выдаваться до завершения процесса восстановления состояния метаданных. На жетоны, выданные рабочим узлам до момента отказа старого менеджера блокировок, этот процесс не повлияет.
Похожим образом перекладывается ответственность по другим специфичным функциям, таким как менеджер размещения на другой узел, который реконструирует состояния блокировок, читая информацию непосредственно с диска или запрашивая другие рабочие узлы.
Неисправности сети. Чтобы своевременно определить недоступность узла по сети, нужно следить за работающими узлами и периодически их опрашивать. Для этого можно применять протоколы, которые при отказе узла будут информировать другие узлы об этом событии. Об отказе одного узла информируются оставшиеся узлы на уровне группового сервиса, тем самым возбуждая сигнал к необходимости начать процесс восстановления.
Отказы сетевой среды, такие как выход из строя сетевого адаптера или обрыв кабеля, могут привести к изоляции узла от остальных узлов кластера, а отказы, например, активного сетевого оборудования, могут привести к изоляции целого сегмента. Узлы, попавшие в изолированный сегмент, могут все еще сохранять доступ к разделяемым дискам и могут повредить информацию на них, если им позволить продолжить работу в изоляции. Чтобы обеспечить защиту информации, нужно позволить работать с разделяемыми дисками только большей группе узлов, а малым группам запретить работать с дисками, пока они не смогут вновь присоединиться к большей группе.
К сожалению, описанный протокол не может гарантировать время, за которое изолированный узел узнает о сбое, поймет, что он не в большей группе узлов, а в меньшей, и прекратит работу с разделяемыми дисками. Необходимо перед запуском восстановительного процесса в большей группе узлов блокировать доступ к дискам узлов, которые не входят в большую группу.
В кластерах с двумя узлами для обеспечения отказоустойчивости не удается использовать правило большинства. В этом случае только одному узлу позволяют работать с дисками, а другому блокируют доступ.
Сбой дисков. Так как данные и метаданные распределяются по всем дискам равномерно, то потеря одного диска может привести к потере части большинства файлов. Для защиты от потери диска ФС применяются механизмы избыточности, такие как удвоение дисковых контроллеров, удвоение сетевых путей до дисков и ИЛТО-технологии. При использовании ИЛТО-технологии важно, чтобы размер ИЛЮ-блока данных был кратен размеру блока ФС для увеличения эффективности работы ПФС.
Для обеспечения дополнительной надежности ФС необходима поддержка репликации данных и метаданных. Опция репликации дает возможность записывать информацию на два диска одновременно. При отказе одного из дисков или его недоступности на другом диске должен вестись журнал изменений, чтобы в дальнейшем эффективно восстановить информацию обеих реплик.
Масштабируемость системного инструментария работы с ПФС. Масштабируемость является важной не только для операций ФС, но для системного инструментария, предназначенного для работы с ФС. Системный инструментарий также работает с большими объемами данных и метаданных и может повысить свою эффективность, распараллелив многие операции.
Для выполнения системных операций за приемлемое время требуется применение элементов параллелизма на системном уровне. Для координирования системных операций один из узлов кластера ФС назначается системным менеджером ФС. Системный менеджер занимается вопросами координации кластерных системных операций. Менеджер содержит несколько записей, похожих на тоёв, и раздает работу другим узлам. Если узел ФС закончит работу в своей зоне раньше, он может запросить дополнительную зону у менеджера. Для больших систем
хранения нужно предусматривать выполнение всех системных операций в фоновом режиме при регулируемом приоритете системных операций. Исключением является операция полной проверки целостности ФС, когда требуется размонтировать ФС.
В Москве, в Межведомственном суперкомпьютерном центре РАН при содействии специалистов НИИ «Квант» и ИПМ им. Келдыша успешно апробированы многие идеи на уникальных высокопроизводительных вычислительных установках.
СЛУЖБА КАТАЛОГОВ КАК КЛЮЧЕВОЙ ЭЛЕМЕНТ ИНФОРМАЦИОННОЙ СИСТЕМЫ GRID
Н.Ю. Шульга
GRID - это программно-аппаратная инфраструктура, связывающая распределенный гетерогенный аппаратный комплекс в систему, обеспечивающую надежный, устойчивый, повсеместный и недорогой доступ к высокопроизводительным вычислительным ресурсам.
В информационной системе GRID особенно остро встает проблема синхронизации информации о пользователях и их правах доступа на всех узлах GRID-установки. С другой стороны, все компоненты распределенного менеджера системы очередей должны быть обеспеченны актуальной информацией о доступности и загруженности вычислительных компонентов GRID. Так как требования по безопасности и отказоустойчивости, предъявляемые к обоим компонентам информационной системы совпадают, то будет логично использовать единый протокол для доставки как информации о пользователях, так и о доступности вычислительных компонентов GRID и решаемых на них задачах. Протокол службы каталогов LDAP хорошо подходит для решения подобной задачи. Использование расширений TLS или SSL гарантирует достоверность доставляемых данных, в то время как SRV-записи в доменной системе имен и протокол распределенной репликации данных между серверами позволяют построить информационную систему требуемого уровня надежности.
LDAP как инфраструктура для доступа к публичным ключам
В директории LDAP можно хранить информацию о сертификатах пользователя, быстро находить все компоненты цепи доверительных связей и эффективно проверять достоверность предъявленного сертификата. Любой объект, хранящийся в системе каталогов, может принадлежать к нескольким классам объектов. Таким образом, объект содержащий сертификат, находящийся в цепочке доверительных связей, также может содержать информацию о вычислительных квотах. Вы-
числительный компонент GRID, получив задачу, удостоверенную сертификатом пользователя и используя PKI (Private key intfrastrucute), реализованную на базе LDAP, может не только проверить, что эта задача действительно поставлена на счет данным пользователем, но и убедиться, что эта группа пользователей еще не исчерпала выделенную им квоту.
LDAP как каталог GRID ресурсов и задач
Одной из отличительных черт GRID-системы является его неоднородная динамически изменяемая архитектура. Количество узлов в GRID, аппаратные характеристики каждого из них, параметры подключения узла в GRID - любая часть этой информации может быть изменена в произвольный момент времени, но при этом изменения не должны сказываться на работоспособности системы в целом. Аппаратные ресурсы, из которых состоит вычислительный GRID, обычно можно объединить в более большие группы, например по признаку принадлежности ресурса одному из участников GRID. Так как администрирование ресурсов производится каждым из участников автономно, то необходимо предоставить инструмент, позволяющий администраторам ресурсов вносить изменения в виртуальную инфраструктуру GRID, отражающие текущее состояние аппаратной части. Помимо этого, если в GRID реализована неоднородность по программному обеспечению, то в профилях вычислительных ресурсов GRID должны храниться данные о версиях установленных на узлах программных пакетов.
Как видно, каталог ресурсов GRID представляет собой иерархическую структуру с разделением прав на модификацию этого каталога в соответствии с административной структурой GRID. С другой стороны, GRID-брокер будет распределять узлы для расчета задачи, в первую очередь обращая внимание на их характеристики, а не на административную субординацию. Для хранения и