Задача:

* Развернуть файловый кластер на 300 Тб
* Обеспечить возможность расширения
* Обеспечить быстрый поиск файлов
* Обеспечить возможность записи и чтения для 10 клиентских подключений на скорости до 1Gbit/s
* Доступ как для linux так и для windows клиентов
* Средний размер файла - 50 MB
* Бюджет ~1.65 млн.р/53 000$

Решение - Файловая система Lustre

Введение.

Lustre - распределенная файловая система с раздельным хранением данных и метаданных. Непосредственно для хранения данных и метаданных на узлах используется файловая система ext3. Описание установки over ZFS : тут (в данной работе мы не будем его касаться).

Lustre состоит из следующих компонентов:

  • Management Server - MGS

Хранит информацию обо всех файловых системах в кластере (в кластере может быть только один MGS).
Обменивается этой информацией со всем компонентами.

  • Metadata Server - MDS

Обеспечивает работу с метаданными, хранящимися на одном или нескольких Metadata Target далее MDT (в рамках одной файловой системы может быть только один MDS).

  • Object Storage Server - ОSS

Обеспечивает работу с данными, хранящимися на одном или нескольких Object Storage Target далее OST

  • Lustre networking - LNET

Сетевая сестема, обеспечивающая возможность обмена информацией в рамках кластера. Работает поверх Ethernet или InfiniBand

  • Lustre client

Узлы с развернутым программным обеспечением Lustre client , обеспечивающим доступ к файловым системам кластера

Ниже приведена схема-пример из официальной документации.

300

Выбор аппаратного обеспечения узлов*.

* Все дальнейшие рассуждения и расчеты приведены для связок MGS/MDS/OSS - CentOS 6.2 x64 + Lustre Whamcloud 2.1.2
Lustre Client - CentOS 5.8 x64 + Lustre Whamcloud 1.8.8
Разные версии ПО связаны с найденными проблемами по утечке памяти на клиентах с CentOS 6.2 + Lustre Whamcloud 2.1.2 и не возможностью замены всей инфраструктуры на более раннюю версию
.

С учетом ограниченности бюджета использовали следующую схему схему:
Один узел с функциями - MGS,MDS,OSS.
Четыре узла - OSS.

Требования к оперативной памяти:
Оперативная память для каждого из MGS,MDS,OSS,Lustre client - должна быть не менее 4Гб. Необходимо так же учитывать тот факт, что по умолчанию на узлах OSS включен кэш (возможно выключить). Для Lustre client по умолчанию кэш занимает до 3/4 доступной оперативной памяти.

Требования к процессорной мощности:
Lustre - достаточно производительная система способная работать на достаточно медленных процессорах (4-х ядерного Xeon 3000 серии будет достаточно), но для уменьшения возможных задержек были выбраны 2xIntel Xeon E5620

Для узла MGS/MDS/OSS - 48Гб
Для узлов OSS - 24Гб
Для узлов клиентов - 24Гб (Данный параметр выбран с учетом функционала клиентов. По факту 8Гб более чем достаточно для сервера клиента. При 4Гб наблюдались серьезные задержки в связи с выгрузкой данных в swap)

Требования к объему MDT:
Объем хранилища 300TB/Средний размер файла 50MB * 2K (размер Inode) = 12.228 Гб.
Для обеспечения высокой скорости работы с метаданными решено использовать SSD

Сетевые требования:
Для обеспечения требуемых характеристик с учетом бюджета использовали Ethernet в качестве BackEnd-сети.

Итоговая схема и конфигурации оборудования.


300

Конфигурация сервера MGS/MDS/OSS:

Тип комплектующих Модель Кол-во (шт)
Шасси Supermicro SC846TQ-R900B 1
Материнская плата Supermicro X8DTN+-F 1
Оперативная память KVR1333D3E9SK3/12G 2
Процессор Intel® Xeon® Processor E5620 2
Контроллер RAID Adaptec RAID 52445 1
Кабель Cable SAS SFF8087 - 4*SATA MS36-4SATA-100 6
Жесткий диск Seagate ST3000DM001 24
Карта 4-х портовая Intel <E1G44HT> Gigabit Adapter Quad Port (OEM) PCI-E 4×10/100/1000Mbps 1
Твердотельный диск 40 Gb SATA-II 300 Intel 320 Series <SSDSA2CT040G3K5> 2
Твердотельный диск 120 Gb SATA 6Gb / s Intel 520 Series < SSDSC2CW120A310 / 01> 2.5“ MLC 2

Конфигурация сервера OSS:

