GlusterFS – это масштабированная сетевая файловая система хранения данных.
Это приложение, включает облачные вычисления, потоковые мультимедийные службы и сети доставки контента.
GlusterFS был первоначально разработан компанией Gluster, Inc., а затем Red Hat, Inc., в результате Red Hat, приобрел Gluster в 2011 году.
Здесь мы собираемся настроить том GlusterFS с двумя репликами.
Убедитесь, что у вас две 64-битные системы (виртуальные или физические) с 1 ГБ памяти и один запасной жесткий диск в каждой системе.
- gluster1.hackthesec.local|192.168.12.16|Ubuntu 16.04|1GG|/dev/sdb (5GB)–Node 1
- gluster2.hackthesec.local|192.168.12.17|Debian 8|1GB|/dev/sdb (5GB)–Node 2
- client.hackthesec.local|192.168.12.8|CentOS 7 / Debian|N/A|N/A|Клиентская машина
Настройка DNS:
Компоненты GlusterFS используют DNS для разрешения имен, поэтому настройте DNS или настройте записи в /etc/hosts.
Если у вас нет DNS в вашей среде, измените файл /etc/hosts и обновите его соответствующим образом.
sudo vi /etc/hosts 192.168.12.16 gluster1.hackthesec.local gluster1 192.168.12.17 gluster2.hackthesec.local gluster2 192.168.12.20 client.hackthesec.local client
Добавьте репозиторий GlusterFS:
Прежде чем приступить к установке, нам нужно настроить репозиторий GlusterFS на обоих узлах хранения.
Следуйте инструкциям, чтобы добавить репозиторий в вашу систему
Debian:
Установите пакет поддержки для транзакций https.
sudo apt-get install -y lsb-release sudo apt-get install -y apt-transport-https
Добавить открытый ключ для репозитория GlusterFS.
wget -O - http://download.gluster.org/pub/gluster/glusterfs/LATEST/rsa.pub | sudo apt-key add - echo deb https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/$(lsb_release -sc)/apt $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/gluster.list
Ubuntu 16.04 / 14.04:
sudo apt-get install -y software-properties-common sudo add-apt-repository ppa:gluster/glusterfs-3.8
Установка GlusterFS:
После того, как вы добавили репозиторий в свои системы, мы готовы приступить к установке GlusterFS.
Обновите кеш репозитория.
sudo apt-get update
Установите пакет GlusterFS, используя следующую команду:
sudo apt-get install -y glusterfs-server
Запустите службу glusterfs-сервера на всех узлах.
sudo service glusterfs-server start
Убедитесь, что служба glusterfs работает нормально.
$ sudo service glusterfs-server status ● glusterfs-server.service - LSB: GlusterFS server Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled) Active: active (running) since Sat 2016-09-24 21:47:20 IST; 1min 6s ago Docs: man:systemd-sysv-generator(8) Process: 1570 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS) Process: 1664 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=0/SUCCESS) Tasks: 7 (limit: 512) Memory: 25.5M CPU: 3.552s CGroup: /system.slice/glusterfs-server.service └─1673 /usr/sbin/glusterd -p /var/run/glusterd.pid Sep 24 21:47:16 gluster1.hackthesec.local systemd[1]: Starting LSB: GlusterFS server... Sep 24 21:47:16 gluster1.hackthesec.local glusterfs-server[1664]: * Starting glusterd service glusterd Sep 24 21:47:20 gluster1.hackthesec.local glusterfs-server[1664]: ...done. Sep 24 21:47:20 gluster1.hackthesec.local systemd[1]: Started LSB: GlusterFS server.
Настройка фаерволла
Вам нужно либо отключить брандмауэр, либо настроить брандмауэр, чтобы разрешить все подключения внутри кластера.
sudo iptables -I INPUT -p all -s <ip-address> -j ACCEPT
Добавить хранилище:
Предполагая, что у вас есть один запасной жесткий диск на вашем компьютере, /dev/sdb – тот, который я буду использовать
Создайте отдельный раздел на резервном жестком диске, как показано ниже:
sudo fdisk /dev/sdb
sudo mkfs.ext4 /dev/sdb1 sudo mkdir -p /data/gluster sudo mount /dev/sdb1 /data/gluster echo "/dev/sdb1 /data/gluster ext4 defaults 0 0" | sudo tee --append /etc/fstab
Настройте GlusterFS на Ubuntu 16.04:
Перед созданием тома нам нужно создать доверенный пул хранения, добавив gluster2.hackthesec.local.
Вы можете запускать команды конфигурации GlusterFS на любом одном сервере в кластере, выполнив ту же самую команду на всех других серверах.
Здесь я буду запускать все команды GlusterFS в gluster1.hackthesec.local
hackthesec@gluster1:~$ sudo gluster peer probe gluster2.hackthesec.local peer probe: success. hackthesec@gluster1:~$ sudo gluster peer status Number of Peers: 1 Hostname: gluster2.hackthesec.local Uuid: 51470928-dfa8-42e1-a221-d7bbcb8c13bd State: Peer in Cluster (Connected) hackthesec@gluster1:~$ sudo gluster pool list UUID Hostname State 51470928-dfa8-42e1-a221-d7bbcb8c13bd gluster2.hackthesec.local Connected dc7c1639-d21c-4adf-b28f-5150229e6980 localhost Connected
Настройка GlusterFS раздела:
Создайте каталог под названием «gvol0» в смонтированной файловой системе на обоих узлах.
sudo mkdir -p /data/gluster/gvol0
Поскольку мы собираемся использовать реплицированный том, создайте том с именем «gvol0» с двумя репликами.
hackthesec@gluster1:~$ sudo gluster volume create gvol0 replica 2 gluster1.hackthesec.local:/data/gluster/gvol0 gluster2.hackthesec.local:/data/gluster/gvol0 volume create: gvol0: success: please start the volume to access data
Запустите том:
hackthesec@gluster1:~$ sudo gluster volume start gvol0 volume start: gvol0: success
Проверьте состояние созданного тома.
hackthesec@gluster1:~$ sudo gluster volume info gvol0 Volume Name: gvol0 Type: Replicate Volume ID: ca102e4b-6cd1-4d9d-9c5a-03b882c76da0 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster1.hackthesec.local:/data/gluster/gvol0 Brick2: gluster2.hackthesec.local:/data/gluster/gvol0 Options Reconfigured: transport.address-family: inet performance.readdir-ahead: on nfs.disable: on
Настройка клиента GlusterFS:
Установите пакет glusterfs-client для поддержки установки файловых систем GlusterFS.
Запустите все команды как пользователь root.
$ su - ### CentOS / RHEL ### yum install -y glusterfs-client ### Ubuntu / Debian ### apt-get install -y glusterfs-client
Создайте каталог для монтирования файловой системы GlusterFS.
mkdir -p /mnt/glusterfs
Теперь подключите файловую систему GlusterFS к /mnt/glusterfs, используя следующую команду.
mount -t glusterfs gluster1.hackthesec.local:/gvol0 /mnt/glusterfs
Вы также можете использовать gluster2.hackthesec.local вместо gluster1.hackthesec.com в приведенной выше команде.
Проверьте смонтированную файловую систему GlusterFS.
[root@client ~]# df -hP /mnt/glusterfs Filesystem Size Used Avail Use% Mounted on gluster1.hackthesec.local:/gvol0 4.8G 11M 4.6G 1% /mnt/glusterfs
Вы также можете использовать команду ниже для проверки файловой системы GlusterFS.
[root@client ~]# cat /proc/mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=490448k,nr_inodes=122612,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 /dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 /dev/mapper/centos-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 tmpfs /run/user/0 tmpfs rw,seclabel,nosuid,nodev,relatime,size=100136k,mode=700 0 0 gluster1.hackthesec.local:/gvol0 /mnt/glusterfs fuse.glusterfs rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
Добавьте запись в /etc/fstab для автоматического монтирования во время загрузки системы.
gluster1.hackthesec.local:/gvol0 /mnt/glusterfs glusterfs defaults,_netdev 0 0
Тестирование репликации GlusterFS и высокой доступности:
Сторона сервера GlusterFS:
Чтобы проверить репликацию, смонтируйте созданный том GlusterFS на том же узле хранения.
hackthesec@gluster1:~$ sudo mount -t glusterfs gluster1.hackthesec.local:/gvol0 /mnt hackthesec@gluster2:~$ sudo mount -t glusterfs gluster2.hackthesec.local:/gvol0 /mnt
Данные внутри каталога / mnt обоих узлов всегда будут одинаковыми (репликация).
Сторона клиента GlusterFS:
Давайте создадим несколько файлов на смонтированной файловой системе на client.hackthesec.local.
touch /mnt/glusterfs/file1 touch /mnt/glusterfs/file2 [root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2
Проверьте оба узла GlusterFS, имеют ли они одни и те же данные внутри / mnt.
hackthesec@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:52 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 hackthesec@gluster2:~$ ls -al /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 06:30 . drwxr-xr-x 23 root root 4096 Sep 24 08:39 .. -rw-r--r-- 1 root root 0 Sep 26 2016 file1 -rw-r--r-- 1 root root 0 Sep 26 2016 file2
Как вы знаете, мы установили том GlusterFS из gluster1.hackthesec.local на client.hackthesec.local, теперь настало время проверить высокую доступность тома, отключив узел.
hackthesec@gluster1:~$ sudo poweroff
Теперь проверьте наличие файлов, и вы увидите файлы, которые мы создали недавно, даже несмотря на то, что узел не работает.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2
Создайте еще несколько файлов в файловой системе GlusterFS, чтобы проверить репликацию.
touch /mnt/glusterfs/file3 touch /mnt/glusterfs/file4
Проверьте количество файлов.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2 -rw-r--r--. 1 root root 0 Sep 26 11:26 file3 -rw-r--r--. 1 root root 0 Sep 26 11:26 file4
Поскольку gluster1 не работает, все ваши данные теперь прописаны на gluster2.hackthesec.local. Теперь включите узел1 (gluster1.hackthesec.local).
Проверьте / mnt gluster1.hackthesec.local; вы должны увидеть все четыре файла в каталоге, это подтверждает, что репликация работает должным образом.
hackthesec@gluster1:~$ sudo mount -t glusterfs gluster1.hackthesec.local:/gvol0 /mnt [sudo] password for hackthesec: hackthesec@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:59 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 -rw-r--r-- 1 root root 0 Sep 26 20:56 file3 -rw-r--r-- 1 root root 0 Sep 26 20:56 file4