Ubuntu 20.04で標準のdrbd 8.4.11を使う場合の注意点

Ubuntu 20.04でインストールされるdrbdは8.4なのか9.11なのか?」で標準のdrbd 8.4.11と、レポジトリ追加してのdrbd 9.19.1で設定する手法について記載した。

標準のdrbd 8.4.11で使って見るかと設定してみたところ、いくつか問題が発生していた。

その1: 起動時のエラーログ

drbd起動時に下記の様な「/lib/drbd/drbd: line 148: /var/lib/linstor/loop_device_mapping: No such file or directory」というログが出力されている。

root@ubuntu02:~# 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 Mon 2021-12-20 14:07:35 JST; 2s ago
    Process: 241197 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS)
   Main PID: 241197 (code=exited, status=0/SUCCESS)

Dec 20 14:07:34 ubuntu02 drbd[241197]: /lib/drbd/drbd: line 148: /var/lib/linstor/loop_device_mapping: No such file or directory
Dec 20 14:07:34 ubuntu02 drbd[241216]: [
Dec 20 14:07:34 ubuntu02 drbd[241216]:      create res: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]:    prepare disk: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]:     adjust disk: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]:      adjust net: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]: ]
Dec 20 14:07:35 ubuntu02 drbd[241258]: WARN: stdin/stdout is not a TTY; using /dev/console
Dec 20 14:07:35 ubuntu02 drbd[241197]:    ...done.
Dec 20 14:07:35 ubuntu02 systemd[1]: Finished DRBD -- please disable. Unless you are NOT using a cluster manager..
root@ubuntu02:~#

まず、 /var/lib/linstor ディレクトリは標準状態では存在していない。

root@ubuntu02:~# ls -l /var/lib/linstor
ls: cannot access '/var/lib/linstor': No such file or directory
root@ubuntu02:~#

エラーの出力元の /lib/drbd/drbd の中で /var/lib/linstor/loop_device_mapping はどういう場面で登場しているかを調べる

# Set up/detach linstor loopback devices for LINSTOR file based pools
# FIXME I think setting up these loop device mappings should be done elsewhere,
# and not in the DRBD init file; possibly we need proper support in drbdadm.
handle_linstor_loopback()
{
        local line dev file
        # || [[ -n $line ]]: in case there is no newline at EOF
        while read -r line || [[ -n $line ]] ; do
                dev=${line%%:*}
                file=${line#*:}
                test -f "$file" && test -r "$file" && test -w "$file" || continue
                # should -f be allowed?
                [[ $dev = loop* ]] || [[ $dev = /dev/loop* ]] || continue
                case "$1" in
                        # what about existing, but "wrong", mappings?
                        start) losetup "$dev" 2>/dev/null || losetup "$dev" "$file";;
                        stop)  losetup "$dev" 2>/dev/null && losetup -d "$dev";;
                esac
        done < /var/lib/linstor/loop_device_mapping

        # at least we tried.
        return 0
}

/var/lib/linstor/loop_device_mapping を入力ファイルとして指定している。

どうやらdrbd起動時に /dev/loop10 = /work/testfile.iso みたいなループデバイスを作るための設定ファイルであるようだ。

ファイルが存在しないことによるログ出力なので、下記で対応した

root@ubuntu02:~# mkdir  /var/lib/linstor
root@ubuntu02:~# touch /var/lib/linstor/loop_device_mapping
root@ubuntu02:~# 

その2: drbdの降格に失敗する

「drbdadm primary shares」でPrimaryとして動作させたあと、他方のサーバに切り替えるため降格する「drbdadm secondary shares」を実行したところ、「0: State change failed: (-12) Device is held open by someone」というメッセージで失敗した。

root@ubuntu01:~#  drbdadm secondary shares
0: State change failed: (-12) Device is held open by someone
Command 'drbdsetup-84 secondary 0' terminated with exit code 11
root@ubuntu01:~# 

誰が使っているのかと「lsof /dev/drbd0」を実行してみたところ、multipathdが握っていた。

root@ubuntu01:~#  lsof /dev/drbd0
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
multipath 4910 root    5r   BLK  147,0      0t0  890 /dev/drbd0
root@ubuntu01:~# 

まずは単純にmultipathd.socketを停止させてから降格を実施してみる。

root@ubuntu01:~# systemctl stop multipathd.socket
root@ubuntu01:~#  drbdadm secondary shares
root@ubuntu01:~#

問題無く降格できた。

というわけで、/dev/drbd0 をmultipathdの対象外とするための設定を作成する。

/etc/mul/etc/multipath.conf に 下記の様な形でblacklist を追加した。

defaults {
    user_friendly_names yes
}

blacklist {
        devnode "^drbd[0-9]"
}

「multipath -t」を実行すると、初期値などが反映された フル記載の multipathd設定が表示されるので、 blacklist セクションに drbdに関する記述が追加されていることを確認する。

この対処後は、multipathdを起動した状態であっても drbdの降格に成功するようになった。

“Ubuntu 20.04で標準のdrbd 8.4.11を使う場合の注意点” への2件の返信

  1. 素晴らしい内容をありがとうございました。
    問題解決のきっかけを得る事が出来ました。

しろねこ へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.