Table of Contents

Развертывание файловой системы GPFS

Введение.

Данная статья описывает процесс создания отказоустойчивого файлового хранилища емкостью 90 Тб на базе файловой системы GPFS v 3.5. Файловая система развернута на трех Linux RedHat серверах c подключенными локальными дисками. В качестве клиентов файловой системы используются как Linux (Centos) так и Windows 2008R2 операционные системы. Для подключение windows клиентов используется Ethernet 1Gbit/s. В качестве BackEnd - Infiniband RDMA

В один прекрасный день развернутые online-сервисы kosmosnimki.ru гео-пространственных данных исчерпали емкости хранилища EMC ISILON X200. Урезание бюджета потребовало найти более дешевое решение для хранения данных. (Ориентировочная стоимость хранения 1Тб данных на EMC ISILON X200 составила 120 т.р или 4k$. Достаточно “болезненно” была воспринята и стоимость продления поддержки 700 т.р/год, при стоимости решения в 4.6 млн.р за 45 ТБ хранения на SATA дисках)

Особенностью хранения данных для сервиса kosmosnimki является наличие большого количества файлов (до 300000) в рамках одной директории размером ~80 MB каждый.
Дополнительно появилась задача по развертыванию Active/Passive Postgresql cluster для сервиса osm. Для обеспечения высокой скорости поиска, общее хранилище должно быть на SSD. С учетом особенностей работы сервисов (обеспечения как минимального отклика так и скорости чтения/записи) было выбрано хранилище на базе GPFS.

Файловая система GPFS является одним из вариантов распределенной файловой системы. К возможностям GPFS относятся:

Архитектура GPFS.

Файловая система GPFS использует следующие структуры данных:

Inodes и indirect block представляют метаданные. Data blocks - данные.

Inodes маленьких файлов и директорий так же содержат и данные. Для обеспечения возможности хранения (адресация) очень больших файлов используется дополнительный уровень - indirect block.

Data block cостоит из 32 subblocks. При создании файловой системы необходимо выбирать размер блока равный 32*(размер блока физического носителя или RAID тома).
Учитывайте , что на дисках размером более 2Тб размер блока 4k, на SSD дисках page size 8k.

Файловая системы GPFS состоит из:

Диск или RAID том представляется как Network Shared Disk - NSD. NSD могут быть как локально установленными на NSD серверах так и внешними сетевыми хранилищами, подключенными к NSD серверам.

Свойства репликации ФС задаются во время создания ФС и используют значение failure group для определения места записи данных/метаданных. Копии данных/метаданных находятся в разных failure group.

Значение failure group задается при создании NSD

За создание N-реплик данных отвечает клиент (в данном случае под клиентом подразумевается сторона которая записывает данные). Таким образом скорость записи данных будет не более (пропускная полоса)/(число реплик)

Требования и расчеты .

Требуется организовать отказоустойчивое хранилище со следующими свойствами:

Известно:

Расчеты:

Обеспечение высокой скорости поиска возможно при хранении метаданных на SSD дисках.

Расчет необходимого дискового пространства для метаданных:

Vmeta = ( Vhdd * Ksub /Shdd + Vssd * Ksub /Sssd) * Sinode * Kext

Vmeta = ( 90×1012 * 8 / 50×106 + 1.4×1012 * 8 / 1×106 )* 4096 * 3 = ~320 Гб.

Для обеспечение высокой скорости поиска , метаданные будут хранится на SSD (RAID 1).
Для обеспечения надежности выберем количество реплик для данных и метаданных - 2 .

Схема подключения и оборудование .

Схема подключения

500

Каждый сервер gpfs-nodeX и linux-nodeX подключены к каждому из Ethernet/Linux коммутаторов. Для подключения к Ethernet коммутатору используются bonding.

Оборудование

Исходя из расчетов…

Коммутаторы Infeniband (2шт) - Infiniband Mallanox IS5023
Коммутаторы Ethernet (2шт) - Cisco WS-C2960S-48TD-L + stack module
Сервера gpfs-nodeX (3шт):

