В данном руководстве я покажу как можно использовать GlusterFS для построения высокодоступного отказоустойчивого кластерного хранилища на базе двух серверов под управлением Ubuntu 8.04 LTS Server Edition. Хранимая информация будет реплицироваться и распространяться по всем серверам, которые выступят неким подобием RAID 10. Например, имея 4 сервера с емкостью диска 100 Гбайт, эффективное дисковое пространство в кластере составит 200 Гбайт. В случая выхода из строя одного из узлов, данные тем не менее остаются доступны и будут реплицироваться на другой работающий узел.
GlusterFS — кластерная файловая система, которая может достигать объемов в несколько петтабайт. Доступ возможен посредством Infiniband RDMA или TCP/IP. Единицы хранения могут быть построены на любой даже дешевой и ненадежной аппаратной платформе.
В первую очередь необходимо установить нужный комплект ПО:
$ sudo apt-get install sshfs build-essential flex bison byacc vim wget
$ wget http://europe.gluster.org/glusterfs/fuse/fuse-2.7.4glfs11.tar.gz
$ tar -zxvf fuse-2.7.4glfs11.tar.gz
$ cd fuse-2.7.4glfs11
$ ./configure && make && sudo make install
$ wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.0rc2.tar.gz
$ tar -zxvf glusterfs-2.0.0rc2.tar.gz
$ cd glusterfs-2.0.0rc2
$ ./configure && make && sudo make install
ln -sf /usr/local/lib/* /usr/lib/
$ mkdir /mnt/glusterfs
$ mkdir /data/
$ mkdir /data/export
$ mkdir /data/export-ns
$ mkdir /etc/glusterfs/
Следует знать, что GlusterFS работает по принципу "клиент/сервер". Сделаем наши узлы и сервером и клиентом одновременно.
Начнем с конфигурирования серверной части. Настройку необходимо провести для всех узлов. Необходимо текстовым редактором открыть файл /etc/glusterfs/glusterfs-server.vol
и занести в него следующее содержимое:
volume posix
type storage/posix
option directory /data/export
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 posix-ns
type storage/posix
option directory /data/export-ns
end-volume
volume locks-ns
type features/locks
subvolumes posix-ns
end-volume
volume brick-ns
type performance/io-threads
option thread-count 8
subvolumes locks-ns
end-volume
volume server
type protocol/server
option transport-type tcp
option auth.addr.brick.allow *
option auth.addr.brick-ns.allow *
subvolumes brick brick-ns
end-volume
glusterfsd -f /etc/glusterfs/glusterfs-server.vol
для запуска серверной части.
В нашем примере используются следующие соглашения узлы:
и т.д..server1 : 192.168.0.1 server2 : 192.168.0.2 server3 : 192.168.0.3 server4 : 192.168.0.4
/etc/glusterfs/glusterfs-client.vol
следующим образом:volume brick1
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.1
option remote-subvolume brick
end-volume
volume brick2
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.2
option remote-subvolume brick
end-volume
volume brick1-ns
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.1
option remote-subvolume brick-ns
end-volume
volume brick2-ns
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.2
option remote-subvolume brick-ns
end-volume
volume afr1
type cluster/afr
subvolumes brick1 brick2
end-volume
volume afr-ns
type cluster/afr
subvolumes brick1-ns brick2-ns
end-volume
volume unify
type cluster/unify
option scheduler rr # round robin
option namespace afr-ns
subvolumes afr1
end-volume
volume brick1
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.1
option remote-subvolume brick
end-volume
volume brick2
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.2
option remote-subvolume brick
end-volume
volume brick3
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.3
option remote-subvolume brick
end-volume
volume brick4
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.4
option remote-subvolume brick
end-volume
volume brick1-ns
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.1
option remote-subvolume brick-ns
end-volume
volume brick2-ns
type protocol/client
option transport-type tcp/client
option remote-host 192.168.0.2
option remote-subvolume brick-ns
end-volume
volume afr1
type cluster/afr
subvolumes brick1 brick4
end-volume
volume afr2
type cluster/afr
subvolumes brick2 brick3
end-volume
volume afr-ns
type cluster/afr
subvolumes brick1-ns brick2-ns
end-volume
volume unify
type cluster/unify
option scheduler rr # Round-robin
option namespace afr-ns
subvolumes afr1 afr2
end-volume
$ glusterfs -f /etc/glusterfs/glusterfs-client.vol /mnt/glusterfs
После того, как хранилище подключено в папку /mnt/glusterfs было проведено несколько тестов, включая имитацию сбоя (путем временного отключения одного из узлов). Оказалось, система после замены узла восстанавливается быстро и эффективно (новые данные реплицируются при первом запросе информации).