Поддержи проект

Скачать

Установка DRBD9 из исходников на Debian 11 Bullseye

DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) — это блочное устройство, предназначенное для построения отказоустойчивых кластерных систем на операционной системе Linux. DRBD занимается полным отражением (mirroring) по сети всех операций с блочным устройством. 

Решил разобрать как собрать из исходников пакет DRBD на Debian 11 Bullseye.

В рамках рассматриваемой статьи будет рассмотрено как собрать и установить последние версии на момент написания статьи пакетов DRBD 9.2.9 + DRBD-Utils 9.28.0, так же необходимо собрать и установить Python с ключом --enable-shared, в противном случае компиляция модуля DRBD завершится ошибкой.

 

Установка Python

# Устанавливаем необходимые пакеты зависимостей.

apt-get install g++ gcc make libffi-dev libnss3-dev libssl-dev zlib1g-dev -y

# Скачиваем исходников Python и распаковываем их.

wget https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tar.xz
tar -Jxf Python-3.9.19.tar.xz
cd Python-3.9.19
ИНФОРМАЦИЯ. Официальный сайт источник — https://www.python.org/downloads/source

 

# Собираем и устанавливаем.

./configure --prefix=/usr --enable-optimizations --enable-shared
make && make altinstall
cd ..

 

Установка DRBD

# Устанавливаем необходимые пакеты зависимостей.

apt-get install g++ gcc make linux-headers-$(uname -r) git flex xsltproc coccinelle libkeyutils-dev -y

# Скачиваем последние версии исходников DRBD (9.2.9), DRBD-Utils (9.28.0) и распаковываем их.

wget https://pkg.linbit.com//downloads/drbd/9/drbd-9.2.9.tar.gz
wget https://pkg.linbit.com//downloads/drbd/utils/drbd-utils-9.28.0.tar.gz

tar -zxvf drbd-9.2.9.tar.gz
tar -zxvf drbd-utils-9.28.0.tar.gz
ИНФОРМАЦИЯ. Официальный сайт с дистрибутивами — https://pkg.linbit.com//downloads/drbd

Либо последние версии исходников можно склонировать с git репозитория:

git clone --recursive https://github.com/LINBIT/drbd.git
git clone --recursive https://github.com/LINBIT/drbd-utils.git

# Компилируем и устанавливаем DRBD.

cd drbd-9.2.9
make
make install
cd ..

# Загружаем модуль DRBD в ядро.

modprobe drbd

 

Проверим загружен ли модуль DRBD.

cat /proc/drbd
version: 8.4.11 (api:1/proto:86-101)
srcversion: 07B2B73308F5B02A759D097

lsmod | grep drbd
drbd                  421888  0
lru_cache              16384  1 drbd
libcrc32c              16384  1 drbd

 

Установка утилит DRBD

Утилиты DRBD предоставляют необходимые инструменты для управления устройствами DRBD.

# Собираем и устанавливаем DRBD-Utils.

cd drbd-utils-9.28.0
./configure --prefix= --with-systemdunitdir=/etc/init.d --without-manual
make
make install

Если нужно скомпилировать с документацией, то нужно установить дополнительные пакеты зависимостей:

apt-get install docbook-xsl xsltproc po4a

и конфигурировать без ключа --without-manual.

 

# Настройка скрипта запуска DRBD, копирование его и файла описания сервиса в каталог системных служб и добавляем сервис DRBD в автозагрузку.

sed -i 's/^# Default-Start:.*$/# Default-Start:  2 3 4 5/' scripts/drbd
sed -i 's|/lib/drbd/scripts/drbd|/lib/drbd/drbd|g' scripts/drbd.service

cp scripts/drbd /etc/init.d/drbd
cp scripts/drbd /lib/drbd/drbd
cp scripts/drbd.service /usr/lib/systemd/system/drbd.service

update-rc.d drbd defaults
systemctl enable drbd

 

# Запускаем DRBD и проверяем статус запуска службы.

systemctl start drbd && systemctl status drbd

● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.
     Loaded: loaded (/lib/systemd/system/drbd.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2024-05-21 15:49:05 MSK; 4s ago
    Process: 30800 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS)
   Main PID: 30800 (code=exited, status=0/SUCCESS)
        CPU: 19ms

мая 21 15:49:05 c1 systemd[1]: Starting DRBD -- please disable. Unless you are NOT using a cluster manager....
мая 21 15:49:05 c1 drbd[30800]: Starting DRBD resources:
мая 21 15:49:05 c1 drbd[30807]: no resources defined!
мая 21 15:49:05 c1 drbd[30808]: no resources defined!
мая 21 15:49:05 c1 drbd[30811]: WARN: stdin/stdout is not a TTY; using /dev/consoleWARN: stdin/stdout is not a TTY; using /dev/console
мая 21 15:49:05 c1 drbd[30814]: no resources defined!
мая 21 15:49:05 c1 drbd[30800]: .
мая 21 15:49:05 c1 systemd[1]: Finished DRBD -- please disable. Unless you are NOT using a cluster manager..

 

