Нашел несколько статей на хабре о базовой установке и настройке GlusterFS, но не нашел ничего о типах распределения контента, которые он поддерживает и с которыми я долго игрался. О чем и пойдет речь в данной статье.
GlusterFS — это очень удобная и простая в использовании и настройке распределённая файловая система, которая работает в пользовательском пространстве используя FUSE технологию, т.е. работает поверх основной файловой системы. Для установки и настройки будем использовать ОС Ubuntu 12.04.
Будем настраивать кластер из двух серверов и монтировать (тестить) на одном клиенте. Имеем следующие настройки:
Сначала, для удобства, добавим все адреса в хосты на каждой машине.
Если используется firewall, нужно открыть TCP порты 111, 24007-24050 на всех машинах, которые выступают в роле серверов (двух, в нашем случаи).
На всех серверах нужно установить gluster-server. На данный момент самая свежая версия – 3.5.2. Установку будем делать из ppa репозиториев.
Теперь подключаемся на один из серверов и создаем кластер.
Проверим статус:
Как видим, server2 был добавлен в кластер и его статус – Connected. Так же можно убедиться, что на втором сервере все ок.
GlusterFS поддерживает 5 типов распределения контента объединённого в volume:
Сначала настроим отдельно каждый тип распределения контента и потом смонтируем все 5 volum-ов на клиенте для тестов.
При данной настройке данные будут распределяться в случайном порядке между каждой папкой, которая входив в volume.
Создадим на первом сервере паки dist1, dist2, на втором – dist3, dist4.
Теперь можно создать и стартануть volume.
При данной настройке данные будут зеркально (как RAID1) копироваться между каждой папкой (сервером), которая входив в volume. Разумеется, количество папок(серверов) входящих в volume должно быть кратно реплике(replica).
Создадим на первом сервере паки repl1, repl2, на втором – repl3, repl4.
Теперь можно создать и стартануть volume.
В данном случаи все файлы будут реплицироваться на все 4 папки. Т.е. во всех папках будет находиться один и тот же контент.
При данной настройке файлы будут разбиваться на части и каждый кусок будет храниться в каждой из папок которая входит в volume. Такой тип распределения контента подходит для хранение емкостных данных с очень большим размером (видеоконтент в хорошем качестве, к примеру). Разумеется, количество папок входящих в volume должно быть эквивалентно значению stripe. Т.е. если у нас 5 серверов, то файл будет разбиваться на 5 частей и каждый его кусочек будет храниться на всех 5 серверах.
Создадим на первом сервере паки strip1, strip2, на втором – strip3, strip4.
Теперь можно создать и стартануть volume.
В данном случаи на каждом из 4-х серверов(папок) будет находиться по одному кусочку залитого файла.
При данной настройке файлы будут разбиваться на части и куски файлов будут распределяться по папкам и храниться в одной из них. Разумеется, количество папок входящих в volume должно быть кратно значению stripe. Т.е. если у нас 8 серверов и значение stripe равно 4, то файлы будут разбиваться на 4 части и храниться или на первых 4-х серверах или на следующей 4-ке серверов. Так же само, если у нас 4 сервера и stripe равно 2, то файлы будут разбиваться на 2 части и храниться на первых 2-х или на следующих 2-х серверах.
Создадим на первом сервере паки dist-strip1, dist-strip2, на втором – dist-strip3, dist-strip4.
Теперь можно создать и стартануть volume. При этом, очередность серверов играет очень большую роль: части файлов будут храниться на первой паре серверов (при stripe=2), или на первой четверке серверов (при stripe=4), а распределяться контент будет между первой и второй парой или четверкой и т.п.
При данной настройке данные будут распределяться в случайном порядке между папками и каждая папка имеет свою зеркальную копию. Разумеется, количество папок входящих в volume должно быть кратно значению replica. Т.е. если у нас 4 сервера и значение replica равно 2, то файлы будут распределяться по 2-м серверам в произвольном порядке, а 2 оставшихся сервера будут хранить идентичную копию контента первых двух. Если у нас 8 серверов и replica равно 4, то у нас будет одно зеркало из 4-х серверов.
Создадим на первом сервере паки dist-repl1, dist-repl2, на втором – dist-repl3, dist-repl4.
Теперь можно создать и стартануть volume. При этом, очередность серверов играет очень большую роль: первая пара(четверка) серверов записана последовательно составляет одну реплику. Т.е. если у нас 8 серверов и replica равна 4, то первые 4 сервера будут иметь один одинаковый контент, а вторая четверка будет иметь другой одинаковый контент, и т.п.
Теперь проверим какие volum-ы мы создали.
Как видим, у нас 5 volum-ов с различным типом распределения контента. Можно переходить к клиентской части.
На всех клиентах нужно установить gluster-client из ppa репозиториев.
Далее всего лишь нужно смонтировать сетевую папку по имени созданного volum-a. При этом IP или доменное имя сервера роли не играет, т.е. если у нас 10 серверов добавлены в один кластер, то на клиенте можно монтировать шару используя любой из 10-ти IP, имя volum-a остается тем же.
Подключаемся к клиенту, создаем папку для нового диска и монтируем distributed volume.
Как видим, у нас успешно смонтировался новый сетевой диск размером 30Гб(суммарный размер дисков всех серверов входящих в volume). Теперь создадим десяток файлов.
Смотрим как распределился контент по серверам.
Как видим, файлы раскидало по всем четырем папкам, какие входили в distributed volume.
Подключаемся к клиенту, создаем папку для нового диска и монтируем replicated volume.
Как видим, у нас успешно смонтировался новый сетевой диск размером 7.3Гб(суммарный размер дисков всех серверов входящих в volume разделенный на число реплик). Теперь создадим десяток файлов.
Смотрим как распределился контент по серверам.
Как видим, файлы зеркально скопировались в каждую папку, которая входили в replicated volume.
Подключаемся к клиенту, создаем папку для нового диска и монтируем striped volume.
Как видим, у нас успешно смонтировался новый сетевой диск размером 30Гб(суммарный размер дисков всех серверов входящих в volume). Теперь создадим пару больших файлов и скопируем в папку.
Как видно, у нас в папке лежит 2 файла размером 300Мб. Теперь посмотрим как распределился контент по серверам.
Как видим, файлы были разбиты на равные части по 75Мб и разбросаны по всем четырем папкам, какие входили в striped volume.
Подключаемся к клиенту, создаем папку для нового диска и монтируем distributed striped volume.
Как видим, у нас успешно смонтировался новый сетевой диск размером 30Гб(суммарный размер дисков всех серверов входящих в volume). Теперь создадим пару больших файлов и скопируем в папку.
Как видно, у нас в папке лежит 2 файла размером 300Мб. Теперь посмотрим как распределился контент по серверам.
Как видим, файлы были разбросаны по разным папкам и разбиты на равные части по 150Мб.
Подключаемся к клиенту, создаем папку для нового диска и монтируем distributed replicated volume.
Как видим, у нас успешно смонтировался новый сетевой диск размером 15Гб(суммарный размер дисков всех серверов входящих в volume разделенный на число реплик). Теперь создадим десяток файлов.
Смотрим как распределился контент по серверам.
Как видим, первый сервер имеет такой же контент как и второй разбросанный по папкам.
В реальных условиях каждая папка должна быть отдельно смонтированным диском (не рутовой файловой системой). Теперь вы знакомы с каждым типом распределения контента, который используется в glusterFS.
GlusterFS хорошо себя показывает в локальных сетях при базовой настройке, если переходить к распределённых по странам датацентрах, то нужно проводить тюнинг настроек как на стороне сервера, так и при монтирование на клиенте, о чем пойдет речь в следующей статье.
GlusterFS — это очень удобная и простая в использовании и настройке распределённая файловая система, которая работает в пользовательском пространстве используя FUSE технологию, т.е. работает поверх основной файловой системы. Для установки и настройки будем использовать ОС Ubuntu 12.04.
Будем настраивать кластер из двух серверов и монтировать (тестить) на одном клиенте. Имеем следующие настройки:
IP |
Hostname |
Short name |
192.168.1.100 | server1.example.com | server1 |
192.168.1.101 | server2.example.com | server2 |
192.168.1.102 | client1.example.com | client1 |
1. Общие настройки
Сначала, для удобства, добавим все адреса в хосты на каждой машине.
root@server1:~# cat /etc/hosts
127.0.0.1 localhost
192.168.1.100 server1.example.com server1
192.168.1.101 server2.example.com server2
192.168.1.102 client1.example.com client1
root@server2:~# cat /etc/hosts
127.0.0.1 localhost
192.168.1.100 server1.example.com server1
192.168.1.101 server2.example.com server2
192.168.1.102 client1.example.com client1
root@client1:~# cat /etc/hosts
127.0.0.1 localhost
192.168.1.100 server1.example.com server1
192.168.1.101 server2.example.com server2
192.168.1.102 client1.example.com client1
Если используется firewall, нужно открыть TCP порты 111, 24007-24050 на всех машинах, которые выступают в роле серверов (двух, в нашем случаи).
2. Настройка серверной части (кластера)
На всех серверах нужно установить gluster-server. На данный момент самая свежая версия – 3.5.2. Установку будем делать из ppa репозиториев.
root@server1:~#apt-get install python-software-properties
root@server1:~#add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.5
root@server1:~#apt-get update
root@server1:~#apt-get install glusterfs-server -у
root@server2:~#apt-get install python-software-properties
root@server2:~#add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.5
root@server2:~#apt-get update
root@server2:~# apt-get install glusterfs-server -у
Теперь подключаемся на один из серверов и создаем кластер.
root@server1:~# gluster peer probe server2.example.com
Probe successful
Проверим статус:
root@server1:~# gluster peer status
Number of Peers: 1
Hostname: server2.example.com
Uuid: 0f3aa4f4-f9dd-4cd2-a7a5-126606fbab33
State: Peer in Cluster (Connected)
Как видим, server2 был добавлен в кластер и его статус – Connected. Так же можно убедиться, что на втором сервере все ок.
root@server2:~# gluster peer status
Number of Peers: 1
Hostname: 192.168.1.100
Uuid: ae4e6766-787f-4d0c-8b96-8fc9523ef346
State: Peer in Cluster (Connected)
GlusterFS поддерживает 5 типов распределения контента объединённого в volume:
- Distributed (распределённый)
- Replicated (реплицируемый)
- Striped (разделенный по частям)
- Distributed Striped (распределённый и разделенный по частям)
- Distributed Replicated (распределённый и реплицируемый)
Сначала настроим отдельно каждый тип распределения контента и потом смонтируем все 5 volum-ов на клиенте для тестов.
2.1 Настройка distributed volume
При данной настройке данные будут распределяться в случайном порядке между каждой папкой, которая входив в volume.
Создадим на первом сервере паки dist1, dist2, на втором – dist3, dist4.
root@server1:~# mkdir /mnt/dist{1,2}
root@server2:~# mkdir /mnt/dist{3,4}
Теперь можно создать и стартануть volume.
root@server1:~# gluster volume create distributed transport tcp server1:/mnt/dist1 server1:/mnt/dist2 server2:/mnt/dist3 server2:/mnt/dist4 force
Creation of volume distributed has been successful. Please start the volume to access data.
root@server1:~# gluster volume start distributed
Starting volume distributed has been successful
2.2 Настройка replicated volume
При данной настройке данные будут зеркально (как RAID1) копироваться между каждой папкой (сервером), которая входив в volume. Разумеется, количество папок(серверов) входящих в volume должно быть кратно реплике(replica).
Создадим на первом сервере паки repl1, repl2, на втором – repl3, repl4.
root@server1:~# mkdir /mnt/repl{1,2}
root@server2:~# mkdir /mnt/repl{3,4}
Теперь можно создать и стартануть volume.
root@server1:~# gluster volume create replicated replica 4 transport tcp server1:/mnt/repl1 server2:/mnt/repl3 server1:/mnt/repl2 server2:/mnt/repl4 force
Multiple bricks of a replicate volume are present on the same server. This setup is not optimal.
Do you still want to continue creating the volume? (y/n) y
volume create: replicated: success: please start the volume to access data
root@server1:~# gluster volume start replicated
volume start: replicated: success
В данном случаи все файлы будут реплицироваться на все 4 папки. Т.е. во всех папках будет находиться один и тот же контент.
2.3 Настройка striped volume
При данной настройке файлы будут разбиваться на части и каждый кусок будет храниться в каждой из папок которая входит в volume. Такой тип распределения контента подходит для хранение емкостных данных с очень большим размером (видеоконтент в хорошем качестве, к примеру). Разумеется, количество папок входящих в volume должно быть эквивалентно значению stripe. Т.е. если у нас 5 серверов, то файл будет разбиваться на 5 частей и каждый его кусочек будет храниться на всех 5 серверах.
Создадим на первом сервере паки strip1, strip2, на втором – strip3, strip4.
root@server1:~# mkdir /mnt/strip{1,2}
root@server2:~# mkdir /mnt/strip{3,4}
Теперь можно создать и стартануть volume.
root@server1:~# gluster volume create striped stripe 4 transport tcp server1:/mnt/strip1 server1:/mnt/strip2 server2:/mnt/strip3 server2:/mnt/strip4 force
Creation of volume striped has been successful. Please start the volume to access data.
root@server1:~# gluster volume start striped
Starting volume striped has been successful
В данном случаи на каждом из 4-х серверов(папок) будет находиться по одному кусочку залитого файла.
2.4 Настройка distributed striped volume
При данной настройке файлы будут разбиваться на части и куски файлов будут распределяться по папкам и храниться в одной из них. Разумеется, количество папок входящих в volume должно быть кратно значению stripe. Т.е. если у нас 8 серверов и значение stripe равно 4, то файлы будут разбиваться на 4 части и храниться или на первых 4-х серверах или на следующей 4-ке серверов. Так же само, если у нас 4 сервера и stripe равно 2, то файлы будут разбиваться на 2 части и храниться на первых 2-х или на следующих 2-х серверах.
Создадим на первом сервере паки dist-strip1, dist-strip2, на втором – dist-strip3, dist-strip4.
root@server1:~# mkdir /mnt/dist-strip{1,2}
root@server2:~# mkdir /mnt/dist-strip{3,4}
Теперь можно создать и стартануть volume. При этом, очередность серверов играет очень большую роль: части файлов будут храниться на первой паре серверов (при stripe=2), или на первой четверке серверов (при stripe=4), а распределяться контент будет между первой и второй парой или четверкой и т.п.
root@server1:~# gluster volume create distributed-striped stripe 2 transport tcp server1:/mnt/dist-strip1 server2:/mnt/dist-strip3 server1:/mnt/dist-strip2 server2:/mnt/dist-strip4 force
Creation of volume distributed-striped has been successful. Please start the volume to access data.
root@server1:~# gluster volume start distributed-striped
Starting volume distributed-striped has been successful
2.5 Настройка distributed replicated volume
При данной настройке данные будут распределяться в случайном порядке между папками и каждая папка имеет свою зеркальную копию. Разумеется, количество папок входящих в volume должно быть кратно значению replica. Т.е. если у нас 4 сервера и значение replica равно 2, то файлы будут распределяться по 2-м серверам в произвольном порядке, а 2 оставшихся сервера будут хранить идентичную копию контента первых двух. Если у нас 8 серверов и replica равно 4, то у нас будет одно зеркало из 4-х серверов.
Создадим на первом сервере паки dist-repl1, dist-repl2, на втором – dist-repl3, dist-repl4.
root@server1:~# mkdir /mnt/dist-repl{1,2}
root@server2:~# mkdir /mnt/dist-repl{3,4}
Теперь можно создать и стартануть volume. При этом, очередность серверов играет очень большую роль: первая пара(четверка) серверов записана последовательно составляет одну реплику. Т.е. если у нас 8 серверов и replica равна 4, то первые 4 сервера будут иметь один одинаковый контент, а вторая четверка будет иметь другой одинаковый контент, и т.п.
root@server1:~# gluster volume create distributed-replicated replica 2 transport tcp server1:/mnt/dist-repl1 server2:/mnt/dist-repl3 server1:/mnt/dist-repl2 server2:/mnt/dist-repl4 force
Creation of volume distributed-replicated has been successful. Please start the volume to access data.
root@server1:~# gluster volume start distributed-replicated
Starting volume distributed-replicated has been successful
Теперь проверим какие volum-ы мы создали.
root@server1:~# gluster volume info
Volume Name: distributed
Type: Distribute
Volume ID: 01622619-fd93-4ee1-85ad-ca8cf1d85f7e
Status: Started
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: server1:/mnt/dist1
Brick2: server1:/mnt/dist2
Brick3: server2:/mnt/dist3
Brick4: server2:/mnt/dist4
Volume Name: replicated
Type: Replicate
Volume ID: 67afcb89-7e5d-4a02-b4ac-0c2de7cd97be
Status: Started
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/mnt/repl1
Brick2: server2:/mnt/repl3
Brick3: server1:/mnt/repl2
Brick4: server2:/mnt/repl4
Volume Name: striped
Type: Stripe
Volume ID: e9ef42bf-8265-4973-85de-4cafd2a68fec
Status: Started
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/mnt/strip1
Brick2: server1:/mnt/strip2
Brick3: server2:/mnt/strip3
Brick4: server2:/mnt/strip4
Volume Name: distributed-striped
Type: Distributed-Stripe
Volume ID: aa70dd67-3ca9-48cb-865b-b10f8ca1ccad
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/mnt/dist-strip1
Brick2: server2:/mnt/dist-strip3
Brick3: server1:/mnt/dist-strip2
Brick4: server2:/mnt/dist-strip4
Volume Name: distributed-replicated
Type: Distributed-Replicate
Volume ID: 59a819c4-6e84-4c49-9e90-23daa59d12ee
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/mnt/dist-repl1
Brick2: server2:/mnt/dist-repl3
Brick3: server1:/mnt/dist-repl2
Brick4: server2:/mnt/dist-repl4
Как видим, у нас 5 volum-ов с различным типом распределения контента. Можно переходить к клиентской части.
3. Настройка клиентской части
На всех клиентах нужно установить gluster-client из ppa репозиториев.
root@client1:~#apt-get install python-software-properties
root@client1:~#add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.5
root@client1:~#apt-get update
root@client1:~#apt-get install glusterfs-client
Далее всего лишь нужно смонтировать сетевую папку по имени созданного volum-a. При этом IP или доменное имя сервера роли не играет, т.е. если у нас 10 серверов добавлены в один кластер, то на клиенте можно монтировать шару используя любой из 10-ти IP, имя volum-a остается тем же.
3.1 Монтирование и тест distributed volume
Подключаемся к клиенту, создаем папку для нового диска и монтируем distributed volume.
root@client1:~# mkdir /mnt/distrib
root@client1:~# mount.glusterfs server1:/distributed /mnt/distrib/
root@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.3G 1.5G 5.5G 21% /
udev 236M 4.0K 236M 1% /dev
tmpfs 49M 280K 49M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 245M 0 245M 0% /run/shm
server1:/distributed 30G 6.3G 22G 23% /mnt/distrib
Как видим, у нас успешно смонтировался новый сетевой диск размером 30Гб(суммарный размер дисков всех серверов входящих в volume). Теперь создадим десяток файлов.
root@client1:~# seq 1 10 | while read line; do echo "This is File${line}" > /mnt/distrib/file${line};done
root@client1:~# ls /mnt/distrib/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Смотрим как распределился контент по серверам.
root@server1:~# ls /mnt/dist[0-9]/
/mnt/dist1/:
file10 file3 file4 file9
/mnt/dist2/:
file7
root@server2:~# ls /mnt/dist[0-9]/
/mnt/dist3/:
file1 file2
/mnt/dist4/:
file5 file6 file8
Как видим, файлы раскидало по всем четырем папкам, какие входили в distributed volume.
3.2 Монтирование и тест replicated volume
Подключаемся к клиенту, создаем папку для нового диска и монтируем replicated volume.
root@client1:~# mkdir /mnt/replica
root@client1:~# mount.glusterfs server1:/replicated /mnt/replica/
root@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.3G 1.5G 5.5G 21% /
udev 131M 4.0K 131M 1% /dev
tmpfs 28M 280K 28M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 140M 0 140M 0% /run/shm
server1:/replicated 7.3G 1.9G 5.1G 28% /mnt/replica
Как видим, у нас успешно смонтировался новый сетевой диск размером 7.3Гб(суммарный размер дисков всех серверов входящих в volume разделенный на число реплик). Теперь создадим десяток файлов.
root@client1:~# seq 1 10 | while read line; do echo "This is File${line}" > /mnt/replica/file${line};done
root@client1:~# ls /mnt/replica/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Смотрим как распределился контент по серверам.
root@server1:~# ls /mnt/repl*
/mnt/repl1:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
/mnt/repl2:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
root@server2:~# ls /mnt/repl*
/mnt/repl3:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
/mnt/repl4:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Как видим, файлы зеркально скопировались в каждую папку, которая входили в replicated volume.
3.3 Монтирование и тест striped volume
Подключаемся к клиенту, создаем папку для нового диска и монтируем striped volume.
root@client1:~# mkdir /mnt/strip
root@client1:~# mount.glusterfs server1:/striped /mnt/strip/
root@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.3G 1.5G 5.5G 21% /
udev 131M 4.0K 131M 1% /dev
tmpfs 28M 280K 28M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 140M 0 140M 0% /run/shm
server1:/striped 30G 6.3G 22G 23% /mnt/strip
Как видим, у нас успешно смонтировался новый сетевой диск размером 30Гб(суммарный размер дисков всех серверов входящих в volume). Теперь создадим пару больших файлов и скопируем в папку.
root@client1:~# dd if=/dev/urandom of=test2.bin bs=30M count=10
root@client1:~# dd if=/dev/urandom of=test1.bin bs=30M count=10
root@client1:~# cp test* /mnt/strip/
root@client1:~# ls -lh /mnt/strip/
total 601M
-rw-r--r-- 1 root root 300M Mar 2 14:13 test1.bin
-rw-r--r-- 1 root root 300M Mar 2 14:13 test2.bin
Как видно, у нас в папке лежит 2 файла размером 300Мб. Теперь посмотрим как распределился контент по серверам.
root@server1:~# ls -lh /mnt/strip*
/mnt/strip1:
total 151M
-rw-r--r-- 2 root root 75M Mar 2 14:13 test1.bin
-rw-r--r-- 2 root root 75M Mar 2 14:13 test2.bin
/mnt/strip2:
total 151M
-rw-r--r-- 2 root root 75M Mar 2 14:13 test1.bin
-rw-r--r-- 2 root root 75M Mar 2 14:13 test2.bin
root@server2:~# ls -lh /mnt/strip*
/mnt/strip3:
total 151M
-rw-r--r-- 2 root root 75M Mar 2 14:13 test1.bin
-rw-r--r-- 2 root root 75M Mar 2 14:13 test2.bin
/mnt/strip4:
total 151M
-rw-r--r-- 2 root root 75M Mar 2 14:13 test1.bin
-rw-r--r-- 2 root root 75M Mar 2 14:13 test2.bin
Как видим, файлы были разбиты на равные части по 75Мб и разбросаны по всем четырем папкам, какие входили в striped volume.
3.4 Монтирование и тест distributed striped volume
Подключаемся к клиенту, создаем папку для нового диска и монтируем distributed striped volume.
root@client1:~# mkdir /mnt/distrib-strip
root@client1:~# mount.glusterfs server1:/distributed-striped /mnt/distrib-strip/
root@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.3G 1.8G 5.2G 25% /
udev 131M 4.0K 131M 1% /dev
tmpfs 28M 280K 28M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 140M 0 140M 0% /run/shm
server1:/distributed-striped 30G 6.9G 21G 26% /mnt/distrib-strip
Как видим, у нас успешно смонтировался новый сетевой диск размером 30Гб(суммарный размер дисков всех серверов входящих в volume). Теперь создадим пару больших файлов и скопируем в папку.
root@client1:~# dd if=/dev/urandom of=test2.bin bs=30M count=10
root@client1:~# dd if=/dev/urandom of=test1.bin bs=30M count=10
root@client1:~# cp test* /mnt/distrib-strip/
root@client1:~# ls -lh /mnt/distrib-strip/
total 600M
-rw-r--r-- 1 root root 300M Mar 2 14:35 test1.bin
-rw-r--r-- 1 root root 300M Mar 2 14:34 test2.bin
Как видно, у нас в папке лежит 2 файла размером 300Мб. Теперь посмотрим как распределился контент по серверам.
root@server1:~# ls -lh /mnt/dist-strip*
/mnt/dist-strip1:
total 151M
-rw-r--r-- 2 root root 150M Mar 2 14:35 test1.bin
/mnt/dist-strip2:
total 151M
-rw-r--r-- 2 root root 150M Mar 2 14:34 test2.bin
root@server2:~# ls -lh /mnt/dist-strip*
/mnt/dist-strip3:
total 151M
-rw-r--r-- 2 root root 150M Mar 2 14:35 test1.bin
/mnt/dist-strip4:
total 151M
-rw-r--r-- 2 root root 150M Mar 2 14:34 test2.bin
Как видим, файлы были разбросаны по разным папкам и разбиты на равные части по 150Мб.
3.5 Монтирование и тест distributed replicated volume
Подключаемся к клиенту, создаем папку для нового диска и монтируем distributed replicated volume.
root@client1:~# mkdir /mnt/distrib-repl
root@client1:~# mount.glusterfs server1:/distributed-replicated /mnt/distrib-repl/
root@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.3G 1.8G 5.1G 27% /
udev 131M 4.0K 131M 1% /dev
tmpfs 28M 280K 28M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 140M 0 140M 0% /run/shm
server1:/distributed-replicated 15G 4.4G 9.5G 32% /mnt/distrib-repl
Как видим, у нас успешно смонтировался новый сетевой диск размером 15Гб(суммарный размер дисков всех серверов входящих в volume разделенный на число реплик). Теперь создадим десяток файлов.
root@client1:~# seq 1 10 | while read line; do echo "This is File${line}" > /mnt/distrib-repl/file${line};done
root@client1:~# ls /mnt/distrib-repl/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Смотрим как распределился контент по серверам.
root@server1:~# ls /mnt/dist-repl*
/mnt/dist-repl1:
file10 file3 file4 file7 file9
/mnt/dist-repl2:
file1 file2 file5 file6 file8
root@server2:~# ls /mnt/dist-repl*
/mnt/dist-repl3:
file10 file3 file4 file7 file9
/mnt/dist-repl4:
file1 file2 file5 file6 file8
Как видим, первый сервер имеет такой же контент как и второй разбросанный по папкам.
4. Заключение
В реальных условиях каждая папка должна быть отдельно смонтированным диском (не рутовой файловой системой). Теперь вы знакомы с каждым типом распределения контента, который используется в glusterFS.
GlusterFS хорошо себя показывает в локальных сетях при базовой настройке, если переходить к распределённых по странам датацентрах, то нужно проводить тюнинг настроек как на стороне сервера, так и при монтирование на клиенте, о чем пойдет речь в следующей статье.