Взрослеем с GlusterFS

в 12:48, , рубрики: glusterfs, nfs, распределенные файловые системы, системное администрирование, метки: , ,

Всем привет.

Компания в которой я работаю довольно динамично развивается, соответвенно и растет количество серверов, пользователей. Вопросы отказоустойчивости становятся все более актуальными, чем ранее.
Исторически сложилось, что некоторые данные лежат в файлах и подключены клиентами к бекендам по NFS. Однако не хотелось, что бы центральный сервер был точкой отказа.
Rsync-варианты отмели сразу. После изучения вопроса и опыта других людей, а также некоторых тестов s3fs, которая к слову была кандидатом №1 на распределенное хранилище, была выбрана GlusterFS.

Не вдаваясь в подробности, которые вы к слову можете найти по ссылкам Основной сайт, Комьюнити скажу, что для наших целей такое хранилище вполне подходило. Главной особенностью GlusterFS является то, что клиент пишет на любой доступный в данное время мастер, и делает репликацию на недоступный после того как он вернулся в строй.

Итак приступим к настройке. Оговорюсь, что одновременно работал и старый NFS на серверах, они вполне уживаются на одной машине. Нам это было нужно на время перехода с NFS.

Устанавливаем сервер:

aptitude install glusterfs-server

Описываем конфиг(/etc/glusterfs/glusterfsd.vol):

volume posix
    type storage/posix
    option directory /mnt/Files
   end-volume

   volume locks
    type features/locks
    subvolumes posix
   end-volume

   volume Files
    type performance/io-threads
    option thread-count 8
    subvolumes locks
   end-volume

   volume server
    type protocol/server
    option transport-type tcp
        option auth.login.Files.allow user # Будем подключаться по связке login+password
        option auth.login.user.password secret_pass
    subvolumes Files
   end-volume

Дублируем пакет glusterfs-server и конфиг(/etc/glusterfs/glusterfsd.vol) на втором сервере.

Устнавливаем клиент:

aptitude install glusterfs-client

Описываем конфиг для клиента(/etc/glusterfs/glusterfs.vol):

volume server1.com
type protocol/client
    option transport-type tcp
    option username user
    option password secret_pass
    option remote-host 10.132.259.159 # server1.com
    option remote-subvolume Files
   end-volume

   volume server2.com
    type protocol/client
    option transport-type tcp
    option username user
    option password secret_pass
    option remote-host 10.184.179.175 # server2.com
    option remote-subvolume Files
   end-volume

   volume replicate
    type cluster/replicate
    subvolumes server1.com server2.com
   end-volume

   volume writebehind
    type performance/write-behind
    option cache-size 1MB
    subvolumes replicate
   end-volume

   volume cache
    type performance/io-cache
    option cache-size 512MB
    subvolumes writebehind
   end-volume
 

Загружаем модуль fuse

modprobe fuse

пробуем монтировать ФС

/usr/sbin/glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/Files

df -h

/etc/glusterfs/glusterfs.vol 199G  120G   70G  64% /mnt/Files

Теперь о небольших граблях. Gluster-FS не монтируется при ребуте через fstab, т.к. модуль fuse не загружается автоматически. Можно пересобрать ядро, но мы поступим проще.
Добавляем в конец /etc/initramfs-tools/modules:

fuse

Выполняем:

update-initramfs -u -k `uname -r`

Добавляем в /etc/fstab:

/etc/glusterfs/glusterfs.vol  /mnt/Files  glusterfs  defaults  0  0

Ребут и профит.

Ну, предвидя вопросы о тестах, приведу парочку показательных, Gluster-fs vs NFS vs POHMELFS. Файл весом ~700Мб.

GlusterFS:

root@domU-12-41-56-0F-34-81:~# time cat /mnt/Files/ubuntu-11.10-desktop-amd64+mac.iso > /dev/null

real    0m28.101s
user    0m0.000s
sys     0m4.700s
root@domU-12-41-56-0F-34-81:~# time cat /mnt/Files/ubuntu-11.10-desktop-amd64+mac.iso > /dev/null

real    0m20.321s
user    0m0.000s
sys     0m2.030s
root@domU-12-41-56-0F-34-81:~# time cat /mnt/Files/ubuntu-11.10-desktop-amd64+mac.iso > /dev/null

real    0m36.444s
user    0m0.000s
sys     0m1.410s

POHMELFS(Взято отсюда POHMELFS: NFS по-новому):

stolen@stolen ~/soft/pohmelfs-server.git $ time cat /mnt/pohmel/share/GRTMPVOL_RU_20.10.08.iso >/dev/null
real 1m37.150s
user 0m0.010s
sys 0m1.270s

stolen@stolen ~/soft/pohmelfs-server.git $ time cat /mnt/pohmel/share/GRTMPVOL_RU_20.10.08.iso >/dev/null
real 0m0.591s
user 0m0.003s
sys 0m0.257s

stolen@stolen ~/soft/pohmelfs-server.git $ time cat /mnt/upload/share/GRTMPVOL_RU_20.10.08.iso >/dev/null
real 1m3.719s
user 0m0.003s
sys 0m0.400s

NFS:

root@domU-12-41-56-0F-34-81:run$ time cat /mnt/Files/ubuntu-11.10-desktop-amd64+mac.iso > /dev/null

real    0m15.220s
user    0m0.008s
sys     0m0.423s

root@domU-12-41-56-0F-34-81:run$ time cat /mnt/Files/ubuntu-11.10-desktop-amd64+mac.iso > /dev/null

real    0m16.139s
user    0m0.005s
sys     0m0.160s

root@domU-12-41-56-0F-34-81:run$ time cat /mnt/Files/ubuntu-11.10-desktop-amd64+mac.iso > /dev/null

real    0m18.812s
user    0m0.006s
sys     0m0.177s

Автор: astlock


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js