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

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

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

Copy
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

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

Copy
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

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

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

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

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

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

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

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

Copy
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 к виду:

Copy
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

Метаданные

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

Copy
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

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

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

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

Copy
100.111.250.0/24 / rw,alldirs,maproot=0

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

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

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

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

Metalogger

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

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

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

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

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

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

Copy
[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

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

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

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

Copy
systemctl start lizardfs-metalogger

Master MFS

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

Copy
[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:

Copy
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:

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

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

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

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

Copy
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
Copy
scp -rp cmpt-c01z03-c1001:/etc/lizardfs/* /etc/lizardfs chown -R lizardfs: /etc/lizardfs

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

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

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

Copy
systemctl start lizardfs-master\ systemctl enable lizardfs-master

Chunk

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

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

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

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

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

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

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

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

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

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

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

Copy
[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

Copy
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

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

Copy
systemctl start lizardfs-chunkserver systemctl enable lizardfs-chunkserver

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

Copy
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:

Copy
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 серверов:

Copy
lizardfs-admin list-chunkservers mfsmaster 9421

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

Copy
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:

Copy
lizardfs-admin list-goals mfsmaster 9421

Работа в СХД

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

Copy
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

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

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

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

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

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

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