В этом руководстве мы рассмотрим настройку распределенной файловой системы GlusterFS на кластере, состоящем из трех узлов. Кластерные файловые системы часто используются в отказоустойчивых системах для обеспечения общего хранилища файлов.
Мы не рекомендуем использовать кластерные системы в задачах, где предполагается интенсивная запись данных, требующая высоких показателей IOPS и прогнозируемую задержку IO. Однако, для задач, в которых операции чтения значительно преобладают над операциями записи и нет требований к ультранизкой задержке IO, кластерные файловые системы вполне могут использоваться.
Настройка разрешения имен для приватной сети
В рамках настройки будем полагать, что все узлы соединены доверенной приватной сетью, в которой они доступны по доменными именам:
- server1.private 10.0.0.1/24
- server2.private 10.0.0.2/24
- server3.private 10.0.0.3/24
Убедитесь, что серверы находятся в разных доменах отказа, чтобы не столкнуться с ситуацией, когда авария затронет сразу две или больше машин.
В ходе настройки будем предполагать, что используются серверы под управлением Debian 9, Ubuntu 16.04 или 18.04 или CentOS7.
Сначала на каждом сервере сформируем файл /etc/hosts, чтобы серверы «видели» друг друга по доменным именам:
cat | sudo tee -a /etc/hosts >/dev/null 10.0.0.1 server1.private 10.0.0.2 server2.private 10.0.0.3 server3.private Ctrl^D
После добавления этих строк убедитесь, что все серверы «видят» друг друга по доменным именам.
Файрвол, SELinux, AppArmor
Мы предполагаем, что для приватной сети весь трафик разрешен и не блокируется. AppArmor (Ubuntu, Debian), SELinux не накладывают ограничений или полностью отключены.
Установка NTPD
В кластерных системах очень важно, чтобы все серверы имели одинаковое время. Даже небольшой лаг времени может привести к проблемам. Для решения этой проблемы необходимо установить сервер NTPD на каждом из узлов.
Ubuntu, Debian Linux:
sudo apt-get update && sudo apt install -y openntpd
CentOS 7:
sudo yum install -y ntp sudo systemctl start ntpd sudo systemctl enable ntpd
Выбор фактора репликации
Мы будем выполнять установку GlusterFS на 3 узла и использовать фактор репликации равный трем. Это позволяет потерять любой из узлов и при этом не столкнуться с ситуацией «split-brain», которая характерна для хранения данных с фактором репликации равным 2, когда каждая копия может считать себя правильной и продолжать функционировать, накапливая рассогласования.
Задание пространства для файловой системы
В реальной настройке для хранения данных GlusterFS выделяют отдельные дисковые устройства, на которых создается файловая система и отдается целиком под управление GlusterFS. В нашем варианте мы будем считать, что файловая система доступна по пути /opt/gluster, вы можете смонтировать к этому каталогу свое устройство с файловой системой или использовать пространство корневой системы, как будем делать мы.
На каждом узле создадим каталог /opt/gluster-volume:
sudo mkdir /opt/gluster-volume
При выделении отдельного устройства для тома GlusterFS рекомендуется создать на нем файловую систему XFS
Установка и настройка GlusterFS
На каждом узле выполним установку GlusterFS и активируем сервер. На случай, если установочная информация устареет, вы можете обратиться к разделу оригинальной документации GlusterFS.
Debian Linux:
sudo apt install -y dirmngr wget -O - http://download.gluster.org/pub/gluster/glusterfs/LATEST/rsa.pub | sudo apt-key add - wget -O - https://download.gluster.org/pub/gluster/glusterfs/3.12/rsa.pub | sudo apt-key add - DEBID=$(grep 'VERSION_ID=' /etc/os-release | cut -d '=' -f 2 | tr -d '"') DEBVER=$(grep 'VERSION=' /etc/os-release | grep -Eo '[a-z]+') DEBARCH=$(dpkg --print-architecture) echo deb https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/${DEBID}/${DEBARCH}/apt ${DEBVER} main | sudo tee /etc/apt/sources.list.d/gluster.list sudo apt-get update sudo apt -y --allow-unauthenticated install glusterfs-server glusterfs-common glusterfs-client sudo systemctl enable glusterd
Ubuntu Linux 16.04, 18.04:
sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:gluster/glusterfs-6 sudo apt-get update sudo apt-get install -y glusterfs-server sudo systemctl enable glusterd
CentOS 7:
sudo yum install -y centos-release-gluster6 sudo yum install -y glusterfs-server sudo systemctl enable glusterd sudo systemctl start glusterd
Добавление узлов в пул
Для добавления узлов в пул узлов необходимо на любом из узлов выполнить команду:
sudo gluster peer probe server1.private sudo gluster peer probe server2.private sudo gluster peer probe server3.private
Посмотреть добавленные в пул узлы можно командой:
sudo gluster pool list UUID Hostname State d50ed443-3e63-4eb1-98e1-25b55899b00e server2.private Connected 88477f16-75f0-4946-82bd-4725e4bcb292 server3.private Connected ae3132f4-a8cf-433b-8746-e358e8f4d9b1 localhost Connected
Создание тома хранения данных
Теперь, когда все серверы находятся в пуле, можно создать том для хранения данных. Поскольку в нашем примере том создается в корневой файловой системе, нам придется использовать аргумент force.
sudo gluster volume create gfs replica 3 server{1,2,3}.private:/opt/gluster-volume force volume create: gfs: success: please start the volume to access data
Убедиться в том, что том создан можно с помощью команды:
sudo gluster volume list gfs
Для активации тома его необходимо запустить:
sudo gluster volume start gfs volume start: gfs: success
Теперь можно запросить состояние тома gfs:
sudo gluster volume status gfs Status of volume: gfs Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick server1.private:/opt/gluster-volume 49152 0 Y 6741 Brick server2.private:/opt/gluster-volume 49152 0 Y 6558 Brick server3.private:/opt/gluster-volume 49152 0 Y 7504 Self-heal Daemon on localhost N/A N/A Y 6764 Self-heal Daemon on server2.private N/A N/A Y 6581 Self-heal Daemon on server3.private N/A N/A Y 7527 Task Status of Volume gfs ------------------------------------------------------------------------------ There are no active volume tasks
Информация о томе:
sudo gluster volume info gfs Volume Name: gfs Type: Replicate Volume ID: d1408265-bc67-4501-b255-efd165fba094 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 3 = 3 Transport-type: tcp Bricks: Brick1: server1.private:/opt/gluster-volume Brick2: server2.private:/opt/gluster-volume Brick3: server3.private:/opt/gluster-volume Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
Настройка доступа к тому
Для настройки безопасности выполните следующие команды, которые позволяют получать доступ к тому только этим трем серверам, на которых установлен GlusterFS, если у вас есть другие клиенты, их необходим тоже добавить:
sudo gluster volume set gfs auth.allow 10.0.0.1,10.0.0.2,10.0.0.3
Монтирование тома
Проверим монтирование тома в ручном режиме, выполнив на каждом узле:
sudo mkdir /mnt/gluster sudo mount.glusterfs localhost:/gfs /mnt/gluster
Проверим, что в файловую систему можно добавлять файлы и они становятся доступны на других узлах. Запустите эту команду на любом из узлов:
sudo dd if=/dev/zero of=/mnt/gluster/file bs=1M count=1 1+0 записей получено 1+0 записей отправлено 1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,00641666 s, 163 MB/s
Проверьте на двух других узлах, что файл доступен:
ls -la /mnt/gluster итого 1032 drwxr-xr-x 3 root root 4096 апр 18 10:38 . drwxr-xr-x 3 root root 4096 апр 18 10:37 .. -rw-r--r-- 1 root root 1048576 апр 18 10:38 file
Добавьте на каждом хосте запись в /etc/fstab для автоматического монтирования тома при запуске системы:
echo 'localhost:/gfs /mnt/gluster glusterfs defaults,_netdev,backupvolfile-server=localhost 0 0' | sudo tee -a /etc/fstab
Перезапустите каждый сервер поочередно для того, чтобы убедиться, что после старта сервер автоматически монтирует каталог /mnt/gluster:
df -h /mnt/gluster Файл.система Размер Использовано Дост Использовано% Cмонтировано в localhost:/gfs 20G 2,7G 16G 15% /mnt/gluster
Почему не Ceph
По сравнению с GlusterFS Ceph более сложна в настройке и более тяжеловесна (MON,OSD, MDS). Для распределенных файловых систем начального уровня, которые развертываются на малом количестве узлов GlusterFS выглядит более предпочтительной и легковесной.