третьей статье данной серии.

Прочтите данный раздел статьи параллельно с документацией по GPFS (см. раздел «Ресурсы«), в частности, следующие материалы:

  • Справочник по администрированию и программированию GPFS V2.3, содержащий подробную информацию о многих административных задачах и GPFS-командах.

  • Руководство по концепциям, планированию и установке GPFS V2.3, содержащее подробное обсуждение планирования GPFS-кластера и действий при установке нового кластера.

  • Руководство по разрешению проблем GPFS V2., содержащее описание действий при устранении проблем и список сообщений об ошибках GPFS.

Распределение уровня переносимости GPFS«).
Это корректный метод, поскольку все компьютеры имеют одинаковую
архитектуру и используют одно и то же ядро. Инструкции по компоновке
GPFS PL можно найти в файле /usr/lpp/mmfs/src/README. Для нашего примера кластера процедура состоит из следующих действий:

  1. Выполните экспорт SHARKCLONEROOT=/usr/lpp/mmfs/src.

  2. Выполните команды cd /usr/lpp/mmfs/src/config, cp site.mcr.proto
    site.mcr
    .

  3. Измените
    новый файл site.mcr так, чтобы он соответствовал используемой
    конфигурации. Оставьте следующие строки не закомментированными:
    • #define GPFS_LINUX
    • #define GPFS_ARCH_X86_64
    • LINUX_DISTRIBUTION = REDHAT_AS_LINUX
    • #define LINUX_DISTRIBUTION_LEVEL 34
    • #define LINUX_KERNEL_VERSION 2042127

    Обратите внимание на то, что символ # не обозначает комментарий.

  4. Выполните команду cd /usr/lpp/mmfs/src.
  5. Создайте GPFS PL, используя команду make World.
  6. Скопируйте GPFS PL в каталог /usr/lpp/mmfs/bin, используя команду make InstallImages. GPFS PL состоит из следующих четырех файлов:
    • tracedev
    • mmfslinux
    • lxtrace
    • dumpconv

  7. Скопируйте набор этих файлов, по одному на каждое используемое ядро, в CSM-структуру для распределения при помощи CFM.

Создание GPFS-кластера

В
данном примере GPFS-кластер создается при помощи нескольких отдельных
действий. Хотя все они не являются необходимыми, это хороший метод
работы с различными типами узлов в кластере (узлами системы хранения
данных или другими).

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

  • Manager
    или client: Определяет, должен ли узел формировать часть пула, из
    которого извлекаются менеджеры конфигурации и файловой системы. Пример
    кластера в этом пуле содержит только узлы хранения данных.

  • Quorum
    или nonquorum: Определяет, должен ли узел учитываться как узел кворума.
    Узлами кворума в примере кластера являются узлы системы хранения данных
    и узел разрешения конфликтов quor001.

Для создания кластера используется следующая команда:

mmcrcluster -n stor.nodes -C gpfs1 -p stor001_s -s stor002_s -r /usr/bin/ssh -R
/usr/bin/scp

  • Флаг -C указывает имя кластера.

  • -p указывает узел сервера первичной конфигурации.

  • -s указывает узел сервера вторичной конфигурации.

  • -r указывает полный путь для удаленного командного процессора, используемого GPFS.

  • -R указывает программу удаленного копирования файлов, используемую GPFS.

Ниже приведен файл-дескриптор узла stor.nodes, используемый в примере:

stor001_s:manager-quorum
stor002_s:manager-quorum
stor003_s:manager-quorum
stor004_s:manager-quorum
quor001_s:client-quorum

Используйте записи, аналогичные <nodename>_s:client-nonquorum,
на более поздних шагах для всех остальных узлов, добавляемых в кластер,
таких как вычислительные узлы, пользовательские узлы и управляющие узлы.

Разрешение unmountOnDiskFail на узлах кворума

Следующим действием является разрешение параметра unmountOnDiskFail на узле разрешения конфликтов с использованием команды mmchconfig unmountOnDiskFail-yes quor001_s. Это предотвращает выдачу отчета о ложных дисковых ошибках менеджеру файловой системы.

Определение сетевых дисков с совместным доступом

