Хранилище · 6 min read · Jan 12, 2026
Хранилище с высокой доступностью с GlusterFS 3.0.x на Debian Squeeze - Автоматическая репликация файлов между двумя серверами хранения
Этот учебник показывает, как настроить хранилище с высокой доступностью с двумя серверами хранения (Debian Squeeze), которые используют GlusterFS. Каждый сервер хранения будет зеркалом другого сервера хранения, и файлы будут автоматически реплицироваться между обоими серверами хранения. Клиентская система (также Debian Squeeze) сможет получить доступ к хранилищу так, как если бы это была локальная файловая система. GlusterFS - это кластерная файловая система, способная масштабироваться до нескольких пета-байт. Она агрегирует различные хранилища по Infiniband RDMA или TCP/IP в одну большую параллельную сетевую файловую систему. Хранилища могут быть сделаны из любого обычного оборудования, такого как серверы x86_64 с SATA-II RAID и Infiniband HBA.
Я не даю никаких гарантий, что это будет работать для вас!
1 Предварительная заметка
В этом учебнике я использую три системы, два сервера и клиента:
- server1.example.com: IP-адрес 192.168.0.100 (сервер)
- server2.example.com: IP-адрес 192.168.0.101 (сервер)
- client1.example.com: IP-адрес 192.168.0.102 (клиент)
Все три системы должны иметь возможность разрешать имена хостов других систем. Если это невозможно сделать через DNS, вам следует отредактировать файл /etc/hosts, чтобы он выглядел следующим образом на всех трех системах:
vi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 # Следующие строки желательны для хостов, поддерживающих IPv6 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
(Также возможно использовать IP-адреса вместо имен хостов в следующей настройке. Если вы предпочитаете использовать IP-адреса, вам не нужно беспокоиться о том, могут ли быть разрешены имена хостов или нет.)
2 Настройка серверов GlusterFS
server1.example.com/server2.example.com:
GlusterFS доступен как пакет для Debian Squeeze, поэтому мы можем установить его следующим образом:
apt-get install glusterfs-serverКоманда
glusterfs --versionдолжна теперь показать версию GlusterFS, которую вы только что установили (в данном случае 3.0.5):
root@server1:~# glusterfs --version
glusterfs 3.0.5 built on Jul 13 2010 16:44:21
Repository revision: v3.0.5
Copyright (c) 2006-2009 Gluster Inc.
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.
root@server1:~# Затем мы создаем несколько каталогов:
mkdir /data/
mkdir /data/export
mkdir /data/export-nsТеперь мы создаем файл конфигурации сервера GlusterFS /etc/glusterfs/glusterfsd.vol (сначала мы создаем резервную копию оригинального файла /etc/glusterfs/glusterfsd.vol), который определяет, какой каталог будет экспортирован (/data/export) и какой клиент может подключаться (192.168.0.102 = client1.example.com):
cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig
cat /dev/null > /etc/glusterfs/glusterfsd.vol
vi /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 option auth.addr.brick.allow 192.168.0.102 subvolumes brick end-volume |
Обратите внимание, что возможно использовать подстановочные знаки для IP-адресов (например, 192.168.*) и что вы можете указать несколько IP-адресов, разделенных запятой (например, 192.168.0.102,192.168.0.103).
После этого мы запускаем сервер GlusterFS:
/etc/init.d/glusterfs-server start3 Настройка клиента GlusterFS
client1.example.com:
На клиенте мы можем установить клиент GlusterFS следующим образом:
apt-get install glusterfs-clientЗатем мы создаем следующий каталог:
mkdir /mnt/glusterfsЗатем мы создаем файл /etc/glusterfs/glusterfs.vol (сначала мы создаем резервную копию оригинального файла /etc/glusterfs/glusterfs.vol):
cp /etc/glusterfs/glusterfs.vol /etc/glusterfs/glusterfs.vol_orig
cat /dev/null > /etc/glusterfs/glusterfs.vol
vi /etc/glusterfs/glusterfs.vol| volume remote1 type protocol/client option transport-type tcp option remote-host server1.example.com option remote-subvolume brick end-volume volume remote2 type protocol/client option transport-type tcp option remote-host 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 |
Убедитесь, что вы используете правильные имена хостов серверов или IP-адреса в строках option remote-host!
Вот и все! Теперь мы можем смонтировать файловую систему GlusterFS в /mnt/glusterfs с одной из следующих двух команд:
glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfsили
mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfsТеперь вы должны увидеть новую общую папку в выводах…
mountroot@client1:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/etc/glusterfs/glusterfs.vol on /mnt/glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
root@client1:~#… и…
df -hroot@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 778M 27G 3% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 100K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/etc/glusterfs/glusterfs.vol
18G 848M 16G 5% /mnt/glusterfs
root@client1:~#( server1.example.com и server2.example.com каждый имеют 18 ГБ пространства для файловой системы GlusterFS, но поскольку данные зеркалируются, клиент не видит 36 ГБ (2 x 18 ГБ), а только 18 ГБ.)
Вместо того чтобы монтировать общую папку GlusterFS вручную на клиенте, вы можете изменить /etc/fstab, чтобы общая папка монтировалась автоматически при загрузке клиента.
Откройте /etc/fstab и добавьте следующую строку:
vi /etc/fstab| [...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
Чтобы проверить, работает ли ваш измененный /etc/fstab, перезагрузите клиент:
rebootПосле перезагрузки вы должны найти общую папку в выводах…
df -h… и…
mountЕсли изменение /etc/fstab не помогло, отмените изменения в /etc/fstab и добавьте эту строку в /etc/rc.local вместо этого (перед строкой exit 0):
vi /etc/rc.local| [...] /bin/mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs [...] |
Это гарантирует, что общая папка будет смонтирована после того, как сеть будет запущена.
4 Тестирование
Теперь давайте создадим несколько тестовых файлов на общей папке GlusterFS:
client1.example.com:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2Теперь давайте проверим каталог /data/export на server1.example.com и server2.example.com. Файлы test1 и test2 должны присутствовать на каждом узле:
server1.example.com/server2.example.com:
ls -l /data/exportroot@server1:~# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2
root@server1:~#Теперь мы выключаем server1.example.com и добавляем/удаляем некоторые файлы на общей папке GlusterFS на client1.example.com.
server1.example.com:
shutdown -h nowclient1.example.com:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2Изменения должны быть видны в каталоге /data/export на server2.example.com:
server2.example.com:
ls -l /data/exportroot@server2:~# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4
root@server2:~#Давайте снова загрузим server1.example.com и посмотрим на каталог /data/export:
server1.example.com:
ls -l /data/exportroot@server1:~# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2
root@server1:~#Как вы видите, server1.example.com не заметил изменений, которые произошли, пока он был выключен. Это легко исправить, все, что нам нужно сделать, это вызвать команду чтения на общей папке GlusterFS на client1.example.com, например:
client1.example.com:
ls -l /mnt/glusterfs/root@client1:~# ls -l /mnt/glusterfs/
total 8
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4
root@client1:~#Теперь взгляните на каталог /data/export на server1.example.com снова, и вы должны увидеть, что изменения были реплицированы на этот узел:
server1.example.com:
ls -l /data/exportroot@server1:~# ls -l /data/export
total 8
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4
root@server1:~#5 Ссылки
- GlusterFS: http://www.gluster.org/
- Debian: http://www.debian.org/
Get new posts in your inbox
No spam. Unsubscribe anytime.