Type Model Quantity
Chassis Supermicro SC846TQ-R900B 1
MB Supermicro X9SRL-F 1
CPU Intel® Xeon® Processor E5-2640 1
MEM KVR13LR9D4/16HM 4
Controller Adaptec RAID 72405 1
LAN Intel <E1G44ET2> Gigabit Adapter Quad Port (OEM) PCI-E x4 10 / 100 / 1000Mbps 1
Infiniband Mallanox MHQH29C-XTR 1
IB cables MC2206310-003 2
System HDD 600 Gb SAS 2.0 Seagate Cheetah 15K.7 < ST3600057SS> 3.5“ 15000rpm 16Mb 2
SSD 240 Gb SATA 6Gb / s OCZ Vertex 3 <VTX3-25SAT3-240G> 2.5” MLC+3.5“ adapter 6
HDD 4Tb SATA 6Gb / s Hitachi Ultrastar 7K4000 <HUS724040ALE640> 3.5” 7200rpm 64Mb 16

Количество PVU возможно посчитать здесь
Стоимость оборудования включая 3 серверные и 5 клиентских лицензий IBM GPFS составила ~3.3 млн. руб или 100 k$ Таким образом стоимость стоимость 1 Тб хранения составила ~35 т.р или 1.11 k$. Так как инфраструктура (коммутаторы) позволит расширение, стоимость 1Тб хранения будет только падать

Конфигурация и настройка ОС

Коротко о нюансах начальной настройки ОС RedHat на узлах gpfs-nodeX и узлах linux-nodeX

1. (для gpfs-nodeX) Для системного раздела использовались SAS диски. На контроллере были созданы два тома RAID1 и 20 single volume. Для всех томов, предназначенных для GPFS. Необходимо отключить read/write cache. С включенным cache наблюдаласть потеря NSD, приводящая к разрушению пула и потере данных. Данная проблема возникала при перезарузке узла. Все остальные диски подключены как single ОС устанавливалась в минимальном варианте. Использовался входящий в состав ОС RedHat и Centos стандартный набор Infiniband. Устанавливались дополнительные пакеты

yum groupinstall "Infiniband Support"
yum groupinstall "Development tools"
yum install bc tcl tk tcsh mc ksh libaio ntp ntpdate openssh-clients wget tar net-tools rdma opensm man infiniband-diags
chkconfig rdma on
chkconfig opensm on

2. Все ethernet порты объединены в bond (mode 6)
3. Между всеми узлами сделан без парольный доступ для пользователя root по ssh. На одном из узлов создаем ключ.

ssh-keygen -t dsa (создаем ключ без пароля)
cd /root/.ssh
cat id_dsa.pub >> authorized_keys
chown root.root authorized_keys
chmod 600 authorized_keys
echo "StrictHostKeyChecking no" > config

Указанные файлы копируем на все узлы в директорию /root/.ssh/
Проверяем что все узлы доступны между собой по ssh. Перед первым запуском gpfs необходимо провести соединение по ssh между всеми узлами чтобы все узлы прописались в /root/.ssh/known_hosts
Возможно использовать следующий скрипт

#!/bin/sh
for j in gpfs-node2 #прописываем имена всех узлов
do if [ `hostname` != "$j" ]; then
echo "from `hostname` to $j"
ssh $j hostname
for i in gpfs-node2 #прописываем имена всех узлов
do if [ `ssh $j hostname` != "$i" ]; then
echo "from `ssh $j hostname` to $i"
ssh $j "ssh $i hostname && exit"
fi
done
fi
done

4. В файле /etc/hosts прописываются все узлы.
5. Проверяем наличие /usr/lib64/libibverbs.so если отсутствует

ln -s /usr/lib64/libibverbs.so.1.0.0 /usr/lib64/libibverbs.so

6. Настраиаем ntpd сервисы для синхронизации времени на всех узлах

7. IPTABLES
Разрешить все либо указать порты sshd и порты используемые в GPFS. (см. документацию на сайте IBM)

8. (Для linux-nodeX необязательно) Установлен tuned c активным профилем latency-performance

yum install tuned
tuned-adm profile latency-performance

9. Настройки sysctl.conf