Тип комплектующих Модель Кол-во (шт)
Шасси Supermicro SC846TQ-R900B 1
Материнская плата Supermicro X8DTN+-F 1
Оперативная память KVR1333D3E9SK3/12G 2
Процессор Intel® Xeon® Processor E5620 2
Контроллер RAID Adaptec RAID 52445 1
Кабель Cable SAS SFF8087 - 4*SATA MS36-4SATA-100 6
Жесткий диск Seagate ST3000DM001 24
Карта 4-х портовая Intel <E1G44HT> Gigabit Adapter Quad Port (OEM) PCI-E 4×10/100/1000Mbps 1
Твердотельный диск 40 Gb SATA-II 300 Intel 320 Series <SSDSA2CT040G3K5> 2

Конфигурация сервера Lustre-lient:*
*данная конфигурация бала в наличии.

Тип комплектующих Модель Кол-во (шт)
Сервер HP DL160R06 E5520 DL160 G6 E5620 2.40ГГц, 8ГБ (590161-421) 1
Процессорный комплект Intel Xeon E5620 (2,40 ГГц/4-ядерный/80 Вт/12 МБ) для HP DL160 G6 (589711-B21) 1
Оперативная память MEM 4GB (1x4Gb 2Rank) 2Rx4 PC3-10600R-9 Registered DIMM (500658-B21) 4
Жесткие диски HDD 450GB 15k 6G LFF SAS 3.5” HotPlug Dual Port Universal Hard Drive (516816-B21) 2

Коммутатор:

Тип комплектующих Модель Кол-во (шт)
Коммутатор Сisco WS-C2960S-24TS-L 2
Стековый модуль Cisco Catalyst 2960S FlexStack Stack Module optional for LAN Base [C2960S-STACK] 2

В бюджет также вошла стойка HP, ИБП 5000VA, и KVM.

Подготовка ОС и тюнинг

На вопрос: куда подключены SSD если корзин только 24? К материнской плате и лежат внутри сервера (благо места достаточно). Производственные требования к нашему сервису позволяли его отключение на время до 10 мин. Если ваши требования жестче подключайте диски к HOTSWAP корзинам, увеличивая их кол-во или выбирая жесткие диски большего объема (4ТБ). Если же условия 24/7 - рассматривайте отказоустойчивое исполнение

  1. На RAID-контроллере создаем два тома RAID5 по 12 дисков.
  2. На тонкостях установки ОС Centos-6.2 останавливаться не буду. ОС устанавливается на software RAID1 SSD 40Гб.
  3. На MGS/MDS сервере делается дополнительный software RAID1 SSD 120Гб md1.
  4. На каждом из MGS/MDS/OSS и ОSS серверов создаются два bond-интерфеса:
    1. bond0 (2 физических интерфейса ) - FrontEnd
    2. bond1 (4 физических интерфейса ) - BackEnd
    3. BONDING_OPTS=“miimon=100 mode=6”
  5. Отключается SELINUX
  6. Устанавливается следующее по:
    1. yum install mc openssh-clients openssh-server net-snmp man sysstat rsync htop trafshow nslookup ntp
  7. Настраивается ntp
  8. На всех серверах настраиваются идентичные учетные записи (uid:gid)
  9. Изменяются параметры стека TCP в sysctl.conf


   # increase Linux TCP buffer limits\\
   net.core.rmem_max = 8388608\\
   net.core.wmem_max = 8388608\\
   # increase default and maximum Linux TCP buffer sizes\\
   net.ipv4.tcp_rmem = 4096 262144 8388608\\
   net.ipv4.tcp_wmem = 4096 262144 8388608\\
   # increase max backlog to avoid dropped packets\\
   net.core.netdev_max_backlog=2500\\
   net.ipv4.tcp_mem=8388608 8388608 8388608\\
   sysctl net.ipv4.tcp_ecn=0

Установка Lustre

На серверах:

Загрузка дистрибутивов утилит:

http://downloads.whamcloud.com/public/e2fsprogs/1.42.3.wc1/el6/RPMS/x86_64/

и непосредственно lustre:

http://downloads.whamcloud.com/public/lustre/lustre-2.1.2/el6/server/RPMS/x86_64/\\

Установка утилит:

rpm -e e2fsprogs-1.41.12-11.el6.x86_64
rpm -e e2fsprogs-libs-1.41.12-11.el6.x86_64
rpm -Uvh e2fsprogs-libs-1.42.3.wc1-7.el6.x86_64.rpm
rpm -Uvh e2fsprogs-1.42.3.wc1-7.el6.x86_64.rpm
rpm -Uvh libss-1.42.3.wc1-7.el6.x86_64.rpm
rpm -Uvh libcom_err-1.42.3.wc1-7.el6.x86_64.rpm

