|
Bog BOS: Сетевая файловая система GlusterFS
|
Последнее изменение файла: 2016.02.26
Скопировано с www.bog.pp.ru: 2024.11.21
Bog BOS: Сетевая файловая система GlusterFS
Сетевая файловая система GlusterFS разработана компанией Gluster Inc.
Агрегирует файловые пространства (bricks, кирпичи) большого количества серверов
в единую распределённую файловую систему (volume, том).
Это объектная (не блочная) распределённая файловая система без центрального сервера метаданных.
Для соединения можно использовать TCP/IP или Infiniband RDMA
(OFED 1.4 для версии 3.0, OFED 1.5 для версии 3.1; кстати, в RHEL5.5 - OFED 1.4).
Эффективна при десятках узлов.
Файлы можно восстанавливать из локального файлового пространства (если не использовались тома с расщеплением).
Реализована на прикладном уровне (нет модулей ядра, требуется поддержка FUSE для клиентов,
ядро 2.6.18 и выше для 2.0, ядро 2.6.27 и выше для версии 3.0.2; FUSE появился только в RHEL5.4).
Проблема одновременного доступа к данным решается на уровне подлежащей файловой системы
(к каждой файловой системе обращается ровно один сервер).
Можно использовать различные подлежащие файловые системы (рекомендуется ext3 или ext4).
Постоянно работающая фоновая служба самопроверки.
Имеется библиотека libglusterfs, которую можно встроить в приложение для прямого обращения к серверу,
минуя уровень файловой системы и FUSE.
Сервер может работать под Linux, FreeBSD, OpenSolaris, Solaris или Mac OS X.
Клиент может работать под Linux с поддержкой FUSE.
При отсутвии клиента (не Linux, нет FUSE) можно воспользоваться
специальной версией NFS сервера (FUSE в 3.0 - не держит нагрузку, встроенный в 3.1), модулем для Apache и т.д..
Лицензия - GPLv3 (GNU Affero General Public License).
Версия 3.2.4 от сентября 2011 (3.0.6 от октября 2010; 2.0.9 от декабря 2009;
1.3.12 от сентября 2008; в EPEL5 - 2.0.8, в EPEL4 - 1.3.12).
Ежегодная плата за подписку (от $1500 за сервер).
NAS Gluster Storage Platform объединяет ОС, GlusterFS, установщик и веб-интерфейс настройки (включая доступ по NFS и CIFS).
Настораживает обилие в документации маркетингового булшита вместо вменяемого описания архитектуры
системы, которое необходимо для оптимизации конфигурации (причём часть документации исчезала прямо по ходу чтения).
Зато есть официальный перевод на русский язык.
Неприятно поразила несовместимость клиентов 2.0.9 и серверов 2.0.8 (не работала команда ls).
Отсутствует сбор статистики (iostat), динамическое управление кешированием и readahead-ом
(readahead в некоторых ситуациях - например, bonnie++ rewrite - просто безумствует забивая канал).
Нет привычного по NFS мягкого монтирования в фоне,
аккуратной обработки ситуации с временным пропаданием сервера, стандартных параметров монтирования.
Подозреваю, что на доработку обещанных функций (replicate) уйдёт несколько лет (в 3.1 реализована
такая более простая для отладки возможность, как миграция)
и только потом начнут настраивать производительность,
затем улучшать эксплуатационные характеристики, затем вспомнят про безопасность
(кстати, в версии 3.1 исчезли имена и пароли) и только потом этим можно будет
пользоваться. А пока можно использовать (не версию 3.1.0!) для кластерного /tmp ;)
Компания Red Hat купила компанию Gluster Inc. осенью 2011 и выпустила
продукт Red Hat Storage Software Appliance.
Сетевая файловая система GlusterFS состоит из следующих компонент:
- подлежащие файловые системы (ext3, ext4, ZFS, xfs, jfs), которые называются томами хранения (brick, кирпич)
- сервер glusterfsd на каждом хосте с подлежащей файловой системой;
сервер может обслуживать несколько томов хранения;
исходный том хранения (файловая система) может быть экспортирован непосредственно или преобразован с помощью цепочки
модулей-трансляторов (оптимизация, добавление функций);
конечным модулем цепочки является транспортный модуль - TCP/IP (порт 6996), unix-сокет, ib-verb, ib-sdp
- клиент glusterfs, обеспечивающий с помощью FUSE доступ к экспортированным томам (файловым системам)
всем процессам на своём хосте; импортированный с помощью транспортного модуля том может использоваться непосредственно
или преобразован с помощью цепочки модулей-трансляторов (сборка составных томов, оптимизация);
собранный том (volume) может быть экспортирован как единое целое
- библиотека libglusterfs, которую можно встроить в приложение для прямого обращения к серверу,
минуя уровень файловой системы и FUSE (настройки в /etc/booster.fstab, переменная окружения GLUSTERFS_BOOSTER_FSTAB,
предзагрузка разделяемой библиотеки LD_PRELOAD=/usr/lib64/glusterfs/glusterfs-booster.so)
- оптимизированный сервер NFS (unfs3), который может импортировать тома и раздавать их NFS клиентам
Сетевая файловая система GlusterFS состоит из следующих компонент:
- подлежащие файловые системы (ext3, ext4, ZFS, xfs, jfs), которые называются томами хранения (brick, кирпич)
- сервер glusterfsd на каждом хосте с подлежащей файловой системой;
сервер может обслуживать несколько томов хранения;
исходный том хранения (файловая система) может быть экспортирован непосредственно или преобразован с помощью цепочки
модулей-трансляторов (оптимизация, добавление функций);
конечным модулем цепочки является транспортный модуль - TCP/IP (порты c 24007 по 24009+число_томов-1),
unix-сокет, ib-verb, ib-sdp;
встроенный сервер NFSv3 (только tcp, несовместим с ядерным сервером NFS -
требуется выгрузить модули nfs и lockd, а lockd нужен NFS-клиенту),
который может раздавать тома NFS клиентам (порты с 38465 по 38465+число_серверов-1 и 111);
- демон glusterd на каждом сервере управляет своими glusterfsd, общается с соседями и управляется командой gluster
- утилита командной строки gluster позволяет динамически изменять конфигурацию через интерфейс с glusterd
- клиент glusterfs, обеспечивающий с помощью FUSE доступ к экспортированным томам (файловым системам)
всем процессам на своём хосте; импортированный с помощью транспортного модуля том может использоваться непосредственно
или преобразован с помощью цепочки модулей-трансляторов (сборка составных томов, оптимизация);
собранный том (volume) может быть экспортирован как единое целое
- библиотека libglusterfs, которую можно встроить в приложение для прямого обращения к серверу,
минуя уровень файловой системы и FUSE (настройки в /etc/booster.fstab, переменная окружения GLUSTERFS_BOOSTER_FSTAB,
предзагрузка разделяемой библиотеки LD_PRELOAD=/usr/lib64/glusterfs/glusterfs-booster.so)
Модули (трансляторы) выстраиваются в цепочку обслуживания, на входе и выходе транслятора - том.
Самый нижний модуль сервера (типа storage/posix) указывает на подлежащую файловую систему.
Описание томов (модулей) на сервере обычно находится в файле /etc/glusterfs/glusterfsd.vol (/etc/glusterd/ для версии 3.1).
Файл имеет построчный формат, комментарии начинаются с '#'.
Описание модуля начинается с команды volume и указанием имени получающегося тома,
тип и подтип модуля (через '/') указываются командой type,
ссылки на подлежащие тома указываются командой subvolumes с указанием имён томов нижнего уровня,
параметры модуля задаются командами option,
завершается описание модуля командой end-volume.
Имена регистрозависимые. Подтома должны быть описаны до своего использования.
Возможно написание единого конфигурационного файла как для сервера, так и для клиента.
В версии 3.1 разбит на /etc/glusterd/vols/имя-тома/info, /etc/glusterd/vols/имя-тома/имя-тома-fuse.vol,
/etc/glusterd/nfs/nfs-server.vol, /etc/glusterd/vols/имя-тома/имя-тома.имя-сервера.имя-кирпича.vol.
Модули:
- storage (описание подлежащей файловой системы на сервере)
- posix (обеспечивает POSIX семантику при работе с файлами подлежащей файловой системы)
- option directory имя-каталога (корень подлежащей файловой системы)
- option o-direct {disable|enable} (возможность посылать запросы в обход кеша VFS;
глючит в 3.0.3)
- option export-statfs-size {yes|no} (для решения проблем с df
при описании нескольких томов под одной точкой монтирования)
- option mandate-attribute {on|off} (требовать от подлежащей файловой системы поддержки
расширенных атрибутов)
- option span-devices число (0; обслуживать указанное количество файловых систем,
подмонтированных внутрь подлежащей файловой системы)
- option background-unlink {no|yes} (удаление больших файлов в фоновом режиме)
- bdb (каталоги хранятся в подлежащей файловой системе,
файлы каталога хранятся в формате Berkley DB (key - имя файла, value - содержимое файла)
в файле storage_db.db в каталоге, отсутствует в пакете)
- option directory имя-каталога (корень подлежащей файловой системы)
- option logdir имя-каталога (журналы БД)
- option errfile имя-файла (для сообщений об ошибках)
- option dir-mode формат-chmod (возвращается при запросе)
- option file-mode формат-chmod (возвращается при запросе)
- option page-size байт (д.б. равно размеру блока подлежащей файловой системы)
- option open-db-lru-limit число (количество открытых БД на каталог?)
- option lock-timeout (максимальное время блокировки замка)
- option checkpoint-interval секунд (меньше - медленная работа, больше - увеличение потерь)
- option transaction-timeout (максимальное время блокировки транзакции)
- option mode {cache|persistent} (persistent гарантирует восстановление после сбоя
- option access-mode {btree|hash}
- features
- locks (для сервера, обеспечивает семантику POSIX блокировок на сервере, над модулем типа storage)
- option mandatory-locks {off|on}
- option trace {off|on}
- filter (testing/features/filter;
для сервера, трансляция uid между сервером и клиентом, отсутствует в пакете)
- option root-squashing {off|on}
- option read-only {off|on}
- option fixed-uid идентификатор-пользователя (в качестве владельца всех файлов представляется uid)
- option fixed-gid идентификатор-группы (в качестве группы владельца всех файлов представляется gid)
- option translate-uid исходный-интервал=результат[,исходный-интервал=результат...] (преобразование uid клиента)
- option translate-gid исходный-интервал=результат[,исходный-интервал=результат...] (преобразование gid клиента)
- option filter-uid идентификатор-пользователя (блокировать доступ пользователей с указанным uid)
- option filter-gid идентификатор-группы (блокировать доступ пользователей с указанным gid)
- trash (testing/features/trash; для сервера, мусорная корзина)
- option trash-dir имя-каталога
- path-converter (testing/features/path-converter; для сервера, преобразование имён файлов)
- option start-offset число
- option end-offset число
- option replace-with строка
- quota (для сервера, ограничение для подлежащей фаловой системы)
- option min-free-disk-limit процентов
- option refresh-interval секунд
- option disk-usage-limit байт
- performance (ускорители и оптимизаторы)
- protocol (обеспечивает интерфейс между клиентом и сервером)
- server (над модулем типа performance, storage или features)
- option transport-type tcp|ib-verb|unix|ib-sdp
- option transport.address-family {inet|inet6|inet/inet6|inet6/inet|unix|inet-sdp}
- option transport.window-size байт
- option transport.socket.bind-address IP-адрес (для tcp или ib-sdp)
- option transport.socket.listen-port номер-порта (6996; для tcp или ib-sdp)
- option transport.socket.connect-path ?
- option transport.socket.bind-path ?
- option transport.socket.listen-path ?
- option transport.socket.nodelay {on|off} (?)
- option transport.ib-verbs.device-name имя-устройства
- option transport.ib-verbs.port физический-порт
- option transport.ib-verbs.remote-port номер-порта (6997; TCP порт для входящих соединений)
- option transport.ib-verbs.mtu байт
- option transport.ib-verbs.listen-port номер-порта (6996)
- ?option transport.ib-verbs.bind-address адрес
- ?option transport.ib-verbs.work-request-send-size байт
- option transport.ib-verbs.work-request-send-count число
- ?option transport.ib-verbs.work-request-recv-size байт
- option transport.ib-verbs.work-request-recv-count число
- option transport.ib-verbs.connect-path ?
- option transport.ib-verbs.bind-path ?
- option transport.ib-verbs.listen-path ?
- option [transport.socket.listen-path имя-файла (для unix)
- option auth.addr.имя-нижнего-модуля.{allow|reject} шаблон-IP-адресов[,шаблон-IP-адресов...]
(порт клиента должен быть меньше 1024)
- option auth.login.имя-нижнего-модуля.allow имя-пользователя[,имя-пользователя...]
- option auth.login.имя-пользователя.password пароль (передаётся в незашифрованном виде)
- option client-volume-filename имя-файла (?)
- option inode-lru-limit число (?)
- option verify-volfile-checksum {off|on} (?)
- client (описание тома на сервере)
- option transport-type tcp|tcp/client|ib-verb|unix|socket|ib-sdp (TCP/IP или InfiniBand)
- option transport.address-family {inet|inet6|inet/inet6|inet6/inet|unix|inet-sdp}
- option remote-host имя-сервера
- option [transport.socket.]remote-port номер-порта (6996 для tcp, 6997 для ib-verbs)
- option remote-subvolume имя-тома (сервер может экспортировать несколько томов)
- option transport.socket.nodelay on|off (?)
- option transport.ib-verbs.remote-port номер-порта (6996)
- ?option transport.ib-verbs.work-request-send-size байт
- option transport.ib-verbs.work-request-send-count число
- ?option transport.ib-verbs.work-request-recv-size байт
- option transport.ib-verbs.work-request-recv-count число
- ?option transport-timeout секунд
- option frame-timeout секунд (30)
- option ping-timeout секунд (10; по-моему, маловато,
при записи 1 в /proc/sys/vm/drop_caches на сервере, получается пауза и в ответ:
E [client-protocol.c:457:client_ping_timer_expired] s75-x5412e:
Server 192.168.172.75:6996 has not responded in the last 10 seconds, disconnecting.
E [saved-frames.c:165:saved_frames_unwind] s75-x5412e: forced unwinding frame type(1) op(WRITE)
W [fuse-bridge.c:888:fuse_err_cbk] glusterfs-fuse: 4811772: FLUSH() ERR => -1 (Transport endpoint is not connected)
...
N [client-protocol.c:6438:notify] s75-x5412e: disconnected
соединение восстанавливается, но приложение уже упало
- option username имя-пользователя
- option password пароль
- cluster (сборка составных томов, выполняется на клиенте над модулем типа protocol)
- distribute (DHT, распределяет файлы по подлежащим томам с помощью хеш-функции (подозрительная функция),
обещание: можно добавлять новые подтома к существующей системе;
требуется поддержка расширенных атрибутов на подлежащей системе;
информация о количестве томов привязывается к каталогу при его создании,
т.е. имевшиеся каталоги будут использовать только старые тома и только файлы
из вновь созданных каталогов попадут на новый сервер;
реальность: после добавления тома файлы не находятся, если не включить lookup-unhashed,
после его включения действительно в старых каталогах файлы попадают только в
старые тома, оглавление в новом томе создаётся только после сканирования файлов,
(однако: "find: WARNING: Hard link count is wrong for ...: this may be a bug in your filesystem driver";
расширенные атрибуты: glusterfs.dht.linkto, posix-ИмяТома.gen)
- option lookup-unhashed {off|on} (при поиске файлов просматривать все тома, а не только "правильный")
- option min-free-disk процентов (10%; создаются ссылки на реальное местонахождение;
ограничение на неснижаемый остаток места в подлежащей файловой системе
проверяется при создании файлов, в дальнейшем файл не перемещается;
если приложение (например, bonnie++) сразу создаёт
все файлы нулевого размера (естественно на это место есть), а потом наращивает их, то будут проблемы)
- option unhashed-sticky-bit {yes|no} (?)
- nufa (Non Uniform File Access, распределяет файлы по подлежащим томам, предпочитая локальные подтома;
доступ к локальным подтомам идёт напрямую, минуя FUSE и сервер; имя подтома должно совпадать с именем хоста;
безтомные узлы могут использовать тоже самое описание тома заменив nufa на distribute и убрав local-volume-name)
- option local-volume-name имя-предпочитаемого-подлежащего-тома ()
- option lookup-unhashed {on|off} (при поиске файлов просматривать все тома, а не только "правильный")
- option min-free-disk процентов (10%; создаются ссылки на реальное местонахождение; см. distibute)
- replicate (afr, сетевой RAID-1, самоизлечение поднявшихся подтомов при первом обращении (ls -lRa);
требуется поддержка расширенных атрибутов на подлежащей системе и транслятор posix-locks;
не стоит полагаться на это: файлы пропавшие с первого подтома невидимы и к ним никто не обращается и не лечит,
проблемы с жёсткими ссылками)
- option read-subvolume имя-предпочитаемого-подлежащего-тома (по умолчанию - балансировка нагрузки)
- option favorite-child имя-предпочитаемого-подлежащего-тома (используется как главный при лечении
после разбиения кластера (split brain))
- option data-self-heal {on|off} (лечить ли данные)
- option metadata-self-heal {on|off} (лечить ли метаданные)
- option entry-self-heal {on|off} (лечить ли записи в каталогах)
- option data-change-log {on|off} (хранить журнал транзакций с помощью расширенных атрибутов для выбора
главной копии, иначе выбирать случайным образом)
- option metadata-change-log {on|off} (хранить журнал транзакций с помощью расширенных атрибутов для выбора
главной копии, иначе выбирать случайным образом)
- option entry-change-log {on|off} (хранить журнал транзакций с помощью расширенных атрибутов для выбора
главной копии, иначе выбирать случайным образом)
- option data-lock-server-count число (1; число серверов, хранящих блокировку)
- option metadata-lock-server-count число (1; число серверов, хранящих блокировку)
- option entry-lock-server-count число (1; число серверов, хранящих блокировку)
- stripe (файл разбивается на кусочки равного размера, кусочки распределяются по подтомам;
файлы на подлежащих файловых системам выглядят "как настоящие", но хранятся с дырками;
требуется поддержка расширенных атрибутов на подлежащей системе; добавить новый том не удастся!)
- option block-size байт (128KB)
- option use-xattr {on|off}
- ha (testing/cluster/ha; High Availability, переключение на запасной интерфейс)
- unify (legacy/cluster/unify; устарел, предлагается использовать distribute;
распределяет файлы по подтомам в соответствии с выбранным планировщиком;
дополнительный подтом хранит полное дерево имён каталогов и файлов, чтобы не искать по всем подтомам)
- option namespace имя-подлежащего-тома (здесь будет храниться полное дерево имён каталогов и файлов;
здесь должно быть inode-ов для всех; не должен совпадать с объединяемыми подтомами)
- option self-heal {foreground|background|off} (при первом обращении к файлу)
- option optimist {yes|no}
- option scheduler alu|rr|random|nufa|switch (планировщик выбирающий подтом
для размещения содержимого создаваемого файла)
- Random - случайный выбор; опции: random.limits.min-free-disk
- RR - файлы размещаются на узлах по очереди (у каждого клиента своя!);
опции: rr.limits.min-free-disk, rr.read-only-subvolumes, rr.refresh-interval
- ALU (Adaptive Least Usage) - учёт активности операций (read-usage, write-usage),
количества открытых файлов (open-files-usage),
заполненого и доступного локального дискового пространства (disk-usage),
скорости вращения дисков и т.п. (disk-speed-usage);
опции: alu.order, alu.read-only-subvolumes, alu.limits.min-free-disk, alu.limits.max-open-files,
alu.подтип.entry-threshold, alu.подтип.exit-threshold (тут есть, что покрутить!)
- NUFA - создаваемые на этом сервере файлы размещаются на локальном хранилище;
опции: nufa.local-volume-name, nufa.limits.min-free-disk
- Switch - распределение файлов по хранилищам в зависимости от имён файлов;
опции: switch.case (шаблон имён, двоеточие, список подтомов), switch.read-only-subvolumes
- map (testing/cluster/map; ?)
- option map-directory строка
- option default-volume имя-подлежащего-тома
Утилита gluster позволяет настраивать и управлять томами GlusterFS без остановки работы.
Имеет интерактивный режим. Команды (журнал в /etc/glusterd/.cmd_log_history):
- help
- quit
- peer help
- peer probe сервер # подсоединить сервер к пулу;
из-за путанницы с именами серверов лучше использовать IP адреса
- peer status # выдать список серверов пула
- peer detach сервер
- volume help
- volume create имя-тома [replica число-копий] [stripe число-расщеплений] [transport tcp | rdma] сервер:имя-кирпича ...
- volume rename имя-тома новое-имя-тома
- volume add-brick имя-тома [replica число-копий] [stripe число-расщеплений] сервер:имя-кирпича ...
- volume replace-brick имя-тома сервер:имя-кирпича новый-сервер:новый-кирпич {start | pause | commit | abort | status}
# требуется наличие FUSE на том сервере, с которого выдаётся команда; каковы последствия abort?
- volume remove-brick имя-тома [replica число-копий] [stripe число-расщеплений] сервер:имя-кирпича ...
# данные теряются
- volume delete имя-тома # предварительно деактивировать том
- volume start имя-тома # активировать том
- volume rebalance имя-тома {start | stop | status} # требуется после добавления или удаления кирпичей
- volume stop имя-тома
- volume info {имя-тома | all}
- volume set имя-тома опция значение # действует на активные тома, опции:
- auth.allow (шаблон допустимых IP адресов
- auth.reject
- performance.cache-min-file-size
- performance.cache-max-file-size
- performance.cache-refresh-timeout (от 1 до 60 секунд)
- performance.cache-size (от 4MB до 6GB)
- performance.write-behind-window-size
- cluster.stripe-block-size
- cluster.self-heal-window-size (от 1 до 1024)
- cluster.read-subvolume (предпочтительный том хранения для чтения)
- network.frame-timeout (от 6 до 86400)
- network.ping-timeout (от 1 до 1013)
- diagnostics.brick-log-level {DEBUG|WARNING|ERROR|CRITICAL|NONE|TRACE}
- diagnostics.client-log-level {DEBUG|WARNING|ERROR|CRITICAL|NONE|TRACE}
- diagnostics.latency-measurement {yes|no}
- diagnostics.dump-fd-stats {yes|no}
- rpc-auth.addr.namelookup {on | off}
- nfs3.export-volumes {on | off}
- volume log filename имя-тома каталог # журналы сервера; каталог должен существовать
- volume log locate имя-тома # выдать имя каталога с журналами
- volume log rotate
replica - позволяет создавать тома, данные которых хранятся на 2 серверах, что позволяет
продолжать обслуживание при падении одного из серверов (а brain split?).
stripe - позволяет распределять части одного файла по нескольким серверам для ускорения
чтения и записи. Эффективен только при работе с очень большими файлами.
Конфигурационные файлы, созданные (отредактированные) вручную более не поддерживаются,
хотя и не запрещаются.
С версии 2.0.9 поддерживаются только конфигурации, созданные с помощью glusterfs-volgen
(результат помещается в текущий каталог в файл ИмяТома-ТипТранспорта.vol для клиентов и
ИмяХоста-ИмяТома-export.vol для сервера):
- --name=имя-тома (обязательный параметр, используется только для генерации имён файлов конфигурации)
- --transport={tcp|ib-verbs} [--ibdev=номер] (по умолчанию - tcp)
- --port=номер-порта (по умолчанию - 6996)
- --auth=? (по умолчанию - *)
- --raid={0|1} (RAID-0 хочет 4 тома)
- --nfs (ускоритель NFS)
- --cifs [--username=имя-пользователя] [--guest] (ускоритель CIFS)
- список серверов в формате "ИмяСервера:ЭкспортныйКаталог"
Сервер GlusterFS glusterfsd.
Журнал в /var/log/glusterfs/-etc-glusterfs-glusterfsd.vol.log.
Сервер GlusterFS glusterd. Ключи:
- --log-file=имя-файла (/usr/local/var/log/glusterfs/glusterfs.log?)
- --log-level={TRACE | DEBUG | NORMAL | WARNING | ERROR | CRITICAL}
- --no-daemon
Ускоритель NFSv3 (пакет unfs3) - работает в пространстве пользователя в обход FUSE,
что позволяет избежать двойного перемещения между пространствами ядра и пользователя.
Набор возможностей урезан относительно стандарта: при создании объекта нельзя указать владение,
размер и время создания; не реализованы функции блокировки (клиент должен монтировать с ключом nolock);
только режим nohide.
Ключи unfsd:
- -e имя-файла (использовать вместо /etc/exports; по умолчанию secure, fixed, ro и root_squash;
поддерживаемые опции:
- root_squash
- no_root_squash
- all_squash
- no_all_squash
- ro
- rw
- anonuid=число
- anongid=число
- secure
- insecure
- fixed (держать файлы открытыми между запросами)
- removable (не держать файлы открытыми, чтобы мобильный диск можно было отсоединить)
- password=пароль (mount имя-хоста:@password:пароль/точка-монтирования)
- -T (тестировать файл с описанием экспорта)
- -u (использовать непривилегированный порт для сервера вместо 2049)
- -n порт (использовать указанный порт для сервера NFS)
- -m порт (использовать указанный порт для сервера монтирования; по умолчанию - тот же 2049)
- -t (только TCP)
- -p (не регистрироваться через portmap; клиент должен явно указать порты с помощью mountport и port)
- -l IP-адрес (привязываться к указанному адресу)
- -d (отладочный режим)
- -r (борьба с проблемой запуска исполняемых файлов, у которых отсутствуют права на чтение)
- -i pid-файл
Сигналы:
- TERM или INT - отпроситься у portmap и завершить работу
- HUP - прочитать заново файл с описанием экспорта и /etc/passwd
- USR1 - выдать статистику кеширования на syslog
Под большой нагрузкой зависает клиент (RHEL4) - не клиент NFS, а хост целиком.
Модуль fuse из дистрибутива RHEL5.4 не поддерживает ре-экспорт в NFS
(--disable-direct-io-mode?).
Монтирование файловой системы на клиентском хосте с помощью FUSE - /sbin/mount.glusterfs,
т.е. монтировать надо командой mount с ключом "-t glusterfs"
Ключи:
- --help
- --volfile=имя-файла-описания-томов (/etc/glusterfs/glusterfs.vol)
- --log-file=имя-файла (/var/log/glusterfs/glusterfs.log)
- --log-level={DEBUG|WARNING|ERROR|CRITICAL|NONE} ( WARNING)
- --volume-name=имя-тома (по умолчанию берётся самый верхний)
Опции монтирования для /etc/fstab
(модуль fuse не грузится автоматически; надо в /sbin/mount.glusterfs вставить /sbin/modprobe fuse):
- log-level={DEBUG|WARNING|ERROR|CRITICAL|NONE}
- log-file=имя-файла (/var/log/glusterfs/glusterfs.log)
- transport={tcp|ib-verb}
- direct-io-mode={enable|disable}
- volume-name=имя-тома (по умолчанию берётся самый верхний)
- volume-id=?
Опции монтирования FUSE (/sbin/mount.glusterfs - скрипт на bash,
параметры для FUSE из /etc/fstab не передаются; можно использовать mount -o remount?):
- kernel_cache (опасно, не сбрасывать кеш файла при открытии)
- direct_io (не кешировать файловую систему в ядре,
программы не запускаются)
- max_readahead=байт (128KB)
Требуется обеспечить узлы счётного кластера общим файловым пространством для
хранения временных файлов с автоматическим распределением нагрузки по узлам хранения данных.
Имеется 4 сервера с излишками дискового пространства (серверов имеется больше, но предполагается,
что извлекаемого с 4 хостов дискового пространства и скорости будет достаточно, а связывать
все узлы кластера в неразъёмную конструкцию нежелательно). Половина клиентских хостов не может
быть непосредственным клиентом glusterfs (Solaris, RHEL4), так что потребуется ускоритель NFS.
Ситуация осложняется разбиением узлов кластера на 2 территории, связанные медленным (1 Гбит) каналом.
Установка сервера:
- создать логический том /dev/system/globaltemppart
lvcreate --name globaltemppart --size 160G system /dev/sdb2
- создать локальную файловую систему ext4 с меткой globaltemppart
mke4fs -j -L globaltemppart -m 0 -v /dev/system/globaltemppart
tune2fs -i 0 -c 0 /dev/system/globaltemppart
- создать каталог /export/globaltemppart и внести в /etc/fstab запись о монтировании
LABEL=globaltemppart /export/globaltemppart ext4 defaults 1 2
- установить пакеты glusterfs-common.x86_64, glusterfs-server.x86_64 (тянут libibverbs, openib) для версии 3.0
или gluster-core.x86_64 для версии 3.1 (содержит и клиента)
- настроить экспортируемый том в /etc/glusterfs/glusterfsd.vol
volume posix-globaltemppart
type storage/posix
option directory /export/globaltemppart
option background-unlink yes
end-volume
volume locks-globaltemppart
type features/locks
# не работает
option mandatory-locks on
subvolumes posix-globaltemppart
end-volume
volume brick-globaltemppart
type performance/io-threads
option thread-count 8
subvolumes locks-globaltemppart
end-volume
volume server-tcp
type protocol/server
option transport-type tcp
option transport.socket.listen-port 6996
option transport.socket.nodelay on
option auth.login.brick-globaltemppart.allow имя-пользователя
option auth.login.имя-пользователя.password Пароль
subvolumes brick-globaltemppart
end-volume
- отредактировать права доступа:
chmod 400 /etc/glusterfs/glusterfsd.vol
- запустить сервиса glusterfsd (убедиться, что он стартует при перезагрузке: chkconfig --list glusterfsd)
- проверить журнал сервера /var/log/glusterfs/etc-glusterfs-glusterfsd.vol.log
Установка FUSE клиентов (в том числе и на серверах):
- установить пакеты с сайта glusterfs-common.x86_64, glusterfs-client.x86_64 (тянет libibverbs.x86_64, openib)
- mkdir /etc/glusterfs
- настроить импортируемый составной том в /etc/glusterfs/globaltemp-tcp.vol (на всех клиентах должна
быть одинаковая последовательность узлов):
volume node1
type protocol/client
option transport-type tcp
option remote-host node1
option transport.socket.nodelay on
option transport.remote-port 6996
option ping-timeout 30
option username имя-пользователя
option password пароль
option remote-subvolume brick-globaltemppart
end-volume
...
volume cluster-0
type cluster/distribute
option min-free-disk 5%
#
# type cluster/stripe
# option block-size 128KB
#
# type cluster/nufa
# option local-volume-name ближний-узел
# option min-free-disk 5%
subvolumes node1 node2 node3 node4
end-volume
volume readahead
type performance/read-ahead
option page-count 1
option force-atime-update on
subvolumes cluster-0
end-volume
volume writebehind
type performance/write-behind
option cache-size 1GB
option flush-behind on
option enable-O_SYNC on
option enable-trickling-writes off
subvolumes readahead
end-volume
volume iocache
type performance/io-cache
option cache-size 1GB
option cache-timeout 1
subvolumes writebehind
end-volume
volume quickread
type performance/quick-read
option cache-timeout 1
option max-file-size 64kB
subvolumes iocache
end-volume
volume statprefetch
type performance/stat-prefetch
subvolumes quickread
end-volume
- отредактировать права доступа:
chmod 400 /etc/glusterfs/globaltemp-tcp.vol
- создать каталог /globaltemp
- настроить автоматическое монтирование каталога в /etc/fstab
/etc/glusterfs/globaltemp-tcp.vol /globaltemp glusterfs rw,nosuid,nodev,exec,nouser,async,_netdev 0 0
- modprobe fuse (и обеспечить загрузку его до монтирования при старте системы в
/etc/rc.d/init.d/netfs;
размонтирование реализовано неправильно)
- смонтировать каталог
mount /globaltemp
- проверить журнал клиента /var/log/glusterfs/globaltemp.log
- проверить журналы на серверах /var/log/glusterfs/etc-glusterfs-glusterfsd.vol.log
- занести glusterfs в /etc/updatedb.conf в список исключений (заодно nfs и nfs4)
- проверить работоспособность перезагрузки клиента
- что будет с клиентами при перезагрузке сервера?
Установка ускорителей NFS:
- установить ускоритель NFS из пакета unfs3
- отредактировать /etc/unfs3exports
- запустить сервер unfsd: unfsd -e /etc/unfs3exports -m 4002
- обеспечить автоматический запуск при загрузке
Установка NFS клиентов:
- настроить автоматическое монтирование каталога в /etc/fstab (для Solaris /etc/vfstab и без nolock)
node1:/globaltemp /globaltemp nfs tcp,bg,hard,intr,rw,nosuid,nodev,exec,auto,nouser,async,_netdev,rsize=32768,wsize=32768,nolock 0 0
- смонтировать каталог
mount /globaltemp
- проверить содержимое
Требуется обеспечить узлы счётного кластера общим файловым пространством для
хранения временных файлов с автоматическим распределением нагрузки по узлам хранения данных.
Имеется 2 сервера с излишками дискового пространства (для начала).
Ситуация осложняется разбиением узлов кластера на 2 территории, связанные медленным (1 Гбит) каналом
вместо InfiniBand.
Установка сервера:
- создать логический том /dev/system/globaltemppart
lvcreate --name globaltemppart --size 160G system /dev/sdb2
- создать локальную файловую систему ext4 с меткой globaltemppart
mke4fs -j -L globaltemppart -m 0 -v /dev/system/globaltemppart
tune2fs -i 0 -c 0 /dev/system/globaltemppart
- создать каталог /export/globaltemppart и внести в /etc/fstab запись о монтировании
LABEL=globaltemppart /export/globaltemppart ext4 defaults 1 2
- установить пакет glusterfs-core.x86_64 (содержит прямого клиента)
и при необходимости пакет glusterfs-rdma (тянет libibverbs, openib)
- отредактировать ключи glusterd (--log-file=/var/log/glusterfs/daemon.log; mkdir /var/log/glusterfs)
- запустить демон glusterd (service glusterd start) и обеспечить его автоматический старт (chkconfig glusterd on)
- создание пула серверов (выполнять на хосте сервер1):
gluster peer probe IP-сервер2
gluster peer probe IP-сервер3
...
gluster peer probe IP-серверN
gluster peer status
- создание распределённого тома
gluster volume create globaltemp [transport tcp | rdma] IP-сервер1:/export/globaltemppart IP-сервер2:/export/globaltemppart
gluster volume info
gluster volume start globaltemp
gluster volume info
#gluster volume set globaltemp network.ping-timeout 30
#gluster volume set globaltemp performance.write-behind-window-size 1GB
#gluster volume set globaltemp performance.cache-size 1GB
#gluster volume set globaltemp performance.cache-max-file-size 64KB
#gluster volume set globaltemp performance.cache-refresh-timeout 1
проверить журналы /var/log/glusterfs/daemon.log, /var/log/glusterfs/nfs.log,
/var/log/glusterfs/bricks/*.log
том сразу доступен по NFS (требуется сервис portmap/rpcbind на сервере/клиенте и rpc.statd на клиенте)
при обращении к любому серверу (права доступа - '*')
Установка NFS клиентов (распределить клиентов по серверам):
- настроить автоматическое монтирование каталога в /etc/fstab (для Solaris /etc/vfstab и без nolock)
сервер[:порт]:/globaltemp /globaltemp nfs tcp,bg,hard,intr,rw,nosuid,nodev,exec,auto,nouser,async,_netdev,rsize=32768,wsize=32768,nolock 0 0
- смонтировать каталог
mount /globaltemp
- проверить содержимое
Установка FUSE клиентов (в том числе и на серверах):
- установить пакеты glusterfs-fuse и glusterfs-core с сайта и при необходимости
пакет glusterfs-rdma (тянет libibverbs.x86_64, openib)
- modprobe fuse (и обеспечить загрузку его до монтирования при старте системы в
/etc/rc.d/init.d/netfs;
размонтирование реализовано неправильно)
- создать каталог /globaltemp
- настроить автоматическое монтирование каталога в /etc/fstab
имя-сервера:/globaltemp /globaltemp glusterfs rw,nosuid,nodev,exec,nouser,async,_netdev 0 0
- смонтировать каталог
mount /globaltemp
- проверить журналы на серверах /var/log/glusterfs/bricks/*.log
- занести glusterfs в /etc/updatedb.conf в список исключений (заодно nfs и nfs4)
- проверить работоспособность перезагрузки клиента
- что будет с клиентами при перезагрузке сервера?
Изменения в 3.1.1 относительно 3.1.0
- 32-битные номера файлов для NFS клиентов - nfs.enable-ino32
- транслятор stat-prefetch
- блокировки не работает для NFS - при монтировании необходимо использовать "-o nolock"
Изменения в 3.1.0 относительно 3.0.6
- не годится даже под /tmp (зависает на df)
- динамическое изменение конфигурации без размонтирования томов у клиентов и остановки серверов (glusterd):
добавление тома (ошибки будут поправлены в 3.1.1), удаление тома, миграция (не всегда работает),
изменение балансировки
- Gluster Console Manager для управления томами из командной строки
- встроенная поддержка NFSv3
- все клиенты и серверы должны быть версии 3.1
- конфигурация и тома можно взять от версии 3.0 (но нежелательно)
Изменения в 3.0.6 относительно 2.0.8
- структура подлежащей файловой системы совместима с версией 2.0 (до 3.0.3?)
- протокол между клиентом и сервером несовместим с версией 2 (вплоть до падения сервера)
- самолечивание открытых реплицированных файлов при сбое сервера
- автоматический выбор алгоритма самолечения: полный, дифференциальный (особенно полезен для образов ВМ)
- самолечение в фоновом режиме
- транслятор Stat-prefetch предзагружает каталоги (включая stat)
- транслятор Quick-read ускоряет чтение большого количества маленьких файлов
- улучшение транслятора I/O cache при работе с большими файлами
- уменьшение загрузки ЦП при работе транслятора FUSE, не требуется наличие libfuse
- сигнал USR1 вызывает запись отладочной информации в файл /tmp/glusterdump.НомерПроцесса
- генератор описаний томов volgen (ручное написание конфигурации более не поддерживается)
- нет поддержки POSIX mandatory locking
- опция cache-size транслятора quick-read (5.0.5)
- tcp keepalive (5.0.5)
- опция use-readdirp (5.0.6)
|
Bog BOS: Сетевая файловая система GlusterFS
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru