Коммерческая реализация кластерной системы хранения данных от IBM. Сама по себе состоит из пачки bash скриптов и нескольких исполняемых файлов, поднимается достаточно просто.
Перво-наперво нужно иметь авторизованный аккаунт у IBM, с хотя бы раз купленной поддержкой. После выполнения этих условий появляется доступ к заветной SpectrumScale, однако и тут не всё так просто и однозначно, как хотелось бы. IBM предоставляет два типа версий - install и update, причём вторая без первой не ставится, хоть и весит примерно столько же, так что качать следует последний install в выбранной ветке + последний update. (Ах да, нас интересует Spectrum Scale Protocols Advanced)
Итак, после долгих переходов по ссылкам и неудобному поиску получаем два вжделенных файла, например
Spectrum_Scale_install-4.1.1.0_x86_64_advanced_protocols Spectrum_Scale_Protocols_Advanced-4.1.1.14-x86_64-Linux-update
Файлы эти представляют собой не более, чем tar gzip архив, с 400+ строчками bash кода в начале. Посему добиваем файлу исполняемый бит и, либо просто запускаем, либо указываем аргумент –dir и путь куда требуется распаковать.
На выходе получаем набор директорий, которые по сути являются отдельными репозиториями. Нас интересует только gpfs_rpms. Утаскиваем его куда-нибудь к себе на сервер с репозиториями, после чего на всех машинах прописываем новый репозиторий. Уменя получилось два файла
/etc/yum.repos.d/gpfs-4.1.1.0.repo:
[gpfs-4.1.1.0] name=IBM GPFS 4.1.1.0 baseurl=http://repo.owlhost.in/centos/7/stable/spectrumscale/4.1.1.0/gpfs_rpms enabled=1 gpgcheck=0
и
/etc/yum.repos.d/gpfs-4.1.1.14.repo:
[gpfs-4.1.1.14] name=IBM GPFS 4.1.1.14 baseurl=http://repo.owlhost.in/centos/7/stable/spectrumscale/4.1.1.14/gpfs_rpms enabled=1 gpgcheck=0
После подготовки репозиториев следует, как водится, yum clean all, после чего установить вполне определённые версии пакетов:
# yum install gpfs.msg.en_US-4.1.1-0 gpfs.gskit-8.0.50-40 gpfs.docs-4.1.1-0 gpfs.crypto-4.1.1-0 gpfs.ext-4.1.1-0 gpfs.base-4.1.1-0 gpfs.gpl-4.1.1-0
После установки базовой пачки пакетов поверх них ставим уже обновления
# yum install gpfs.msg.en_US gpfs.gskit gpfs.docs gpfs.crypto gpfs.ext gpfs.base gpfs.gpl
Следующим шагом на требуется собрать модули gpfs для ядра, делается это в несколько шагов.
Собственно дальше yum clean all и устанавливаем новый пакет gpfs.gplbin*.
Следующий шаг по настройке кластера будет заключаться в раскладывании пользователю root ssh-ключей по всем нодам, которые будут состоять в кластере. Можно конечно попробвать и другого пользователя создать, дать ему права в sudoers и сделать прочие ништяки, но как показал практика - игра не стоит свечь.
И вишенкой на нашем торте будет прописывание всех хостов в /etc/hosts, чтобы кластер не зависел от внешних DNS'ов и в случае “он уронил DNS” не потерял связность.
Ах да, чуть не забыл, ещё было бы неплохо подать на все ноды lun'ы с san-хранилища, хотя можно хранить данные и на локальных дисках, этого никто не запрещает делать.
После того как доступы везде предоставлены, root может беспрепятственно ходить с ноды на ноду, часы отсинхронизированы, а хосты все прописаны настало время приступать к самому интересному, а именно - созданию кластера.
Всё начинается с команды:
# /usr/lpp/mmfs/bin/mmcrcluster -N owlnas-mgt1:manager-quorum -C owlnas -r /usr/bin/ssh -R /usr/bin/scp
Если возникают проблемы авторизации - возможно запрещено авторизовываться root'ом. Нужно проверить, что авторизация возможна. Если нет, то можно подкрутить следующий параметр в конфиге sshd_config:
PermitRootLogin without-password
В случае успеха можно посмотреть как чувствует себя кластер:
# /usr/lpp/mmfs/bin/mmlscluster
на что сервер должен ответить примерно такое:
GPFS cluster information ======================== GPFS cluster name: owlnas GPFS cluster id: 6990092231022051608 GPFS UID domain: owlnas Remote shell command: /usr/bin/ssh Remote file copy command: /usr/bin/scp Repository type: CCR Node Daemon node name IP address Admin node name Designation ---------------------------------------------------------------------------- 1 owlnas-mgt1 10.1.0.1 owlnas-mgt1 quorum-manager
Теперь нужно задать серверу тип его лицензии 1)
# /usr/lpp/mmfs/bin/mmchlicense server --accept -N owlnas-mgt1
После этого пропадёт навязчивая информацию о том, что есть серверы, которым не задана лицензия. Запускаем нашу первую ноду в кластере:
# /usr/lpp/mmfs/bin/mmstartup -N owlnas-mgt1
После чего проверяем статус следующей командой
# /usr/lpp/mmfs/bin/mmgetstate -a -L
Которая поделится с нами информацией о текущем статусе нод в кластере, что-то вроде этого:
Node number Node name Quorum Nodes up Total nodes GPFS state Remarks ------------------------------------------------------------------------------------ 1 owlnas-mgt1 2 3 14 active quorum node
Собственно в уже существующий кластер нужно довабить ноды 2). Делается это достаточно простыми манипуляциями:
# /usr/lpp/mmfs/bin/mmaddnode -N owlnas-osd1,owlnas-osd2,owlnas-osd3 # /usr/lpp/mmfs/bin/mmchlicense client --accept -N owlnas-osd1,owlnas-osd2,owlnas-osd3 # /usr/lpp/mmfs/bin/mmstartup -N owlnas-osd1,owlnas-osd2,owlnas-osd3
После чего mmlscluster и mmgetstate должны показать наши три новые ноды:
GPFS cluster information ======================== GPFS cluster name: owlnas GPFS cluster id: 6990092231022051608 GPFS UID domain: owlnas Remote shell command: /usr/bin/ssh Remote file copy command: /usr/bin/scp Repository type: CCR Node Daemon node name IP address Admin node name Designation ---------------------------------------------------------------------------- 1 owlnas-mgt1 10.1.0.1 owlnas-mgt1 quorum-manager 2 owlnas-osd1 10.1.0.11 owlnas-osd1 3 owlnas-osd2 10.1.0.12 owlnas-osd2 4 owlnas-osd3 10.1.0.13 owlnas-osd3
Node number Node name GPFS state ------------------------------------------ 1 owlnas-mgt1 active 2 owlnas-osd1 active 3 owlnas-osd2 active 4 owlnas-osd3 active
Похоже всё готово для добавления дисков.
Осуществляется достаточно странным образ, с помощью manifest файла. Каждый диск должен быть описан следующим блоком в текстовом файле 3)
%nsd: device=<[vsh]d[a-z]|dm-[0-9]> nsd=<volume-name> usage=dataAndMetadata
После заполнения файла нужными разделами скармливаем его следующей программе
# /usr/lpp/mmfs/bin/mmcrnsd -F diskdef.txt
В случае успеха последняя отрапортует, что всё хорошо и можно будет увидеть наши диски в кластере:
# /usr/lpp/mmfs/bin/mmlsnsd
File system Disk name NSD servers --------------------------------------------------------------------------- (free disk) volume1 (directly attached) (free disk) volume2 (directly attached)
В общем и целом на этом добавление дисков заканчивается.
Для кластера можно подкрутить некоторые важные параметры, такие как максимальный размер блока или размер страницы.
Поглядеть уже настроенное можно следующей командой:
# /usr/lpp/mmfs/bin/mmlsconfig
Подкрутить можно следующее:
Команда для подкручивания:
# /usr/lpp/mmfs/bin/mmchconfig key=value
Теперь, после всех этих подготовительных работ требуется наконец создать файловую систему поверх нашего кластера:
# /usr/lpp/mmfs/bin/mmcrfs gpfs -F diskdef.txt -A yes -T /gpfs
В случае успеха и при наличии на всех нодах директории /gpfs можно наконец подмонтировать нашу кластерную ФС
# /usr/lpp/mmfs/bin/mmmount gpfs01 -a
После этой команды на всех нодах, в директории /gpfs должна быть смонтирована ФС, доступная для чтения/записи на всех нодах.
Для разделения квот по разным группам внутри одной ФС можно использовать так называемые FileSet. Сначала мы его создаём на уже существующей ФС:
# /usr/lpp/mmfs/bin/mmcrfileset gpfs01 fs01
А потом линкуем в директорию, которая нам понравится
# /usr/lpp/mmfs/bin/mmlinkfileset gpfs01 fs01 /gpfs/fs01
Ещё разок задеплоить по инструкции, наверняка я что-то забыл.