Данная статья описывает процесс создания отказоустойчивого файлового хранилища емкостью 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 использует следующие структуры данных:
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 .
Схема подключения
Каждый сервер 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
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 кластера используется 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.
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 автора