вторник, 1 марта 2022 г.

Построение высокодоступного кластерного хранилища на базе GlusterFS


§  Введение

В данном руководстве я покажу как можно использовать 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 

После этого из исходных кодов понадобится собрать и установить FUSE:
$ 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

Теперь установим GlusterFS (также из исходных кодов):
$ 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

Представленная конфигурация может быть использована для случая двух узлов (RAID 1). Для создания RAID 10 из четырех узлов следует использовать другую настройку:
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 было проведено несколько тестов, включая имитацию сбоя (путем временного отключения одного из узлов). Оказалось, система после замены узла восстанавливается быстро и эффективно (новые данные реплицируются при первом запросе информации).

Источник: Здесь

Комментариев нет:

Отправить комментарий