net.ipv4.tcp_timestamps=0
net.ipv4.tcp_sack=0
net.core.netdev_max_backlog=250000
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.rmem_default=16777216
net.core.wmem_default=16777216
net.core.optmem_max=16777216
net.ipv4.tcp_mem=16777216 16777216 16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216

10. Увеличите ограничение по кол-ву открытых файлов /etc/security/limits.conf (зависит от ваших требований)

Коротко о нюансах начальной настройки ОС Windows 2008 R2 на узлах windows-nodeX

На нормализацию работы на windows узлах быдо потрачено 3 месяца. До выхода очередного patch общение с техподдержкой выливалось в отправку бесконечных логов и “подпирание костылями”. Данной работой занимался мой коллега - Дмитрий Пугачев

1. Установка SUA
Utilities and SDK for Subsystem for UNIX-based Applications_AMD64.exe - служебные программы и подсистема приложений UNIX, доступна для загрузки с сайта. Описание тут

2. Установка компонентов OpenSSH

/etc/init.d/sshd stop
/etc/init.d/sshd start

3. Windows6.1-KB2639164-x64.msu - [дополнительно] обновление для Windows Server 2008 R2 SP1, которое устраняет проблемы при установке GPFS

4. Создание пользователя root

5. Firewall и UAC

Установка GPFS

REDHAT/CENTOS

1. Установка системы

./gpfs_install-3.5.0-0_x86_64 --text-only
cd /usr/lpp/mmfs/3.5/
rpm -ivh *.rpm

2. Установка update-ов (перед установкой скачать в дирректорию)

cd /usr/lpp/mmfs/3.5/update
rpm -Uvh *.rpm

3. Компиляцию модуля ядра и установка

cd /usr/lpp/mmfs/src && make Autoconfig && make World && make rpm
rpm -ivh ~/rpmbuild/RPMS/x86_64/gpfs.gplbin*

для Centos

cd /usr/lpp/mmfs/src && make LINUX_DISTRIBUTION=REDHAT_AS_LINUX Autoconfig && make World && make rpm
rpm -ivh ~/rpmbuild/RPMS/x86_64/gpfs.gplbin*

4. Прописываем пути

echo 'export PATH=$PATH:/usr/lpp/mmfs/bin' > /etc/profile.d/gpfs.sh
export PATH=$PATH:/usr/lpp/mmfs/bin

WINDOWS

1. gpfs-3.5-Windows-license.msi - обязательный компонент лицензии
2. gpfs-3.5.0.10-WindowsServer2008.msi - последнее обновление GPFS, на дату написания статьи. Обновления доступны на странице

GPFS установлена

Настройка GPFS кластера

Вся настройка выполняется с одного узла. В указанном случае для обеспечения отказоустойчивости GPFS кластера используется quorum.

1. Создание файла с описанием узлов.

vi /root/gpfs_create

gpfs-node1:quorum-manager

gpfs-node2:quorum-manager
gpfs-node3:quorum-manager
linux-node1:client
linux-node2:client
windows-node1:client
windows-node2:client

2. Создание кластера

mmcrcluster  -N /root/gpfs_create -p gpfs-node1 -s gpfs-node2 -r /usr/bin/ssh -R /usr/bin/scp -C gpfsstorage0

проверяем успех с помощью

mmlscluster

применяем лицензии

mmchlicense server --accept -N gpfs-node1,gpfs-node2,gpfs-node3
mmchlicense client --accept -N linux-node1,linux-node2,windows-node1,windows-node2

проверяем лицензии

mmlslicence -L

3. Создание NSD
В системе созданы 5 пулов. Системный, postgres и 3 пулов для дисковых данных для оптимального распределения i/o (Максимальное количество пулов в рамках одной файловой системы - 8). Данные и метаданные будут хранится отдельно. Для хранения метаданных используются SSD - диски (RAID 1). GPFS-ограничение (В рамках одной файловой системы метаданные могут хранится только на системном пуле).

Создание файла описания NSD.

Формат:
block dev:node name::type of data:failure group number:pools name:
block dev - sd* 
type of data - metadataOnly,dataOnly,dataAndMetadata