Установка Lustre:

rpm -ivh kernel-firmware-2.6.32-220.el6_lustre.g4554b65.x86_64.rpm\\
rpm -ivh kernel-2.6.32-220.el6_lustre.g4554b65.x86_64.rpm\\
rpm -ivh lustre-ldiskfs-3.3.0-2.6.32_220.el6_lustre.g4554b65.x86_64.x86_64.rpm\\
rpm -ivh perf-2.6.32-220.el6_lustre.g4554b65.x86_64.rpm\\
rpm -ivh lustre-modules-2.1.1-2.6.32_220.el6_lustre.g4554b65.x86_64.x86_64.rpm\\
rpm -ivh lustre-2.1.1-2.6.32_220.el6_lustre.g4554b65.x86_64.x86_64.rpm\\

Необходимо удостовериться что именно lustre kernel выбрано по умолчанию при загрузке в /boot/grub/grub.conf

Настройка сети LNET:

echo "options lnet networks=tcp0(bond1)" > /etc/modprobe.d/lustre.conf\\

Перезагрузка узлов

reboot

На клиентах:

Обновление ядра:

yum update kernel-2.6.18-308.4.1.el5.x86_64 
reboot

Загрузка дистрибутивов утилит:

http://downloads.whamcloud.com/public/e2fsprogs/1.41.90.wc4/el5/x86_64/

и непосредственно lustre:

http://downloads.whamcloud.com/public/lustre/lustre-1.8.8-wc1/el5/client/RPMS/x86_64/

Установка утилит:

rpm -Uvh --nodeps e2fsprogs-1.41.90.wc4-0redhat.x86_64.rpm
rpm -ivh uuidd-1.41.90.wc4-0redhat.x86_64.rpm

Установка Lustre:

rpm -ivh lustre-client-modules-1.8.8-wc1_2.6.18_308.4.1.el5_gbc88c4c.x86_64.rpm
rpm -ivh lustre-client-1.8.8-wc1_2.6.18_308.4.1.el5_gbc88c4c.x86_64.rpm

Настраиваем сеть LNET:

echo "options lnet networks=tcp0(eth1)" > /etc/modprobe.d/lustre.conf

Перезагрузка узлов

reboot

Развертывание Lustre

На сервере MGS/MDS/OSS:

mkfs.lustre --fsname=FS --mgs --mdt --index=0 /dev/md1// (Где /dev/md1 - устройство software RAID1)
mkdir /mdt
mount -t lustre /dev/md1 /mdt
echo "/dev/md1 /mdt lustre defaults,_netdev 0 0" >> /etc/fstab//
mkfs.lustre --fsname=FS --mgsnode=10.255.255.1@tcp0 --ost --index=0 /dev/sda// (Где /dev/sda - том RAID5)
mkfs.lustre --fsname=FS --mgsnode=10.255.255.1@tcp0 --ost --index=1 /dev/sdb// (Где /dev/sdb - том RAID5)
mkdir /ost0
mkdir /ost1
mount -t lustre /dev/sda /ost0
mount -t lustre /dev/sdb /ost1
echo "/dev/sda /ost0 lustre defaults,_netdev 0 0" >> /etc/fstab
echo "/dev/sdb /ost1 lustre defaults,_netdev 0 0" >> /etc/fstab
mkdir /FS
mount -t lustre  /FS
echo "10.255.255.1@tcp0:/temp /FS lustre defaults,_netdev 0 0" >> /etc/fstab

На серверах OSS:

mkfs.lustre --fsname=FS --mgsnode=10.255.255.1@tcp0 --ost --index=N /dev/sda// (Где N-номер узла,  /dev/sda - том RAID5)
mkfs.lustre --fsname=FS --mgsnode=10.255.255.1@tcp0 --ost --index=N+1 /dev/sdb// (Где N-номер узла, /dev/sdb - том RAID5)
mkdir /ostN
mkdir /ostN+1
mount -t lustre /dev/sda /ostN
mount -t lustre /dev/sdb /ostN+1
echo "/dev/sda /ostN lustre defaults,_netdev 0 0" >> /etc/fstab
echo "/dev/sdb /ostN+1 lustre defaults,_netdev 0 0" >> /etc/fstab
mkdir /FS
mount -t lustre  /FS
echo "10.255.255.1@tcp0:/temp /FS lustre defaults,_netdev 0 0" >> /etc/fstab

