GlusterFS — это распределённая, параллельная, линейно масштабируемая файловая система с возможностью защиты от сбоев. С помощью InfiniBand RDMA или TCP/IP GlusterFS может объединить хранилища данных, находящиеся на разных серверах, в одну параллельную сетевую файловую систему. GlusterFS работет в пользовательском пространстве при помощи технологии FUSE, поэтому не требует поддержки со стороны ядра операционной системы и работает поверх существующих файловых систем (ext3, XFS, reiserfs и т. п.). В отличие от других распределённых файловых систем, таких как Lustre и Ceph, для работы GlusterFS не требуется отдельный сервер для хранения метаданных.
1. Установка серверной части GlusterFS.
Так как GlusterFS доступен в стандартном репозитории Ubuntu 10,04, достаточно выполнить:
#apt-get install glusterfs-server
Для организации хранилища на сервере будем использовать каталог /glusterfshome.
Приводим файл конфигурации /etc/glusterfs/glusterfsd.vol на серверах в следующий вид:
volume posix
type storage/posix
option directory /glusterfshome
end-volume
volume locks
type features/locks
subvolumes posix
end-volume
volume brick
type performance/io-threads
option thread-count 8
subvolumes locks
end-volume
volume server
type protocol/server
option transport-type tcp
# далее через запятую нужно перечислить IP или имена хостов клиентов
# можно использовать маски вида 192.168.*,
option auth.addr.brick.allow 10.250.30.201,10.250.30.205
subvolumes brick
end-volume
Запускаем сервер GlusterFS:
#/etc/init.d/glusterfs-server start
2. Настройка клиента GlusterFS.
Для установки клиентской части GlusterFS выполняем:
#aptitude install glusterfs-client
Хранилище будем монтировать в каталог /home.
Приводим файл конфигурации клиента /etc/glusterfs/glusterfs.vol в следующий вид:
volume remote1
type protocol/client
option transport-type tcp
option remote-host 10.250.30.201# Ubuntuserver1
option remote-subvolume brick
end-volume
volume remote2
type protocol/client
option transport-type tcp
option remote-host 10.250.30.205 # UbuntuServer2
option remote-subvolume brick
end-volume
volume replicate
type cluster/replicate
subvolumes remote1 remote2
end-volume
volume writebehind
type performance/write-behind
option window-size 1MB
subvolumes replicate
end-volume
volume cache
type performance/io-cache
option cache-size 512MB
subvolumes writebehind
end-volume
Монтируем файловую систему GlusterFS в каталог /home:
#glusterfs —f /etc/glusterfs/glusterfs.vol /home
или
#mount —t glusterfs /etc/glusterfs/glusterfs.vol /home
Теперь о небольших граблях. Gluster-FS не монтируется при ребуте через fstab, т.к. модуль fuse не загружается автоматически. Можно пересобрать ядро, но мы поступим проще.
Добавляем в конец /etc/initramfs-tools/modules:
fuse
Выполняем:
update-initramfs -u -k `uname -r`
Для автоматизации монтирования во время загрузки в /etc/fstab сдедует добавить:
/etc/glusterfs/glusterfs.vol /home glusterfs defaults 0 0
В итоге мы получаем два сервера, на которых есть папки /glusterfshome (например, с файловой системой ext3 или ext4). В этих папках хранятся все данные, как в обычной папке локальной системы. На каждом из серверов эти папки монтируются в /home с файловой системой glusterfs. Тоесть в данном случае сервера являются и клиентами. При работе пользователя с папкой /home на одном сервере, все произведённые изменения так же отражаются на втором сервере в папке /home.
Как видно из файлов конфигураций, сервера ничего не знают друг о друге. О серверах знают только клиенты, они же производят взаимодействие (репликацию, хранение и т. д.) между серверами кластерной файловой системы (см. файл конфигурации клиента).
В качестве клиентов не обязательно должны выступать сами сервера, это может быть любой другой компьютер или сервер сети.