Troubleshooting

Опишу некоторые моменты с которыми столкнулся в процессе сборки и установки пакета DRBD, может кому будут полезны.

 

Момент 1.

Сперва я собирал утилиты DRBD-Utils 9.27.0 и обратил внимание при использовании поставляемого init-скрипта drbd этой версии в выводе запущенного процесса drbd на следующую строку (отмечена ниже):

● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.
     Loaded: loaded (/lib/systemd/system/drbd.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2024-05-21 12:02:24 MSK; 4s ago
    Process: 37043 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS)
   Main PID: 37043 (code=exited, status=0/SUCCESS)
        CPU: 68ms

мая 21 12:02:24 c2 systemd[1]: Starting DRBD -- please disable. Unless you are NOT using a cluster manager....
мая 21 12:02:24 c2 drbd[37043]: Starting DRBD resources:/lib/drbd/drbd: строка 148: /var/lib/linstor/loop_device_mapping: Нет такого файла или каталога
мая 21 12:02:24 c2 drbd[37054]: no resources defined!
мая 21 12:02:24 c2 drbd[37055]: no resources defined!
мая 21 12:02:24 c2 drbd[37058]: WARN: stdin/stdout is not a TTY; using /dev/consoleWARN: stdin/stdout is not a TTY; using /dev/console
мая 21 12:02:24 c2 drbd[37043]: .
мая 21 12:02:24 c2 systemd[1]: Finished DRBD -- please disable. Unless you are NOT using a cluster manager..

Так как я не устанавливал LINSTOR, то как следствие появляется такое сообщение. В целом на работоспособность drbd никак не влияет, но глаз мозолит.

Все дело в коде init-скрипта drbd, там не описано условие при котором файл /var/lib/linstor/loop_device_mapping существует или нет. Исправим это путем внесения изменений в init-скрипт drbd. Переходим в каталог с исходниками drbd-utils/scripts и создаем патч файл:

cat << EOF > drbd.patch
--- drbd    2024-05-21 11:43:41.982137800 +0300
+++ drbd        2024-05-21 13:19:47.233320728 +0300
@@ -148,10 +148,15 @@
 {
        local line dev file loop_mapping

-       # new location
-       loop_mapping=/var/lib/linstor.d/loop_device_mapping
-       # fallback to old location
-       [ -f "$loop_mapping" ] || loop_mapping=/var/lib/linstor/loop_device_mapping
+        if [ -f /var/lib/linstor.d/loop_device_mapping ]; then
+              loop_mapping=/var/lib/linstor.d/loop_device_mapping
+        # old location
+        elif [ -f /var/lib/linstor/loop_device_mapping ]; then
+                loop_mapping=/var/lib/linstor/loop_device_mapping
+        else
+                # at least we tried.
+               return 0
+        fi

        # || [[ -n $line ]]: in case there is no newline at EOF
        while read -r line || [[ -n $line ]] ; do
@@ -166,9 +171,6 @@
                        stop)  losetup "$dev" 2>/dev/null && losetup -d "$dev";;
                esac
        done < "$loop_mapping"
-
-       # at least we tried.
-       return 0
 }

 run_hook()
EOF

Применяем созданный патч:

patch -i drbd.patch

Теперь можно паропатченный init-скрипт drbd поместить в каталоги /etc/init.d/ & /lib/drbd/ и проверить, выше упомянутого сообщения не будет.

Так же хочу заметить что в следующей версии DRBD-Utils 9.28.0 эти изменения в init-скрипт drbd внесены.

 

Момент 2.

При выполнении update-rc.d drbd defaults получал ошибку создания символьных ссылок — update-rc.d: error: no runlevel symlinks to modify, aborting!.

Лечится это путем удаления возможных текущих символьных ссылок drbd и создание новых:

rm /etc/rc{0..6}.d/*drbd
update-rc.d drbd defaults

Либо можно в ручную их создать:

ln -s -T /etc/init.d/drbd /etc/rc0.d/S01drbd
ln -s -T /etc/init.d/drbd /etc/rc1.d/S01drbd
ln -s -T /etc/init.d/drbd /etc/rc2.d/S01drbd
ln -s -T /etc/init.d/drbd /etc/rc3.d/S01drbd
ln -s -T /etc/init.d/drbd /etc/rc4.d/S01drbd
ln -s -T /etc/init.d/drbd /etc/rc5.d/S01drbd
ln -s -T /etc/init.d/drbd /etc/rc6.d/S01drbd
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА ДОНАТОМ

Оставьте комментарий

3 × 5 =