Для обеспечения отказоустойчивости на уровне узлов для каждого узла хранения используется свой номер failure group. При репликации, данные всегда реплицируюутся в рамках одного пула на NSD с разными failure group.

cat /root/nsd_creation  

sdb:gpfs-node1::metadataOnly:3101:node1GPFSMETA::
sdc:gpfs-node1::dataOnly:3101:node1SSD240GNSD01:poolpostgres:
sdd:gpfs-node1::dataOnly:3101:node1SSD240GNSD02:poolpostgres:
sde:gpfs-node1::dataOnly:3101:node1SSD240GNSD03:poolpostgres:
sdf:gpfs-node1::dataOnly:3101:node1SSD240GNSD04:poolpostgres:
sdg:gpfs-node1::dataOnly:3101:node1HDD4TNSD01::
sdh:gpfs-node1::dataOnly:3101:node1HDD4TNSD02::
sdi:gpfs-node1::dataOnly:3101:node1HDD4TNSD03::
sdj:gpfs-node1::dataOnly:3101:node1HDD4TNSD04::
sdk:gpfs-node1::dataOnly:3101:node1HDD4TNSD05:pool1:
sdl:gpfs-node1::dataOnly:3101:node1HDD4TNSD06:pool1:
sdm:gpfs-node1::dataOnly:3101:node1HDD4TNSD07:pool1:
sdn:gpfs-node1::dataOnly:3101:node1HDD4TNSD08:pool1:
sdo:gpfs-node1::dataOnly:3101:node1HDD4TNSD09:pool2:
sdp:gpfs-node1::dataOnly:3101:node1HDD4TNSD10:pool2:
sdq:gpfs-node1::dataOnly:3101:node1HDD4TNSD11:pool2:
sdr:gpfs-node1::dataOnly:3101:node1HDD4TNSD12:pool2:
sds:gpfs-node1::dataOnly:3101:node1HDD4TNSD13:pool3:
sdt:gpfs-node1::dataOnly:3101:node1HDD4TNSD14:pool3:
sdv:gpfs-node1::dataOnly:3101:node1HDD4TNSD15:pool3:
sdu:gpfs-node1::dataOnly:3101:node1HDD4TNSD16:pool3:
sdb:gpfs-node2::metadataOnly:3201:node2GPFSMETA::
sdc:gpfs-node2::dataOnly:3201:node2SSD240GNSD01:poolpostgres:
sdd:gpfs-node2::dataOnly:3201:node2SSD240GNSD02:poolpostgres:
sde:gpfs-node2::dataOnly:3201:node2SSD240GNSD03:poolpostgres:
sdf:gpfs-node2::dataOnly:3201:node2SSD240GNSD04:poolpostgres:
sdg:gpfs-node2::dataOnly:3201:node2HDD4TNSD01::
sdh:gpfs-node2::dataOnly:3201:node2HDD4TNSD02::
sdi:gpfs-node2::dataOnly:3201:node2HDD4TNSD03::
sdj:gpfs-node2::dataOnly:3201:node2HDD4TNSD04::
sdk:gpfs-node2::dataOnly:3201:node2HDD4TNSD05:pool1:
sdl:gpfs-node2::dataOnly:3201:node2HDD4TNSD06:pool1:
sdm:gpfs-node2::dataOnly:3201:node2HDD4TNSD07:pool1:
sdn:gpfs-node2::dataOnly:3201:node2HDD4TNSD08:pool1:
sdo:gpfs-node2::dataOnly:3201:node2HDD4TNSD09:pool2:
sdp:gpfs-node2::dataOnly:3201:node2HDD4TNSD10:pool2:
sdq:gpfs-node2::dataOnly:3201:node2HDD4TNSD11:pool2:
sdr:gpfs-node2::dataOnly:3201:node2HDD4TNSD12:pool2:
sds:gpfs-node2::dataOnly:3201:node2HDD4TNSD13:pool3:
sdt:gpfs-node2::dataOnly:3201:node2HDD4TNSD14:pool3:
sdv:gpfs-node2::dataOnly:3201:node2HDD4TNSD15:pool3:
sdu:gpfs-node2::dataOnly:3201:node2HDD4TNSD16:pool3:
sdb:gpfs-node3::metadataOnly:3301:node3GPFSMETA::
sdc:gpfs-node3::dataOnly:3301:node3SSD240GNSD01:poolpostgres:
sdd:gpfs-node3::dataOnly:3301:node3SSD240GNSD02:poolpostgres:
sde:gpfs-node3::dataOnly:3301:node3SSD240GNSD03:poolpostgres:
sdf:gpfs-node3::dataOnly:3301:node3SSD240GNSD04:poolpostgres:
sdg:gpfs-node3::dataOnly:3301:node3HDD4TNSD01::
sdh:gpfs-node3::dataOnly:3301:node3HDD4TNSD02::
sdi:gpfs-node3::dataOnly:3301:node3HDD4TNSD03::
sdj:gpfs-node3::dataOnly:3301:node3HDD4TNSD04::
sdk:gpfs-node3::dataOnly:3301:node3HDD4TNSD05:pool1:
sdl:gpfs-node3::dataOnly:3301:node3HDD4TNSD06:pool1:
sdm:gpfs-node3::dataOnly:3301:node3HDD4TNSD07:pool1:
sdn:gpfs-node3::dataOnly:3301:node3HDD4TNSD08:pool1:
sdo:gpfs-node3::dataOnly:3301:node3HDD4TNSD09:pool2:
sdp:gpfs-node3::dataOnly:3301:node3HDD4TNSD10:pool2:
sdq:gpfs-node3::dataOnly:3301:node3HDD4TNSD11:pool2:
sdr:gpfs-node3::dataOnly:3301:node3HDD4TNSD12:pool2:
sds:gpfs-node3::dataOnly:3301:node3HDD4TNSD13:pool3:
sdt:gpfs-node3::dataOnly:3301:node3HDD4TNSD14:pool3:
sdv:gpfs-node3::dataOnly:3301:node3HDD4TNSD15:pool3:
sdu:gpfs-node3::dataOnly:3301:node3HDD4TNSD16:pool3:

