Развертывание файловой системы 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 относятся:
раздельное хранения данных и мета-данных
репликация данных/мета-данных (хранение нескольких копий на разных узлах)
снапшоты
квоты
-
политики хранения данных (при наличии нескольких пулов данных)
использование как Linux так и Windows узлов одновременно
использование RDMA/Infiniband (Только для Linux узлов)
Архитектура GPFS.
Файловая система GPFS использует следующие структуры данных:
inodes
indirect blocks
data blocks
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 серверам.
policies - политики хранения данных (файлов)
filesets - возможность работы с набором данных в рамках файловой системы. (Например если вам необхоима реализация разных политик снапшотов для разных пулов. Или например привязка отдельной дирретктории к пулу.)
Свойства репликации ФС задаются во время создания ФС и используют значение failure group для определения места записи данных/метаданных.
Копии данных/метаданных находятся в разных failure group.
Значение failure group задается при создании NSD
За создание N-реплик данных отвечает клиент (в данном случае под клиентом подразумевается сторона которая записывает данные). Таким образом скорость записи данных будет не более (пропускная полоса)/(число реплик)
Требования и расчеты .
Требуется организовать отказоустойчивое хранилище со следующими свойствами:
Высокая скорость случайной записи/чтения
Емкость дискового пула 95 ТБ
Емкость SSD пула 1.4 ТБ
Скорость чтения записи для заданного пользователя 1.7 ГБ/c на SSD pool.
Стоимость 1Тб хранения не более 34 т.р или 1k$
Известно:
Расчеты:
Обеспечение высокой скорости поиска возможно при хранении метаданных на SSD дисках.
Расчет необходимого дискового пространства для метаданных:
Vhdd - Объем пр-ва на дисках в байтах
Vssd - Объем пр-ва на SSD в байтах
Shdd - Cредний размер файла на дисковом пуле в байтах
Sssd - Cредний размер файла на SSD пуле в байтах
Sinode - Размер inode
Ksub - Субъективный эмпирический коэффициент учитывающий возможное кол-во директорий и очень маленьких файлов
Kext - Коэффициент масштабируемости без добавления новых дисков для хранения метаданных
Vmeta - Объем хранения для метеданных
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 .
Схема подключения и оборудование .
Схема подключения
Каждый сервер 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 (зависит от ваших требований)
hard nofile 1000000
soft nofile 1000000
Коротко о нюансах начальной настройки ОС Windows 2008 R2 на узлах windows-nodeX
На нормализацию работы на windows узлах быдо потрачено 3 месяца. До выхода очередного patch общение с техподдержкой выливалось в отправку бесконечных логов и “подпирание костылями”. Данной работой занимался мой коллега - Дмитрий Пугачев
1. Установка SUA
Utilities and SDK for Subsystem for UNIX-based Applications_AMD64.exe - служебные программы и подсистема приложений UNIX, доступна для загрузки с сайта. Описание тут
2. Установка компонентов OpenSSH
pkg-current-bootstrap60x64.exe и pkg-current-bundlecomplete60x64.exe , доступные на
сайте
в настройках sshd устанавливаем “
StrictModes no” и перезапускаем ssh
/etc/init.d/sshd stop
/etc/init.d/sshd start
3. Windows6.1-KB2639164-x64.msu - [дополнительно] обновление для Windows Server 2008 R2 SP1, которое устраняет проблемы при установке GPFS
4. Создание пользователя root
В настройки профайла пользователя необходимо указать домашнюю папку C:\root.
Добавить пользователя в группу Администраторы
В указанную папку в директорию .ssh скопировать сгенерированные ключи.
В локальный политиках пользователю необходимо разрешить вход в качестве сервиса.
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.
Удачного развертывания.
Об авторе
Ссылки.