Инструкция по создании зеркалируемого (реплицированного) между двумя машинами
хранилища файлов на базе GlusterFS (http://www.gluster.com/) и Ubuntu 9.10.
Добавляемый в созданное хранилище файл на первом сервере буде сразу доступен на
втором и наоборот, при этом данные на каждой машине будут использоваться из
локального раздела, что обеспечивает значительно более высокую
производительность, по сравнению с NFS. С особенности кластерной файловой
системы GlusterFS можно познакомиться на данной странице.
В рассматриваемой конфигурации задействованы три машины: два сервера
(server1.example.com/192.168.0.100, server2.example.com/192.168.0.101) и один
клиент (client1.example.com: IP адрес 192.168.0.102). Серверы выступают в роли
машин для экспорта дисковых разделов, доступ к отказоустойчивому хранилищу
осуществляется на стороне клиента.
В представленном примере серверы и клиент размещены на разных машинах, но в
реальных условиях клиентские и серверные составляющие обычно совмещены на
одной машине. Соответствующую конфигурацию можно сгенерировать при помощи
утилиты glusterfs-volgen.
Установка серверной части GlusterFS на server1.example.com и server2.example.com:
Так как GlusterFS доступен в стандартном репозитории Ubuntu 9.10, достаточно
выполнить (сейчас и далее все действия выполняются под пользователем root):
apt-get install glusterfs-server
Для организации хранилища на сервере будем использовать каталог /data/export.
Приводим файл конфигурации /etc/glusterfs/glusterfsd.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 server
type protocol/server
option transport-type tcp
# далее через запятую нужно перечислить IP или имена хостов клиентов
# можно использовать маски вида 192.168.*,
option auth.addr.brick.allow 192.168.0.102
subvolumes brick
end-volume
Запускаем сервер GlusterFS:
/etc/init.d/glusterfs-server start
Настройка клиента GlusterFS
Для установки клиентской части GlusterFS выполняем:
aptitude install glusterfs-client glusterfs-server
Хранилище будем монтировать в каталог /mnt/glusterfs.
Приводим файл конфигурации клиента /etc/glusterfs/glusterfs.vol в следующий вид:
volume remote1
type protocol/client
option transport-type tcp
option remote-host 192.168.0.100 # server1.example.com
option remote-subvolume brick
end-volume
volume remote2
type protocol/client
option transport-type tcp
option remote-host 192.168.0.101 # server2.example.com
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 в каталог /mnt/glusterfs:
glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs
или
mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs
Для автоматизации монтирования во время загрузки в /etc/fstab сдедует добавить:
/etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults 0 0
Тестирование
Создаем в GlusterFS разделе на стороне клиента несколько файлов:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2
Эти файла сразу должны появиться на серверах в каталоге /data/export
Выключим первый сервер и добавить на стороне клиента еще несколько файлов:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
Изменения должны появиться на втором сервере.
Включим первый сервер и увидим, что данные на нем неактуальны. Изменения будут
синхронизированы автоматически, для инициирования синхронизации на стороне
клиента достаточно выполнить любую операцию с разделом, например, посмотреть
содержимое через "ls -l /mnt/glusterfs/".
GlusterFS в роли замены NFS с поддержкой кэширования.
Чтобы примонтировать раздел в NFS-подобном виде, без репликации, достаточно
добавить в конфигурации сервера в блоке "volume locks" опцию "option
mandatory-locks on". На стороне клиента нужно закомментировать в конфигурации
блок "volume replicate" и убрать блок, описывающий вторую реплицируемую
директорию "volume remote2". В секции "volume writebehind" на стороне клиента
при этом заменяем опцию "subvolumes replicate" на "subvolumes remote", а также
можем уменьшить размер окна до 1 Мб ("option window-size 1MB").
Создание распределенного на 4 узла хранилища
При реализации хранилища, распределенного на 4 узла, настройка производится
аналогично, по аналогии с remote2 добавляются разделы remote3 и remote4. Вместо
"volume replicate" добавляется раздел "volume distribute":
...
volume remote3
type protocol/client
option transport-type tcp
option remote-host server3.example.com
option remote-subvolume brick
end-volume
volume remote4
type protocol/client
option transport-type tcp
option remote-host server4.example.com
option remote-subvolume brick
end-volume
volume distribute
type cluster/distribute
subvolumes remote1 remote2 remote3 remote4
end-volume
...
В блоке "volume writebehind" приписывается "subvolumes distribute".
Конфигурацию можно сгенерировать автоматически, например, запустив на одном из серверов:
glusterfs-volgen --name repstore1 --raid 1 hostname1:/export/sdb1 \
hostname2:/export/sdb1 hostname3:/export/sdb1 hostname4:/export/sdb1
При надлежащей настройке параметров доступа к серверам все параметры
конфигурации серверных и клиентских составляющих на всех машинах
распределенного хранилища будут обновлены автоматически. Для систем не
поддерживающих GlusterFS доступ к хранилищу можно организовать через NFS, SMB
или WebDAV.
|