CentOS8でのDRBD9を動かそう!!

 

2019/09/24にCentOS8がリリースされので、早速DRBD9をインストールしてテストしてみましょう。

1.ソースコードからコンパイル

DRBDはカーネルオブジェクトとして動く部分と、ユーザー空間で動くコマンドから構成されます。

それぞれのソースコードは別々のURLからダウンロードできます。

とりあえず以下の手順で、カーネルオブジェクトの部分であるkmod-drbdのrpmファイルがCentOS8で作れました。

dnf install elfutils-libelf-devel gcc git kernel-devel kernel-rpm-macros make perl-interpreter rpm-build tar kernel-abi-whitelists wget
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

wget https://www.linbit.com/downloads/drbd/9.0/drbd-9.0.20-0rc2.tar.gz
tar xvzf drbd-9.0.20-0rc2.tar.gz
cd drbd-9.0.20-0rc2
make kmp-rpm

※本blogを執筆時のDRBDの最新バージョンは9.0.20(rc2)でした。最新バージョンはここから確認下さい。

次にdrbdamやdrbdsetupコマンドをインストールするため、drbd-utilsのtarファイルをダウンロードしてコンパイルします。

wget https://www.linbit.com/downloads/drbd/utils/drbd-utils-9.10.0.tar.gz
cp drbd-utils-9.10.0.tar.gz ~/rpmbuild/SOURCES/
tar xzf drbd-utils-9.10.0.tar.gz
cd drbd-utils-9.10.0/
./autogen.sh
./configure --enable-spec
rpmbuild -bb drbd.spec --without sbinsymlinks --without heartbeat --with prebuiltman

/root/rpmbuildにrpmファイルが作られます。

2.LINBITのリポジトリからダウンロード

LINBITのサポートライセンスを契約すると、LINBITが運営するリポジトリサーバへのアクセスできます。設定方法はCentOS7の場合と同じで、/etc/yum.repo.d/linbit.repoというファイルに次のような記述をします。

[linbit.repo]
name=LINBIT repo
baseurl=http://packages.linbit.com/<ハッシュ番号>/yum/rhel8/drbd-9.0/x86_64
gpgcheck=0

※<ハッシュ番号>は40文字の文字列で、契約されたユーザ様の契約ノード毎に提供されます。

これで後はyumコマンド(またはdnfコマンド)でDRBDをインストールできます。

yum install kmod-drbd drbd

3.動作確認

インストール後は、/etc/drbd.d/ディレクトリに設定ファイルを置いて、DRBDを起動します。このあたりの動きはCentOS7等と同じです。

以下はDRBDのストレージが/dev/sdb1の設定例です。

[root@node2 ~]# cat r0.res
resource r0 {
        net{
                protocol C;
                max-buffers         128K;
        }
        on node1 {
                device  /dev/drbd0;
                disk    /dev/sdb1;
                address 192.168.3.151:7788;
                meta-disk       internal;
        }

        on node2 {
                device  /dev/drbd0;
                disk    /dev/sdb1;
                address 192.168.3.152:7788;
                meta-disk       internal;
        }
}

設定ファイルが出来たら、初期化してxfsのファイルシステムとしてマウントしてみます。
まずメタデータを両ノードで作成します。(このコマンドは両ノードで実行します。)

[root@node1 ~]# drbdadm create-md r0
md_offset 1077932032
al_offset 1077899264
bm_offset 1077862400

Found some data

 ==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes

initializing activity log
initializing bitmap (36 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
success

次に両ノードでDRBDを起動します。(このコマンドも両ノードで実行します。)

[root@node1 ~]# drbdadm up r0

node1を一旦Primaryにして初期同期を開始します。(このコマンドはnode1で実行します。)
ここで初期同期が開始したらSecondary状態に戻してください。これはDRBD9にはAuto Promoteの機能があるためで、Sedondary状態に戻し忘れると、系切り替えができなくなることがあります。

[root@node1 ~]# drbdadm --force primary r0
[root@node1 ~]# drbdadm secondary r0

最後にファイルシステムを初期化して/mntディレクトリにマウントします。

[root@node1 ~]# mkfs.xfs /dev/drbd0
meta-data=/dev/drbd0             isize=512    agcount=4, agsize=65788 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=263150, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node1 ~]# mount /dev/drbd0 /mnt
[root@node1 ~]# df
ファイルシス        1K-ブロック    使用   使用可 使用% マウント位置
devtmpfs                 405548       0   405548    0% /dev
tmpfs                    420560       0   420560    0% /dev/shm
tmpfs                    420560    5716   414844    2% /run
tmpfs                    420560       0   420560    0% /sys/fs/cgroup
/dev/mapper/cl-root    14034944 2707280 11327664   20% /
/dev/sda1                999320  182068   748440   20% /boot
tmpfs                     84112       0    84112    0% /run/user/0
/dev/drbd0              1042360   40384  1001976    4% /mnt

CentOS7と同じように使えました。

CentOS8はyum コマンドがdnf コマンドに変わったり、ファイヤーウォールの内部コマンドが変わったりしていますが、DRBDのコンパイルに関しては大きな違いはなく、これまでと同じように実行ができるようです。