Так же для каждого OST возможно без перерыва в работе и в любое время освободить 5% свободного места

tune2fs -m 0 /dev/sda//

На клиентах:

mkdir /FS
mount -t lustre  /FS
echo "10.255.255.1@tcp0:/temp /FS lustre defaults,_netdev 0 0" >> /etc/fstab

Теперь на любом из узлов возможен просмотр текущего состояние файловой системы:

lfs df -h
FS-MDT0000_UUID          83.8G        2.2G       76.1G   3% /FS[MDT:0]
FS-OST0000_UUID          30.0T       28.6T        1.4T  95% /FS[OST:0]
FS-OST0001_UUID          30.0T       28.7T        1.3T  96% /FS[OST:1]
FS-OST0002_UUID          30.0T       28.6T        1.3T  96% /FS[OST:2]
FS-OST0003_UUID          30.0T       28.7T        1.3T  96% /FS[OST:3]
FS-OST0004_UUID          30.0T       28.3T        1.7T  94% /FS[OST:4]
FS-OST0005_UUID          30.0T       28.2T        1.8T  94% /FS[OST:5]
FS-OST0006_UUID          30.0T       28.3T        1.7T  94% /FS[OST:6]
FS-OST0007_UUID          30.0T       28.2T        1.7T  94% /FS[OST:7]
FS-OST0008_UUID          30.0T       28.3T        1.7T  94% /FS[OST:8]
FS-OST0009_UUID          30.0T       28.2T        1.8T  94% /FS[OST:9]

Работа c Lustre

В связи с тем, что данный раздел подробно отражен в Manual остановимся только на двух задачах:

1. Добавление нового узла и как следствие дисбаланс сохраненных данных на OST Пример:

FS-MDT0000_UUID          83.8G        2.2G       76.1G   3% /FS[MDT:0]
FS-OST0000_UUID          30.0T       28.6T        1.4T  95% /FS[OST:0]
FS-OST0001_UUID          30.0T       28.7T        1.3T  96% /FS[OST:1]
FS-OST0002_UUID          30.0T       28.6T        1.3T  96% /FS[OST:2]
FS-OST0003_UUID          30.0T       28.7T        1.3T  96% /FS[OST:3]
FS-OST0004_UUID          30.0T       28.3T        1.7T  94% /FS[OST:4]
FS-OST0005_UUID          30.0T       28.2T        1.8T  94% /FS[OST:5]
FS-OST0006_UUID          30.0T       28.3T        1.7T  94% /FS[OST:6]
FS-OST0007_UUID          30.0T       28.2T        1.7T  94% /FS[OST:7]
FS-OST0008_UUID          30.0T       28.3T        1.7T  94% /FS[OST:8]
FS-OST0009_UUID          30.0T       28.2T        1.8T  94% /FS[OST:9]
FS-OST000a_UUID          30.0T       2.1T        27.9T  7% /FS[OST:10]
FS-OST000b_UUID          30.0T       2.2T        27.8T  7% /FS[OST:11]

При добавлении дополнительного узла как правило могут возникают две ситуации:
1.1 Невозможность записи файла в связи с отсутствием свободного места на одном из OST (при этом на файловой системе места может быть предостаточно)
1.2 Увеличение нагрузки ввода/вывода на новый добавленный узел.

В такой ситуации необходимо, если есть возможность перебрасывать данные с занятых OST на свободные.
Решается это следующим алгоритмом:

  • Деактивация переполненных OST (при указанном режиме данные доступны только для чтения)
  • Переброс данных на свободные OST
  • Обратная активация OST

Пример:

lctl --device N deactivate
lfs find --ost {OST_UUID} -size +1G | lfs_migrate -y
lctl --device N activate

2.Резервное копирование

Для решения задачи резервного копирования вам необходимо остановить запись данных (как вариант путем деактивации).
Естественно возможно решить задачу с помощью LVM2 snapshot, но как показывает практика производительность сильно падает.
Далее воспользоваться backup на уровне устройств или файлов как описано в инструкции.

Послесловие

В настоящий момент я рекомендую использовать версию Lustre 1.88wc4 в связке с Centos 5.8, как наиболее стабильное решение. (2.3 еще не пробовал)
В целом уровень документации на сайте Whamcloud Manual - исчерпывающий за что Whamcloud отдельное, большое СПАСИБО.

Об авторе

Profile автора

ru/jobs/lustrefs.txt · Last modified: 2015/03/12 17:11 by admin
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki