Содержание

GlusterFS

Распределённая отказоустойчивая файловая система. Нужно как минимум 3 ноды (5,7,9 и т. д.). Под ФС нужен отдельный диск (sdb)

https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/

gluster help # справка
gluster volume get volume1 all # вывести все настройки тома
ls /var/log/glusterfs # логи

Установка

apt update && apt install glusterfs-server # nfs-common samba
systemctl start glusterd && systemctl enable glusterd
# с первого сервера ввести в пул второй (или наоборот, неважно)
gluster peer probe srv-gluster2
# проверка статуса
gluster peer status
 
# Создать том. Ноды нужно как минимум 3 и размещать том не на системном диске (добавить force для создания на системном диске)
mkdir -p /glusterfs
# Если не указать параметр replica, то получится Distributed volume
gluster volume create volume1 replica 2 srv-gluster1:/glusterfs/vol1-brick1 srv-gluster2:/glusterfs/vol1-brick1 # force
gluster volume start volume1
# инфо
gluster volume list
gluster volume info
# На клиенте
apt install glusterfs-client # nfs-common
mkdir /mnt/volume1
# можно указывать любую ноду, например, srv-gluster2:volume1
mount -t glusterfs srv-gluster1:volume1

Квоты

Задаются для тома в целом (/) и на уровне отдельных папок.

gluster volume quota volume1 enable
gluster volume quota volume1 limit-usage / 20GB # hard limit, soft limit - 80% by default
gluster volume quota volume1 list # список квот

Расширение / сжатие тома

# Добавить кирпич на другой ноде
gluster volume add-brick volume1 srv-gluster2:/glusterfs/vol1-brick1
# Если том распределённый, то после расширения надо бы перераспределить данные
gluster volume rebalance volume1 start
# Статус прогресса балансировки
gluster volume rebalance volume1 start
 
# Убрать данные с кирпича
gluster volume remove-brick volume1 srv-gluster2:/glusterfs/vol1-brick1 start
# Удалить кирпич
gluster volume remove-brick volume1 srv-gluster2:/glusterfs/vol1-brick1 commit

Ограничение доступа

gluster volume get volume1 auth.allow # кому разрешено
gluster volume get volume1 auth.reject # кому запрещено
gluster volume set volume1 auth.restrict 192.168.1.10,172.16.20.5,10.2.4.*,comp3,comp5
gluster volume reset volume1 auth.reject # сбросить auth.reject в настройки по умолчанию

Удаление

Размонтировать на клиенте, потом на сервере

gluster volume stop volume1
gluster volume delete volume1
# Данные на /glusterfs/vol1-brick1 останутся

Доступ по SMB

Для отказоустойчивости SMB используется сервис CTDB (Cluster Trivial Database). Рекомендуемая настройка для прода:

Тестовый вариант

# Создать отдельный том для lock-файла
mkdir /gluster/ctdb # На каждой ноде
# Создать том
gluster volume create ctdb replica 3 gluster{1..3}:/gluster/ctdb # force (на одной ноде)
# Прописать имя тома в конфиг. файлах
sed -i '/META="all"/c META="ctdb"' /var/lib/glusterd/hooks/1/start/post/S29CTDBsetup.sh
sed -i '/META="all"/c META="ctdb"' /var/lib/glusterd/hooks/1/stop/pre/S29CTDB-teardown.sh
# Включить кластеризацию в конфиге самбы
sed -i '/\[global\]/a clustering=yes' /etc/samba/smb.conf # На каждой ноде
 
vi /etc/samba/smb.conf
[global]
clustering = yes
idmap backend = tdb2
kernel share modes = no
kernel oplocks = no
map archive = no
map hidden = no
map read only = no
map system = no
store dos attributes = yes
 
# Прописать ноды, участвующие в кластере (реальные IP)
printf "192.168.1.11\n192.168.1.12\n192.168.1.13\n" > /etc/ctdb/nodes # На каждой ноде
# Создать файл с публичным виртуальным адресом (для клиентского доступа) на каждой ноде. Можно прописать несколько адресов.
echo "192.168.1.20/24 eth0" > /etc/ctdb/public_addresses
# Запустить ctdb
systemctl start ctdb
 
# Инфо
ctdb status # состояние кластера
ctdb ip # виртуальный адрес
# For Samba-4.8.5-104 or later - To export gluster volume as SMB share via Samba,
# one of the following volume options, user.cifs or user.smb is required.
gluster volume set VOLNAME user.smb enable
# These commands will enable optimized options for Samba-CTDB setup
gluster volume set VOLNAME group samba
gluster volume set VOLNAME storage.batch-fsync-delay-usec 0
gluster volume set VOLNAME client.event-threads 4
gluster volume set VOLNAME server.event-threads 4
# Uncomment CTDB_SAMBA_SKIP_SHARE_CHECK=yes to disable checking of the shares by ctdb.
sed -i 's/# CTDB_SAMBA_SKIP/CTDB_SAMBA_SKIP/' /etc/ctdb/script.options

https://docs.gluster.org/en/latest/Administrator-Guide/Accessing-Gluster-from-Windows/
https://wiki.samba.org/index.php/CTDB_and_Clustered_Samba
https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.5/html/administration_guide/sect-smb