Всем привет.
Компания в которой я работаю довольно динамично развивается, соответвенно и растет количество серверов, пользователей. Вопросы отказоустойчивости становятся все более актуальными, чем ранее.
Исторически сложилось, что некоторые данные лежат в файлах и подключены клиентами к бекендам по 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