Рассмотрите простую реализацию General Parallel File System (GPFS). В современном мире Linux доступно множество файловых систем, например, ext2, ext3, ReiserFS, JFS и т.д. Подобным же образом в кластерной среде нужна файловая система, которая хорошо масштабируется, дает лучшую производительность и обеспечивает высокую отказоустойчивость. IBM GPFS отвечает всем этим требованиям. Она имеет поддержку блоков большого размера с широкой разметкой, параллельный доступ к файлам из нескольких узлов, управление маркерами и многое другое.
Файловая система описывает метод хранения информации на жестком диске. Примерами файловых систем являются ext2, ext3, ReiserFS и JFS. General Parallel File System (GPFS) - это еще один тип файловой системы, доступной для кластерной среды. Цель GPFS - обеспечить лучшую производительность и высокую отказоустойчивость. В данной статье рассматривается простой пример реализации GPFS. Для упрощения вы будете использовать системы с двумя жесткими дисками - первый диск используется для Linux, второй оставлен нетронутым (в "сыром" формате).
Необходимое аппаратное и программное обеспечение перечислено ниже. На рисунке 1 изображена конфигурация системы.
- eServer™ x336
- Red Hat Enterprise Linux Version 4.0 Advanced Server with Update 2
- GPFS Version 2.3
- GPFS Version 2.3.0.9 Fix
Рисунок 1. Примерная конфигурация
Перед началом работы обратите внимание на следующие допущения:
- На всех машинах установлена операционная система Red Hat Enterprise Linux AS (например, RHEL4 AS with Update 2).
- Файл /etc/hosts обновлен на всех узлах.
- SSH настроен таким образом, что пользователь root может войти в любую систему без указания пароля.
- Узлы gpfs1.my.com и gpfs2.my.com работают в качестве GPFS-серверов и предлагают /dev/sdb для хранилища. Узел gpfs3.my.com работает как GPFS-клиент.
- Код GPFS доступен в tar-формате в каталоге /dump.
- Шаги 1, 2, 3, 4 и 5 необходимо выполнить на всех узлах (gpfs1.my.com, gpfs2.my.com и gpfs3.my.com).
- Шаги 6 и 7 необходимо выполнить только на gpfs1.my.com, поскольку на нем установлен gpfs.gpl-2.3.0-9.noarch.rpm.
- Если вам доступен код в tar-формате, извлеките GPFS-файлы, либо смонтируйте CD-ROM или DVD, на которых есть RPM-файлы GPFS, следующим образом:
#cd /dump
#tar zxvf gpfs_code.tar.gz
|
На рисунке 2 показана часть извлеченного содержимого:
Рисунок 2. Cодержимое GPFS
- Извлеките RPM-файлы GPFS следующим образом:
#./gpfs_install-2.3.0-0_i386 --dir /dump |
Эта команда отобразит сообщение "License". Подтвердите его. Для скрытия лицензионного сообщения используйте параметр --silent
.
Рисунок 3. Извлечение GPFS
После извлечения вы должны увидеть:
Рисунок 4. Извлеченные файлы
- Для установки GPFS используйте следующие команды:
#cd /dump
#rpm -ivh gpfs.msg.en_US-2.3.0-0.noarch.rpm gpfs.base-2.3.0-0.i386.rpm
gpfs.docs-2.3.0-0.noarch.rpm gpfs.gpl-2.3.0-0.noarch.rpm OR rpm -ivh *.rpm
|
Рисунок 5. Установка GPFS
Установка gpfs.gpl-2.3.0-0.noarch.rpm необходима только на gpfs1.my.com.
- После установки RPM-файлов GPFS будут доступны показанные ниже бинарные каталоги.
Рисунок 6. Бинарные каталоги
- Для установки обновления GPFS используйте следующие команды:
#tar zxvf gpfs-2.3.0-9.i386.update.tar.gz
#rpm -Uvh gpfs.msg.en_US-2.3.0-9.noarch.rpm gpfs.base-2.3.0-9.i386.rpm
gpfs.docs-2.3.0-9.noarch.rpm gpfs.gpl-2.3.0-9.noarch.rpm OR rpm -Uvh *.rpm
|
Рисунок 7. Установка обновления GPFS
Обновление gpfs.gpl-2.3.0-9.noarch.rpm требуется только на gpfs1.my.com.
- Теперь вы готовы к компоновке GPL-модулей GPFS на выбранном для данной процедуры узле (gpfs1.my.com). Вы сделаете эту процедуру только на одном узле. После этого вы распространите сгенерированные бинарные файлы на другие узлы (gpfs2.my.com и gpfs3.my.com).
#cd /usr/lpp/mmfs/src/config
#cp site.mcr.proto site.mcr
#vi site.mcr
|
Обратитесь к файлу README, расположенному в каталоге /usr/lpp/mmfs/src, для просмотра желательных изменений.
Рисунок 8. GPL-модули GPFS
В приведенном выше примере LINUX_DISTRIBUTION, LINUX_DISTRIBUTION_LEVEL и LINUX_KERNEL_VERSION были специально обновлены для соответствия системе RHEL4 Update 2.
#cd /usr/lpp/mmfs/src
#export SHARKCLONEROOT=/usr/lpp/mmfs/src
#make World
#make InstallImages
|
Рисунок 9. Установка бинарных образов
#cd /usr/lpp/mmfs/bin
#scp mmfslinux mmfs26 lxtrace dumpconv tracedev gpfs2:/usr/lpp/mmfs/bin
/* Скопируйте на все остальные узлы */
|
- Теперь вы готовы создать GPFS-кластер и настроить Network Storage Device (NSD).
- Запустите демон GPFS на всех узлах, используя команду:
#/usr/lpp/mmfs/bin/mmstartup -a |
Рисунок 10. GPFS-демоны
- Создайте файл, который идентифицирует узлы, участвующие в GPFS-кластере.
Рисунок 11. GPFS-узлы
- Создайте отдельный файл, содержащий дисковую информацию для создания NSD.
Рисунок 12. GPFS-диски
- Создайте GPFS-кластер, используя команду:
#/usr/lpp/mmfs/bin/mmcrcluster -p gpfs1.my.com -s gpfs2.my.com -n
/dump/gpfs.nodes -r /usr/bin/ssh -R /usr/bin/scp
|
Рисунок 13. GPFS-кластер
Отобразите детальную информацию о GPFS-кластере, используя команду:
/usr/lpp/mmfs/bin/mmlscluster |
Рисунок 14. Подробная информация о GPFS
- Создайте NSD, используя:
#/usr/lpp/mmfs/bin/mmcrnsd -F /dump/gpfs.disks -v yes |
Рисунок 15. Создание NSD
Отобразите детальную информацию о NSD, используя команду:
/usr/lpp/mmfs/bin/mmlsnsd |
Рисунок 16. Подробная информация о NSD
Содержимое /dump/gpfs.disks меняется после выполнения команды mmcrnsd
.
Рисунок 17. Измененные GPFS-диски
- Создайте файловую систему GPFS, используя:
#/usr/lpp/mmfs/bin/mmcrfs /gpfs gpfsdev -F /dump/gpfs.disks -B
1024K -m 1 -M 2 -r 1 -R 2
|
Рисунок 18. Создание файловой системы GPFS
Приведенная выше команда создает файловую систему GPFS (например, 286GB) и монтирует ее в папке /gpfs. Она также создает запись в файле /etc/fstab на всех узлах, для того чтобы файловая система могла быть автоматически смонтирована после перезагрузки.
Рисунок 19. Файл fstab
- Теперь ваша GPFS-система готова к использованию.
Для деинсталляции RPM-файлов GPFS выполните следующие команды:
#rpm -e gpfs.msg.en_US gpfs.docs gpfs.base
/* gpfs2.my.com и gpfs3.my.com */
#rpm -e gpfs.msg.en_US gpfs.docs gpfs.base gpfs.gpl
/* gpfs1.my.com */
#rm -rf /usr/lpp/mmfs
/* gpfs1.my.com, gpfs2.my.com и gpfs3.my.com */
|