4. Настройки и запуск GPFS

Для использования RDMA необходимо в рамках gpfs

mmchconfig verbsRdma=enable
mmchconfig verbsPorts=“mlx4_0/1 mlx4_0/2” -N gpfs-node1,gpfs-node2,gpfs-node3,linux-node1,linux-node2

Для оптимизации производительности

mmchconfig maxMBpS=16000 (значение по умолчанию для версии GPFS 3.5 - 2048)
mmchconfig pagepool=32000M (размер cache)

Запуск GPFS. (На всех узлах)

mmstartup -a

Проверить

mmgetstate -a
   Node number  Node name        GPFS state
------------------------------------------
     1      gpfs-node1       active
     2      gpfs-node2       active
     3      gpfs-node3       active
     5      linux-node1      active
     7      linux-node2      active
     8      windows-node1    active
     9      windows-node2    active

Проверка работы RDMA в логах (Не для Windows nodes):

cat /var/adm/ras/mmfs.log.latest
Thu Jul  4 21:14:49.084 2013: mmfsd initializing. {Version: 3.5.0.9   Built: Mar 28 2013 20:10:14} ...
Thu Jul  4 21:14:51.132 2013: VERBS RDMA starting.
Thu Jul  4 21:14:51.133 2013: VERBS RDMA library libibverbs.so (version >= 1.1) loaded and initialized.
Thu Jul  4 21:14:51.225 2013: VERBS RDMA device mlx4_0 port 1 opened.
Thu Jul  4 21:14:51.226 2013: VERBS RDMA device mlx4_0 port 2 opened.
Thu Jul  4 21:14:51.227 2013: VERBS RDMA started.

Создание файловой системы и установка политик размещения, cписков NFSv4 доступа и снапшотов

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

mmcrfs /gpfsbig /dev/gpfsbig -F /root/nsd_creation  -A yes -B 256K -Q no -v yes -r 2 -R 2 -m 2 -M 2

2. Политики размещения файлов на пулах

Для балансировки данных между пулами system и pool1-4 используется функция RAND. Как выяснилось, функция RAND имеет не линейное распределение, в отличии о отакойже функции C random().
Опытным путем були получены следующие результаты.

