LizardFS установка и использование

Установка из исходного кода

Устанавливаем зависимости:

apt install -y linux-headers-5.10.0-32-amd64 gcc autoconf flex bison automake binutils pkgconf make cmake
apt install -y asciidoc libspdlog1 libspdlog-dev  libjudy-dev libpam0g-dev libdb-dev libisal-dev libcrcutil-dev  libsystemd-dev libthrift-dev libfuse3-dev

Далее, собираем по официальной инструкции

git clone https://github.com/lizardfs/lizardfs.git /opt/lizardfs-src
cd /opt/lizardfs-src
mkdir buildl cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/lizardfs

Добавляем пользователя:

groupadd -g 1007 lizardfs
useradd -u 1007 -g 1007 -s /bin/bash  -d /var/lib/lizardfs/ lizardfs

Добавляем в ~/.bashrc:

PATH=$PATH:/usr/sbin:/sbin:/opt/lizardfs/bin:/opt/lizardfs/sbin
source /etc/bash_completion.d/lizardfs

Установка из пакетов

Из пакетов не поставить!

В официальной документации предлагают ставить из packages.lizardfs.com, но этот сайт недоступен, в т.ч. и через иностранные прокси. На waybackmachine нашел такую последовательность установки - но это тоже не работает:

apt-get install wget apt-transport-https
echo 'deb [trusted=yes] https://dev.lizardfs.com/packages/ bullseye/' | tee /etc/apt/sources.list.d/lizardfs.list
echo 'deb https://dev.lizardfs.com/packages/ bullseye/' | tee /etc/apt/sources.list.d/lizardfs.list
apt-get update
apt-get install lizardfs-master lizardfs-chunkserver lizardfs-client

Распределение ролей

Сначала несколько основных правил:

  • Главный сервер (master) лучше всего работает на выделенном компьютере, желательно с SSD-диском.
  • Сервер Chunk лучше всего работает с хотя бы одним выделенным диском.
  • Не ставьте металоггер (metalogger) на ту же машину, что и главный сервер, это не сделает ваши метаданные безопаснее. Металоггеры необязательны, тем не менее, можно установить металоггер вместе с chunk-сервером.
  • Повысьте безопасность своих данных, используя теневые главные серверы (shadowmaster)

Таким образом, имея в наличии 3 сервера распределяем так:

Сервер Роли IP адрес
cmpt-c01z03-c1001 mfsmaster chunkserver1 100.111.254.121
cmpt-c01z03-c1002 shadowmaster chunkserver2 100.111.254.122
cmpt-c01z03-c1003 metalogger cgiserver chunkserver3 100.111.254.123

Подстройка сети

На всех 4-х серверах приводим файл /etc/hosts к виду:

127.0.0.1       localhost

100.111.254.121 mfsmaster chunkserver1
100.111.254.122 shadowmasterchunkserver2
100.111.254.123 metalogger cgiserver chunkserver3

100.111.250.121 cmpt-c01z03-c1001
100.111.250.122 cmpt-c01z03-c1002
100.111.250.123 cmpt-c01z03-c1003

Метаданные

Не всех серверах:

mkdir /var/lib/lizardfs /var/log/lizardfs /etc/lizardfs
cp /opt/lizardfs/src/data/metadata.mfs /var/lib/lizardfs/
ln -s /opt/lizardfs/etc/bash_completion.d/lizardfs /etc/bash_completion.d/lizardfs

Конфигурационные данные:

cp /opt/lizardfs/build/src/data/mfsmaster.cfg /etc/lizardfs/

Задаем список клиентских сетей, из которых будет доступна наша СХД в файле /etc/lizardfs/mfsexports.cfg:

100.111.250.0/24 / rw,alldirs,maproot=0

Для использования lizardfs-master в качестве сервиса добавляем в /etc/default/lizardfs-master:

echo "LIZARDFSMASTER_ENABLE=true" >> /etc/default/lizardfs-master

Поправляем права:

chown -R lizardfs: /etc/lizardfs /var/lib/lizardfs /var/log/lizardfs /opt/lizardfs

Metalogger

