Инструкция по создании зеркалируемого (реплицированного) между двумя машинами хранилища файлов на базе GlusterFS (http://www.gluster.com/) и Ubuntu 9.10. Добавляемый в созданное хранилище файл на первом сервере буде сразу доступен на втором и наоборот, при этом данные на каждой машине будут использоваться из локального раздела, что обеспечивает значительно более высокую производительность, по сравнению с NFS. С особенности кластерной файловой системы GlusterFS можно познакомиться на [[http://www.opennet.dev/opennews/art.shtml?num=21760 данной странице]].В рассматриваемой конфигурации задействованы три машины: два сервера (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/glusterfsd.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-подобном виде, без репликации, [[http://www.howtoforge.net/creating-an-nfs-like-standalone-st... достаточно]] добавить в конфигурации сервера в блоке "volume locks" опцию "option mandatory-locks on". На стороне клиента нужно закомментировать в конфигурации блок "volume replicate" и убрать блок, описывающий вторую реплицируемую директорию "volume remote2". В секции "volume writebehind" на стороне клиента при этом заменяем опцию "subvolumes replicate" на "subvolumes remote", а также можем уменьшить размер окна до 1 Мб ("option window-size 1MB").
++ Создание распределенного на 4 узла хранилища
При реализации хранилища, распределенного на 4 узла, настройка [[http://www.howtoforge.net/distributed-storage-across-four-st... производится]] аналогично, по аналогии с 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.
URL: http://www.howtoforge.net/high-availability-storage-with-glu...
Обсуждается: http://www.opennet.dev/tips/info/2264.shtml