Тестирование проводилось при помощи записи 6000 файлов, просмотра распределения файлов по пулам и итерационного изменения политик размещения.

Функция RAND не работает с Windows узлами. При использовании ниже приведенной политики, все данные сохраняемые на windows узлах будут положены в default pool

Ниже тестовая политика.

mmlspolicy gpfsbig -L
RULE 'LIST_1' LIST 'allfiles' FROM POOL 'system'
RULE 'LIST_2' LIST 'allfiles' FROM POOL 'pool1'
RULE 'LIST_3' LIST 'allfiles' FROM POOL 'pool2'
RULE 'LIST_4' LIST 'allfiles' FROM POOL 'pool3'
RULE 'to_pool1' SET POOL 'pool2' LIMIT(99) WHERE INTEGER(RAND()*100)<24
RULE 'to_pool2' SET POOL 'pool3' LIMIT(99) WHERE INTEGER(RAND()*100)<34
RULE 'to_pool3' SET POOL 'pool4' LIMIT(99) WHERE INTEGER(RAND()*100)<50
RULE DEFAULT SET POOL 'system'

Приведены два независимых результата распределения файлов по пулам
1.

Rule#	Hit_Cnt	KB_Hit	Chosen	KB_Chosen	KB_Ill	Rule
  0	1476	0	1476	0	0	RULE 'LIST_1' LIST 'allfiles' FROM POOL 'system'
  1	1436	0	1436	0	0	RULE 'LIST_2' LIST 'allfiles' FROM POOL 'pool1'
  2	1581	0	1581	0	0	RULE 'LIST_3' LIST 'allfiles' FROM POOL 'pool2'
  3	1507	0	1507	0	0	RULE 'LIST_4' LIST 'allfiles' FROM POOL 'pool3'

2.

  0	1446	0	1446	0	0	RULE 'LIST_1' LIST 'allfiles' FROM POOL 'system'
  1	1524	0	1524	0	0	RULE 'LIST_2' LIST 'allfiles' FROM POOL 'pool1'
  2	1574	0	1574	0	0	RULE 'LIST_3' LIST 'allfiles' FROM POOL 'pool2'
  3	1456	0	1456	0	0	RULE 'LIST_4' LIST 'allfiles' FROM POOL 'pool3'

Итоговая политика

cat /root/policy
RULE 'ssd' SET POOL 'poolpostges' WHERE USER_ID = 26
RULE 'to_pool1' SET POOL 'pool1' LIMIT(99) WHERE INTEGER(RAND()*100)<24
RULE 'to_pool2' SET POOL 'pool2' LIMIT(99) WHERE INTEGER(RAND()*100)<34
RULE 'to_pool3' SET POOL 'pool3' LIMIT(99) WHERE INTEGER(RAND()*100)<50
RULE DEFAULT SET POOL 'system'

Тестирование политик

mmchpolicy gpfsbig /root/policy -I test

Установка политик

mmchpolicy gpfsbig /root/policy -I yes

Проверка установленных политик

mmlspolicy gpfsbig -L

3. Списки доступа NFSv4

Лучший способ создания NFSv4 acl - использование windows сервера.

Под Linux создается файл или директория с правами root:root и 777. Затем права меняются под windows.

