1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ubuntu 20.04 で DRBD 9 を動かそうとしてハマった話

Posted at

DRBD9クラスタを組もうとしたらハマってしまったメモ。

はじめに:ざっくりDRBDとは

複数のサーバ間でブロックデバイスをミラーリングする分散ストレージシステム。
コア機能はカーネルモジュールとして実装されている。
単体ではあまり使われず、Pacemaker等のクラスタ管理ソフトウェアと組み合わせて使うのが一般的。
DRBD 8.4 → 9.0 で大幅な機能追加が行われた。

何が起きたか

公式ドキュメントに従ってDRBD9のパッケージを入れたのにDRBD9の機能が使えない。

環境:
Ubuntu 20.04 on Vagrant (Box: bento/ubuntu-20.04 (virtualbox, 202107.28.0))

やったこと:

# DRBD9インストール
sudo add-apt-repository ppa:linbit/linbit-drbd9-stack
sudo apt update
sudo apt install drbd-utils drbd-dkms

# resource作成
cat << EOS | tee /etc/drbd.d/r01.res
resource r01 {
 protocol C;
 meta-disk internal;
 device /dev/drbd1;
 syncer {
  verify-alg sha1;
 }
 on node1 {
  disk   /dev/vg01/lvdrbd;
  address  192.168.222.91:7789;
 }
 on node2 {
  disk   /dev/vg01/lvdrbd;
  address  192.168.222.92:7789;
 }
 on node3 {
  disk   /dev/vg01/lvdrbd;
  address  192.168.222.93:7789;
 }
}
EOS

# カーネルモジュールをロード
sudo modprobe drbd

# resourceのメタデータを作成
sudo drbdadm create-md r01
#> initializing activity log
#> initializing bitmap (32 KB) to all zero
#> Writing meta data...
#> New drbd meta data block successfully created.
#> success

# resource up
sudo drbdadm up r01
#> /etc/drbd.d/r01.res:1: in resource r01:
#>         There are multiple host sections for the peer node.

リソース起動時に設定ファイルがおかしいと怒られた。

解決に至るまで

3ノード以上での構成はDRBD9からサポートされた機能で、DRBD8.4以前では2ノードまでの構成でしかリソースを作成できない。
また、試しに2ノード構成の設定に書き換えてみるとエラーは発生しなかった。つまり何らかの理由で8.4系のDRBDが内部で動いていることになる。

ということでバージョンを確認してみる。

drbdadm --version
#> DRBDADM_BUILDTAG=GIT-hash:\ 856c13e97e974f8e0dec77dd3738372d4c234d2e\ build\ by\ buildd@lgw01-amd64-029\,\ 2021-11-19\ 09:10:27
#> DRBDADM_API_VERSION=1
#> DRBD_KERNEL_VERSION_CODE=0x08040b
#> DRBDADM_VERSION_CODE=0x091301
#> DRBDADM_VERSION=9.19.1

drbdadmはok

cat /proc/drbd
#> version: 8.4.11 (api:1/proto:86-101)
#> srcversion: FC3433D849E3B88C1E7B55C
#> 
#>  1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s
#>     ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1044412

動作中のDRBDカーネルモジュールがどういうわけか8.4になっている。
ので、今度はカーネルモジュールの依存関係やら提供元パッケージを調べてみる。

modprobe -D drbd
#> builtin crc32c_intel
#> builtin crc32c_generic
#> insmod /lib/modules/5.4.0-80-generic/kernel/lib/libcrc32c.ko
#> insmod /lib/modules/5.4.0-80-generic/kernel/lib/lru_cache.ko
#> insmod /lib/modules/5.4.0-80-generic/kernel/drivers/block/drbd/drbd.ko

dpkg -S /lib/modules/5.4.0-80-generic/kernel/drivers/block/drbd/drbd.ko
#> linux-modules-extra-5.4.0-80-generic: /lib/modules/5.4.0-80-generic/kernel/drivers/block/drbd/drbd.ko

パッと見た感じlinux-modules-extra-*に付いているDRBDモジュール(恐らくOS標準付属の)が呼ばれているようである。
カーネルモジュールはdrbd-dkmsパッケージに含まれるはずなので何かおかしい。

試しにdrbd-dkmsパッケージを再インストールしてみると...

sudo apt install --reinstall drbd-dkms
#> ~出力略~
#> Unpacking drbd-dkms (9.1.5-1ppa1~focal1) over (9.1.5-1ppa1~focal1) ...
#> Setting up drbd-dkms (9.1.5-1ppa1~focal1) ...
#> Loading new drbd-9.1.5-1ppa1~focal1 DKMS files...
#> Building for 5.4.0-80-generic
#> Module build for kernel 5.4.0-80-generic was skipped since the
#> kernel headers for this kernel does not seem to be installed.

Module build for kernel 5.4.0-80-generic was skipped since the
kernel headers for this kernel does not seem to be installed.

「カーネルヘッダ入ってないからモジュールのビルドはスキップしたで✋」ということらしい。
言われたとおりカーネルヘッダのパッケージをインストールしてみる。

sudo apt install linux-headers-$(uname -r)

インストール中のログ↓を見る限りdrbdのモジュールのビルドも走っている様子

~
Building module:
cleaning build area...
make -j4 KERNELRELEASE=5.4.0-80-generic -C src/drbd KDIR=/lib/modules/5.4.0-80-generic/build........
cleaning build area...

DKMS: build completed.

drbd.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-80-generic/updates/dkms/
~

ビルドはできたようだが、この時点ではまだ8.4のモジュールが動いたままなので一旦取り外す。

sudo drbdadm down r01
sudo modprobe -r drbd

モジュールを再読み込み。

sudo modprobe drbd
cat /proc/drbd
#> version: 9.1.5 (api:2/proto:110-121)
#> GIT-hash: f41bc23cec1e919932ce35947f1b4e67d9e6db74 build by root@node1, 2022-01-05 15:56:18
#> Transports (api:17):

これで、無事DRBD9のカーネルモジュールで動くようになった

感想

カーネルモジュール周りのいい勉強になりました。
ログはちゃんと見よう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?