Следующим действием является создание дисков, используемых GPFS, при помощи команды mmcrnsd –F disc#.desc.
Выполнение этой команды создает глобальное имя для каждого диска, что
является необходимым шагом, поскольку диски могут иметь различные имена
/dev на каждом узле в GPFS-кластере. Выполните эту команду на всех
дисках, используемых для файловой системы GPFS. На данном этапе
определите первичный и вторичный NSD-серверы для каждого диска; они
используются для операций ввода/вывода (I/O) от имени NSD-клиентов, не
имеющих локального доступа к системе хранения данных SAN.

Флаг -F
используется для указания файла, содержащего дескрипторы диска для
дисков, определяемых как NSD. Для удобства обслуживания в примере
кластера выполните этот процесс один раз на LUN, представленных каждой
системой DS4500, и один раз на диске сервера разрешения конфликтов.
Каждый массив или LUN на каждой системе DS4500 имеет дескриптор в
используемых файлах. Ниже приведен пример строки из disk1.desc:

sdc:stor001_s:stor002_s:dataAndMetadata:1:disk01_array01S

Ниже перечислены поля данной строки по порядку:

  • Имя локального диска на первичном NSD-сервере

  • Первичный NSD-сервер
  • Вторичный NSD-сервер
  • Тип данных
  • Аварийная группа
  • Имя получающегося NSD

Используя описанные выше файлы, определите следующие три аварийные группы в конфигурации:

  • Диски в первом контроллере DS4500, то есть disk01.

  • Диски во втором контроллере DS4500, то есть disk02.
  • Диск сервера разрешения конфликтов на узле кворума.

Запуск GPFS

Следующий шаг — запуск GPFS-кластера путем выполнения следующих действий:

  1. Запустите
    GPFS на всех NSD-серверах одновременно для предотвращения маркировки
    NSD как находящихся в неактивном состоянии. Используйте следующую
    команду: mmstartup -w
    stor001_s,stor002_s,stor003_s,stor004_s
    .

  2. Запустите
    GPFS на всех остальных узлах, не являющихся NSD-серверами (в том числе
    на узле сервера разрешения конфликтов). Используйте следующую команду: mmstartup -w quor001_s,mgmt001_s,...

  3. Запустите GPFS на всех вычислительных узлах с управляющего узла. Используйте следующую команду:
    dsh -N ComputeNodes /usr/lpp/mmfs/bin/mmstartup.

  4. Проверьте состояние всех узлов, просматривая файл /var/adm/log/mmfs.log.latest текущего менеджера файловой системы (обнаруживаемого при помощи команды mmlsmgr <filesystem>) и выводимую информацию из следующей команды:
    mmgetstate -w <nodenames>
    dsh -N ComputeNodes /usr/lpp/mmfs/bin/mmgetstate
    .

Этот метод может показаться чрезмерно предусмотрительным, но он выбран
в качестве масштабируемого метода, который будет работать для очень
большого кластера. Альтернативой указанному выше методу является
использование команды mmstartup –a.
Это работает для кластеров меньшего размера, но может пройти немало
времени до возврата из команды для большого кластера, в котором узлы
могут быть недоступны по различным причинам, например, при проблемах в
сети.

Создание файловой системы GPFS

Для
примера создается одна большая файловая система GPFS с использованием
всех NSD, определенных для GPFS. Обратите внимание на то, что
использованная команда, в отличие от указанной выше команды mmcrnsd,
принимала в качестве аргумента измененные файлы дескрипторов дисков.
Это требует объединения в один файл информации, выводимой на каждом
шаге при создании NSD.

Пример кластера использует следующие настройки:

  • Все NSD (устанавливается при помощи -F).

  • Точка монтирования: /gpfs
  • Автоматическое монтирование: yes (устанавливается при помощи -A).
  • Размер блока: 256KB (устанавливается при помощи -B).
  • Репликация: две копии данных и метаданных (устанавливается при помощи -m, -M, -r, -R).
  • Предположительное число узлов, монтирующих файловую систему 1200 (устанавливается при помощи -n).
  • Квоты разрешены (устанавливается при помощи -Q).

Вот полная команда:

 mmcrfs /gpfs /dev/gpfs -F disk_all.desc -A yes -B 256K -m 2 -M 2
-r 2 -R 2 -n
1200 -Q yes

В первый раз после создания /gpfs она монтируется вручную. Затем, с разрешенным параметром automount, она монтируется автоматически при запуске узлом GPFS.