mmgetacl /gpfsbig/Departments/planning/
#NFSv4 ACL
#owner:root
#group:root
#ACL flags:
#  DACL_PRESENT
#  DACL_AUTO_INHERITED
special:owner@:rwxc:allow
(X)READ/LIST (X)WRITE/CREATE (X)MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
(-)DELETE    (X)DELETE_CHILD (X)CHOWN (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:r-x-:allow
(X)READ/LIST (-)WRITE/CREATE (-)MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
(-)DELETE    (-)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
group:SCANEX\dg_itengineer:rwxc:allow:FileInherit:DirInherit
(X)READ/LIST (X)WRITE/CREATE (X)MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
(X)DELETE    (X)DELETE_CHILD (X)CHOWN (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED

4. Снапшоты
Скрипт создает снапшот и удаляет снапшот созданный 30 днями ранее. Запускается на gpfs-node1 по cron раз в сутки

 cat /scripts/gpfs_snap_cr
 #!/bin/sh
 num=`/bin/date "+%Y%m%d"`
 nums=`/bin/date "+%s"`
 numms=`expr $nums - 2592000`
 numm=`/bin/date --date=@$numms "+%Y%m%d"`
 /usr/lpp/mmfs/bin/mmcrsnapshot gpfsbig gpfsbig$num
 /usr/lpp/mmfs/bin/mmdelsnapshot gpfsbig gpfsbig$numm

Монтирование

mmmount gpfsbig

На Linux-нодах появится смонтированные раздел /gpfsbig
На Windows-нодах необходимо раздел смонтировать вручную

mmmount gpfsbig Y

Тестирование

Для тестирования скорости записи i/o использовался скрипт

#!/bin/sh
k=1
if [ $k -le 2 ]; then
   count=30000
 fi
if [[ $k -le 6 ] && [ $k -gt 1 ]]; then
   count=10000
  fi
if [ $k -gt 5 ]; then
   count=3000
 fi
for ((i=1; i<=$k; i++ ))
 do
  dd if=/dev/zero of=/gpfsbig/tests/test$k$i.iso  bs=1M count=$count &>/gpfsbig/tests/$k$i &
done

Для тестирования скорости чтения i/o

#!/bin/sh
k=1
if [ $k -le 2 ]; then
 count=30000
fi
if [[ $k -le 6 ] && [ $k -gt 1 ]]; then
   count=10000
 fi
if [ $k -gt 5 ]; then
  count=3000
 fi
for ((i=1; i<=$k; i++ ))
 do
  dd if=/gpfsbig/tests/test$k$i.iso of=/dev/null  bs=1M count=$count &>/gpfsbig/tests/rd$k$i &
 done

Использовались следующие значения k 1,2,4,8,16,32,64

one file average write speed (k=1) - 190 MB/s
one file average write speed (k=2) - 176 MB/s
one file average write speed (k=4) - 130 MB/s
one file average write speed (k=8) - 55.3 MB/s
one file average write speed (k=16) - 20.5 MB/s
one file average write speed (k=32) - 15.7 MB/s
one file average write speed (k=64) - 8.2 MB/s

one file average read speed (k=1) - 290 MB/s
one file average read speed (k=2) - 227 MB/s
one file average read speed (k=4) - 186 MB/s
one file average read speed (k=8) - 76 MB/s
one file average read speed (k=16) - 32 MB/s
one file average read speed (k=32) - 20.7 MB/s
one file average read speed (k=64) - 11.9MB/s

Все то же для SSD.

one file average write speed (k=1) - 1.7 GB/s
one file average write speed (k=2) - 930 MB/s
one file average write speed (k=4) - 449 MB/s
one file average write speed (k=8) - 235 MB/s
one file average write speed (k=16) - 112 MB/s
one file average write speed (k=32) - 50 MB/s
one file average write speed (k=64) - 21 MB/s

one file average read speed (k=1) - 3.6 GB/s
one file average read speed (k=2) - 1.8 GB/s
one file average read speed (k=4) - 889 MB/s
one file average read speed (k=8) - 446 MB/s
one file average read speed (k=16) - 222 MB/s
one file average read speed (k=32) - 110 MB/s
one file average read speed (k=64) - 55 MB/s

При записи и чтении на HDD , в случае одного пула при малых k были в 3 три раза выше. Но вероятность потери пула из-за выхода из строя диска , тоже выше.

Заключение.

Файловая система GPFS оказалась очень производительной и полностью оправдала потраченное время.
Для оптимизации стоимости лицензий лучше взять процессор Intel® Xeon® Processor E5-2643. Если вы не собираетесь узлы хранения использовать как нагруженные сервера NFS,Samba то взять Intel® Xeon® Processor E5-2609.
Удачного развертывания.

Об авторе

Profile автора

Ссылки.

1. Official documentation General Parallel File System (GPFS)
2. RedBook IBM Implementing the IBM General Parallel File System (GPFS) in a Cross Platform Environment
3. IBM Cluster Information Center Website
4. Tutorial for GPFS v.3.4 from V.Sapunenko