На сервере с ролью `metalogger: cmpt-c01z03-c1003

Создаем конфигурационный файл:

scp -rp cmpt-c01z03-c1001:/opt/lizardfs-src/build/src/data/mfsmetalogger.cfg /etc/lizardfs/

Добавляем параметры:

WORKING_USER = lizardfs
WORKING_GROUP = lizardfs
DATA_PATH = /var/lib/lizardfs
MASTER_HOST = mfsmaster

Создаем юнит-файл /etc/systemd/system/lizardfs-metalogger.service:

[Unit]
Description=LizardFS metalogger server daemon
Documentation=man:mfsmetalogger
After=network.target

[Service]
User=lizardfs
Group=lizardfs
Type=forking
ExecStart=/opt/lizardfs/sbin/mfsmetalogger -c /etc/lizardfs/mfsmetalogger.cfg start
ExecStop=/opt/lizardfs/sbin/mfsmetalogger -c /etc/lizardfs/mfsmetalogger.cfg stop
ExecReload=/opt/lizardfs/sbin/mfsmetalogger -c /etc/lizardfs/mfsmetalogger.cfg reload
Restart=on-abort

[Install]
WantedBy=multi-user.target

Меняем права:

chown -R lizardfs: /etc/lizardfs /opt/lizardfs/ /var/log/lizardfs /var/lib/lizardfs

Запускаем сервис:

systemctl start lizardfs-metalogger

Master MFS

Создаем юнит-файл сервиса /etc/systemd/system/lizardfs-master.service

[Unit]
Description=LizardFS master server daemon
Documentation=man:mfsmaster
After=network.target

[Service]
Type=forking
TimeoutSec=0
User=lizardfs
Group=lizardfs
ExecStart=/opt/lizardfs/sbin/mfsmaster -c /etc/lizardfs/mfsmaster.cfg start
ExecStop=/opt/lizardfs/sbin/mfsmaster -c /etc/lizardfs/mfsmaster.cfg stop
ExecReload=/opt/lizardfs/mfsmaster -c /etc/lizardfs/mfsmaster.cfg reload
Restart=no

[Install]
WantedBy=multi-user.target
Настраиваем главный конфигурационный файл /etc/lizardfs/mfmaster.cfg:

PERSONALITY = master
WORKING_USER = lizardfs
WORKING_GROUP = lizardfs
EXPORTS_FILENAME = /etc/lizardfs/mfsexports.cfg
TOPOLOGY_FILENAME = /etc/lizardfs/mfstopology.cfg
CUSTOM_GOALS_FILENAME = /etc/lizardfs/mfsgoals.cfg
DATA_PATH = /var/lib/lizardfs
MATOML_LISTEN_HOST = 100.111.254.121
MATOCS_LISTEN_HOST = *
MATOCL_LISTEN_HOST = *
MATOTS_LISTEN_HOST = *
NO_ATIME = 1

Настраиваем конфигурацию экспорта /etc/lizardfs/mfsexports.cfg:

100.111.254.0/24 /srv rw,alldirs,maproot=0

Файлы mfsgoals.cfg и mfstopology.cfg просто забираем из каталога образцов /opt/lizardfs/share/doc/lizardfs-master/examples/:

cp /opt/lizardfs/share/doc/lizardfs-master/examples/{mfsgoals.cfg,mfstopology.cfg} /etc/lizardfs

Запускаем сервис:

systemctl start lizardfs-master
systemctl enable lizardfs-master

Shadow MFS

На сервере cmpt-c01z03-c1002 делаем все так-же, как и в Master MFS, но в файле mfsmaster.cfg :

  • параметр PERSONALITY = shadow и
  • добавляем параметр MASTER_HOST = mfsmaster
  • меняем IP-адрес на текущий MATOML_LISTEN_HOST = 100.111.254.122
scp -rp cmpt-c01z03-c1001:/etc/lizardfs/* /etc/lizardfs
chown -R lizardfs: /etc/lizardfs

Далее. правим mfsmaster.cfg и забираем настроенный юнит-файл сервиса:

scp -rp cmpt-c01z03-c1001:/etc/systemd/system/lizardfs-master.service /etc/systemd/system/

Запускаем сервис:

systemctl start lizardfs-master\
systemctl enable lizardfs-master

Chunk

Чтобы обеспечить правильную процедуру восстановления в случае поломки сервера фрагментов, всегда имейте на один сервер фрагментов больше, чем того требуют настроенный вами режим GOAL/XOR/EC.

Сервис chunk ставим на три сервера. Начинаем с cmpt-c01z03-c1002. На нем уже установлена роль shadow MFS.

Теперь вам нужно указать, где процесс chunkserver будет хранить фактические данные. Это делается в файле mfshdd.cfg.

cp /opt/lizardfs/share/doc/lizardfs-chunkserver/examples/mfshdd.cfg /etc/lizardfs
chown lizardfs: /etc/lizardfs/mfshdd.cfg

Заполняем все диски с помощью утилиты /usr/local/bin/osd-ctl:

osd-ctl wipe
osd-ctl xfs_prep
chown -R lizardfs: /srv/node
mount -a

Далее, необходимо указать каталоги с их полным путем, по одному на строку.

cat /etc/fstab | grep node | awk '{print $2}' >> /etc/lizardfs/mfshdd.cfg

Создаем юнит-файл сервиса:

scp -rp cmpt-c01z03-c1001:/opt/lizardfs-src/rpm/service-files/lizardfs-chunkserver.service /etc/systemd/system/

Содержимое /etc/systemd/system/lizardfs-chunkserver.service:

[Unit]
Description=LizardFS chunkserver daemon
Documentation=man:mfschunkserver
After=network.target

[Service]
Type=forking
User=lizardfs
Group=lizardfs
ExecStart=/opt/lizardfs/sbin/mfschunkserver -c /etc/lizardfs/mfschunkserver.cfg start
ExecStop=/opt/lizardfs/sbin/mfschunkserver -c /etc/lizardfs/mfschunkserver.cfg stop
ExecReload=/opt/lizardfs/mfschunkserver -c /etc/lizardfs/mfschunkserver.cfg reload
Restart=on-abort

[Install]
WantedBy=multi-user.target

Создаем конфигуратор сервиса /etc/lizardfs/mfschunkserver.cfg

LABEL = _
WORKING_USER = lizardfs
WORKING_GROUP = lizardfs
DATA_PATH = /var/lib/lizardfs
BIND_HOST = chunkserver1
MASTER_HOST = mfsmaster
MASTER_PORT = 9420
HDD_CONF_FILENAME = /etc/lizardfs/mfshdd.cfg
  • LABEL: метка сервера
  • BIND_HOST: chunkserver1

Запускаем сервис:

systemctl start lizardfs-chunkserver
systemctl enable lizardfs-chunkserver

Далее, подобным образом создаем и запускаем сервис chunk на остальных узлах:

scp -rp cmpt-c01z03-c1002:/etc/lizardfs/mfschunkserver.cfg /etc/lizardfs/
scp -rp cmpt-c01z03-c1002:/etc/lizardfs/mfshdd.cfg /etc/lizardfs/
chown -R lizardfs: /etc/lizardfs
scp -rp cmpt-c01z03-c1001:/opt/lizardfs-src/rpm/service-files/lizardfs-chunkserver.service /etc/systemd/system/
systemctl start lizardfs-chunkserver
systemctl status lizardfs-chunkserver
systemctl enable lizardfs-chunkserver

Далее, поправляем BIND_HOST в mfschunkserver.cfg. Например, для chunkserver2:

LABEL = _
WORKING_USER = lizardfs
WORKING_GROUP = lizardfs
DATA_PATH = /var/lib/lizardfs
BIND_HOST = chunkserver2
MASTER_HOST = mfsmaster
MASTER_PORT = 9420
HDD_CONF_FILENAME = /etc/lizardfs/mfshdd.cfg

Посмотреть список chunk серверов:

lizardfs-admin list-chunkservers mfsmaster 9421

Теперь мы должны здесь увидеть следующее:

Server 100.111.254.124:9422:
        version: 3.13.0
        label: _
        chunks: 0
        used space: 396GiB / 42TiB
        chunks marked for removal: 0
        used space marked for removal: 0B / 0B
        errors: 0
Server 100.111.254.123:9422:
        version: 3.13.0
        label: _
        chunks: 0
        used space: 396GiB / 42TiB
        chunks marked for removal: 0
        used space marked for removal: 0B / 0B
        errors: 0
Server 100.111.254.122:9422:
        version: 3.13.0
        label: _
        chunks: 0
        used space: 396GiB / 42TiB
        chunks marked for removal: 0
        used space marked for remov:1al: 0B / 0B
        errors: 0

Три chunk-сервера в строю - на них нет дополнительных меток.

Посмотреть политику хранения GOAL:

lizardfs-admin list-goals mfsmaster 9421

Работа в СХД

Клиент последней версии (3.13) находится в папке /opt/lizardfs/bin/lizardfs. Установку клиента версии 3.12 можно производить также из deb-пакета:

wget http://ftp.ru.debian.org/debian/pool/main/l/lizardfs/lizardfs-client_3.12.0+dfsg-3+b10_amd64.deb
apt install ./lizardfs-client_3.12.0+dfsg-3+b10_amd64.deb

Переходим на клиентский сервер (гипервизор) и подключаем СХД следующей командой:

mfsmount3 /var/lib/nova/instances -H mfsmaster

Появляется содержимое хранилища в смонтированном каталоге - куда мы может записывать информацию и, в том числе, размещать диски ВМ.

Для того, чтобы размещать диски ВМ, добавьте в nova.conf следующие строки:

[DEFAULT]
...
instances_path = /var/lib/nova/instances
...
[libvirt]
...
images_type = qcow2
...

Опубликовано: 05.11.2024