Разрешение системы квот

Флаг -Q в приведенной выше команде mmcrfs разрешает использование квот (quotas) в файловой системе /gpfs.
Квоты могут быть определены для отдельных пользователей или групп
пользователей. Устанавливается также уровень квот по умолчанию, который
применяется к каждому новому пользователю или группе. Квоты по
умолчанию включаются при помощи команды mmdefquotaon. Изменяются квоты по умолчанию при помощи команды mmdefedquota. Эта команда открывает окно редактора, в котором можно указать их границы. Ниже приведен пример установки границ для квот:

gpfs: blocks in use: 0K, limits (soft = 1048576K, hard = 2097152K)
inodes in use: 0, limits (soft = 0, hard = 0)

Можно изменить отдельные квоты для пользователя или группы, используя команду mmedquota –u <username>. Пользователь может отобразить свою квоту при помощи команды mmlsquota. Пользователь superuser может отобразить состояние квот файловой системы при помощи команды mmrepquota gpfs.

Тонкая настройка

Данный
кластер настроен так, чтобы GPFS запускался автоматически при каждой
начальной загрузке сервера, путем добавления записи в /etc/inittab при помощи команды mmchconfig autoload=yes.

Используйте pagepool (пул страницы) GPFS для кэширования данных пользователя и метаданных файловой системы. Механизм pagepool позволяет GPFS реализовать запросы на чтение (а также запись) асинхронно. Увеличение размера pagepool
увеличивает объем данных или метаданных, которые GPFS может кэшировать,
не требуя синхронных операций ввода/вывода. Значением по умолчанию для pagepool является 64 MB. Максимальное значение GPFS pagepool равно 8 GB. Минимальное разрешенное значение равно 4 MB. На Linux-системах максимальный размер pagepool равен половине физической памяти компьютера.

Оптимальный размер pagepool
зависит от требований приложения и эффективного кэширования его данных,
к которым производится повторный доступ. Для систем с приложениями,
обращающимися к большим файлам, повторно использующим данные,
использующим преимущества функциональности GPFS предвыборки
(prefetching) данных или работающим по схеме случайных операций
ввода/вывода, увеличение значения pagepool может повысить эффективность. Однако, если значение слишком велико, GPFS не запустится.

Для нашего примера кластера используйте значение pagepool 512 MB для всех узлов в кластере.

Оптимизация при помощи сетевых настроек

Для
оптимизации производительности сети и, следовательно, GPFS, разрешите
jumbo-фреймы путем установки размера MTU для адаптера сети хранения
данных в 9000. Оставьте параметр /proc/sys/net/ipv4/tcp_window_scaling
разрешенным, поскольку это настройка по умолчанию. Настройки TCP-окна
подгоняются при помощи CSM-сценариев во время установок, добавляющих
следующие строки в файл /etc/sysctl.conf как на NSD-серверах, так и на NSD-клиентах:

# увеличить границы TCP-буфера Linux
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
# увеличить максимальные размеры и размеры по умолчанию TCP-буфера Linux
net.ipv4.tcp_rmem = 4096 262144 8388608
net.ipv4.tcp_wmem = 4096 262144 8388608
# увеличить max backlog, чтобы избежать пропущенных пакетов
net.core.netdev_max_backlog=2500

Настройка параметров DS4500

Настройки
кэша сервера хранения данных при неправильной их установке могут
повлиять на производительность GPFS. Пример использует следующие
настройки контроллеров DS4500, рекомендованные в документации по GPFS:

  • Read cache: enabled
  • Read ahead multiplier: 0
  • Write cache: disabled
  • Write cache mirroring: disabled
  • Cache block size: 16K

Заключение

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

Об авторе

Грэхэм Уайт фото

Грэхем Уайт (Graham White)
работает специалистом по системному управлению Linux Integration Centre
в отделе Emerging Technology Services офиса IBM Hursley Park в
Великобритании. Он имеет сертификат Red Hat Certified Engineer и
специализируется на широком спектре технологий с открытым исходным
кодом, открытых стандартах и технологиях IBM. В сферу его интересов
входят LAMP, Linux, системы защиты, кластеризация и все аппаратные
платформы IBM. Получил степень бакалавра по вычислительной технике и
управлению с отличием в Exeter University в 2000 году.

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34