Хранилище · 6 min read · Jan 10, 2026
Высокодоступное хранилище с GlusterFS 3.2.x на Debian Wheezy - Автоматическая репликация файлов (зеркало) между двумя серверами хранения
Этот учебник показывает, как настроить высокодоступное хранилище с двумя серверами хранения (Debian Wheezy), использующими GlusterFS. Каждый сервер хранения будет зеркалом другого сервера хранения, и файлы будут автоматически реплицироваться между обоими серверами хранения. Клиентская система (также Debian Wheezy) сможет получить доступ к хранилищу так, как если бы это была локальная файловая система. 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 Wheezy, поэтому мы можем установить его следующим образом:
apt-get install glusterfs-serverКоманда
glusterfsd --versionдолжна теперь показать версию GlusterFS, которую вы только что установили (в данном случае 3.2.7):
root@server1:~# glusterfsd --version
glusterfs 3.2.7 built on Nov 12 2012 19:30:08
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 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:~# Если вы используете брандмауэр, убедитесь, что TCP порты 111, 24007, 24008, 24009-(24009 + количество кирпичей во всех томах) открыты на server1.example.com и server2.example.com.
Далее мы должны добавить server2.example.com в доверенный пул хранения (обратите внимание, что я выполняю все команды конфигурации GlusterFS с server1.example.com, но вы также можете выполнять их с server2.example.com, потому что конфигурация реплицируется между узлами GlusterFS - просто убедитесь, что вы используете правильные имена хостов или IP-адреса):
server1.example.com:
На server1.example.com выполните
gluster peer probe server2.example.comroot@server1:~# gluster peer probe server2.example.com
Probe successful
root@server1:~#Статус доверенного пула хранения теперь должен быть похож на это:
gluster peer statusroot@server1:~# gluster peer status
Number of Peers: 1Hostname: server2.example.com
Uuid: d19cb707-7b23-4d11-8e9c-183cd0a18d96
State: Peer in Cluster (Connected)
root@server1:~#Далее мы создаем общий ресурс с именем testvol с двумя репликами (обратите внимание, что количество реплик равно количеству серверов в данном случае, потому что мы хотим настроить зеркалирование) на server1.example.com и server2.example.com в каталоге /data (он будет создан, если не существует):
gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/dataroot@server1:~# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
Creation of volume testvol has been successful. Please start the volume to access data.
root@server1:~#Запустите том:
gluster volume start testvolВозможно, что вышеуказанная команда сообщит вам, что действие не было успешным:
root@server1:~# gluster volume start testvol
Starting volume testvol has been unsuccessful
root@server1:~#В этом случае вам следует проверить вывод…
server1.example.com/server2.example.com:
netstat -tap | grep glusterfsdна обоих серверах.
Если вы получите вывод, похожий на этот…
root@server1:~# netstat -tap | grep glusterfsd
tcp 0 0 *:24009 *:* LISTEN 1548/glusterfsd
tcp 0 0 localhost.localdom:1019 localhost.localdo:24007 ESTABLISHED 1548/glusterfsd
root@server1:~#… все в порядке, но если вы не получите никакого вывода…
root@server2:~# netstat -tap | grep glusterfsd
root@server2:~#… перезапустите демон GlusterFS на соответствующем сервере (server2.example.com в данном случае):
server2.example.com:
/etc/init.d/glusterfs-server restartЗатем проверьте вывод…
netstat -tap | grep glusterfsd… снова на этом сервере - он теперь должен выглядеть так:
root@server2:~# netstat -tap | grep glusterfsd
tcp 0 0 *:24010 *:* LISTEN 1458/glusterfsd
tcp 0 0 localhost.localdom:1021 localhost.localdo:24007 ESTABLISHED 1458/glusterfsd
root@server2:~#Теперь вернемся к server1.example.com:
server1.example.com:
Вы можете проверить статус тома с помощью команды
gluster volume inforoot@server1:~# gluster volume infoVolume Name: testvol
Type: Replicate
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
root@server1:~#По умолчанию все клиенты могут подключаться к тому. Если вы хотите предоставить доступ только client1.example.com (= 192.168.0.102), выполните:
gluster volume set testvol auth.allow 192.168.0.102Обратите внимание, что возможно использовать подстановочные знаки для IP-адресов (например, 192.168.*) и что вы можете указать несколько IP-адресов, разделенных запятой (например, 192.168.0.102,192.168.0.103).
Информация о томе теперь должна показывать обновленный статус:
gluster volume inforoot@server1:~# gluster volume infoVolume Name: testvol
Type: Replicate
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Options Reconfigured:
auth.allow: 192.168.0.102
root@server1:~#3 Настройка клиента GlusterFS
client1.example.com:
На клиенте мы можем установить клиент GlusterFS следующим образом:
apt-get install glusterfs-clientЗатем создаем следующий каталог:
mkdir /mnt/glusterfsВот и все! Теперь мы можем смонтировать файловую систему GlusterFS в /mnt/glusterfs с помощью следующей команды:
mount.glusterfs server1.example.com:/testvol /mnt/glusterfs(Вместо server1.example.com вы также можете использовать server2.example.com в вышеуказанной команде!)
Теперь вы должны увидеть новую общую папку в выводах…
mountroot@client1:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
odev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=126813,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=102704k,mode=755)
/dev/mapper/server1-root on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=205400k)
/dev/sda1 on /boot type ext2 (rw,relatime,errors=continue)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
server1.example.com:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
root@client1:~#… и…
df -hroot@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 29G 1.2G 26G 5% /
udev 10M 0 10M 0% /dev
tmpfs 101M 240K 101M 1% /run
/dev/mapper/server1-root 29G 1.2G 26G 5% /
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 201M 0 201M 0% /run/shm
/dev/sda1 228M 18M 199M 9% /boot
server1.example.com:/testvol 29G 1.2G 26G 5% /mnt/glusterfs
root@client1:~#Вместо того чтобы монтировать общую папку GlusterFS вручную на клиенте, вы можете изменить /etc/fstab, чтобы общая папка монтировалась автоматически при загрузке клиента.
Откройте /etc/fstab и добавьте следующую строку:
vi /etc/fstab| [...] server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
(Снова, вместо server1.example.com вы также можете использовать server2.example.com!)
Чтобы проверить, работает ли ваш измененный /etc/fstab, перезагрузите клиент:
rebootПосле перезагрузки вы должны найти общую папку в выводах…
df -h… и…
mount4 Тестирование
Теперь давайте создадим несколько тестовых файлов на общей папке GlusterFS:
client1.example.com:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2Теперь давайте проверим каталог /data на server1.example.com и server2.example.com. Файлы test1 и test2 должны присутствовать на каждом узле:
server1.example.com/server2.example.com:
ls -l /dataroot@server1:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1
-rw-r--r-- 1 root root 0 Sep 30 17:53 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 на server2.example.com:
server2.example.com:
ls -l /dataroot@server2:~# ls -l /data
total 8
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4
root@server2:~#Давайте снова загрузим server1.example.com и посмотрим на каталог /data:
server1.example.com:
ls -l /dataroot@server1:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1
-rw-r--r-- 1 root root 0 Sep 30 17:53 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 Sep 30 17:53 test1
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4
root@client1:~#Теперь посмотрите на каталог /data на server1.example.com снова, и вы должны увидеть, что изменения были реплицированы на этот узел:
server1.example.com:
ls -l /dataroot@server1:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4
root@server1:~#5 Ссылки
- GlusterFS: http://www.gluster.org/
- Документация GlusterFS 3.2: http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
- Debian: http://www.debian.org/
Get new posts in your inbox
No spam. Unsubscribe anytime.