作っておぼえるHAシステム2(2022年版)

前回はDRBDのインストールまで行いましたので、今回はDRBDの設定方法について解説します。

DRBDの設定

DRBDの設定は/etc/drbd.dディレクトリに内にリソースファイルを定義して行います。リソースファイル内の「リソース名」をDRBDは参照して設定します。

DRBDの最も簡単な設定例は次のようになります。

[root@node1 ~]# cat /etc/drbd.d/r0.res 
resource r0 {
  device    /dev/drbd0;
  disk      /dev/sdb;
  meta-disk internal;
 
  on node1 {
    address   10.9.0.1:7777;
    node-id   0;
  }
 
  on node2 {
    address   10.9.0.2:7777;
    node-id   1;
  }
} 

resourceから始まる{~}までがリソースブロックと呼ばれる定義になります。resourceの次の文字列がリソース名になります。リソース名はdrbdadmコマンドで次のように利用されます。

[root@node1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node2 role:Secondary
    peer-disk:UpToDate

r0がdrbdadmコマンドの引数になっています。リソース名は短いものにしておくと、コマンドの入力やPacemakerの設定が容易になり、誤りも少なくなります。

deviceはDRBDのデバイス名です、リソースr0のデバイス名を別のものにしたい場合は、このデバイスを変更します。/dev/drbdXXXXのような命名にして下さい。(XXXXのところには数字が入ります。)

diskはDRBDで同期するストレージのデバイス名です。2台目のストレージ全体を使用するので/dev/sdbとなっています。もちろんパーティションを設定して/dev/sdb1のようにストレージの一部を定義することも可能です。
meda-diskはDRBDのメタデータの設定です。メタデータはDRBDの管理情報を保存する領域です。internalと定義されているので/dev/sdbの内部にメタデータが作られます。別のパーティションやディスクにメタデータを配置することも可能です。設定方法はDRBD9のマニュアルを参照下さい。

on node1 {….}とon node2{….}それぞれのノードでのネットワーク設定になります。DRBDの同期用にネットワークに付与されたアドレスを記述します。アドレスの後ろにある7777はTCPのポート番号になります。今回の設定では同期用のネットワークのファイヤーウォールの設定はすべて通過にしましたが、厳密なファイヤーウォールの設定を行う場合には、TCPの7777ポート番号を許可します。ポート番号はリソース毎に定義されるので、別のリソースを追加する場合には、7778番、7779番..とポート番号を変える必要があります。

DRBDの初期化

DRBDの初期化を次の順番で行います。

  1. メタデータの作成
  2. DRBDの起動
  3. 初期同期の実行

初期同期の実行が始まると/dev/drbd0にアクセスして冗長化されたブロックデバイスを利用できます。

メタデータの作成

drbdadmコマンドでメタデータを作成します。

[root@node1 ~]# drbdadm create-md r0
initializing activity log
initializing bitmap (256 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

メタデータはnode1、node2の両方で作成する必要があります。node2でも実行します。

[root@node2 ~]# drbdadm create-md r0
initializing activity log
initializing bitmap (256 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

ストレージ内に何もデータがない場合は、このような出力になります。

すでにメタデータが作られている場合には消去を確認するメッセージが表示されます。次の実行例はメタデータがあるストレージに対してcreate-mdを実行した場合の出力例です。実行中の質問にyesと入力すれば、メタデータが作成されます。

[root@node2 .ssh]# drbdadm create-md r0
You want me to create a v09 style flexible-size internal meta data block.
There appears to be a v09 flexible-size internal meta data block
already in place on /dev/sdb at byte offset 8589930496

Do you really want to overwrite the existing meta-data?
[need to type 'yes' to confirm] yes    --- yes と入力して下さい

md_offset 8589930496
al_offset 8589897728
bm_offset 8589635584

Found xfs filesystem
8388316 kB data area apparently used
8388316 kB left usable by current configuration

Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.

Do you want to proceed?
[need to type 'yes' to confirm] yes    --- yes と入力して下さい

initializing activity log
initializing bitmap (256 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
DRBDの実行

drbdadm up r0コマンドによりDRBDをカーネルに読み込みます。

 

 

[root@node1 ~]# drbdadm up r0

このコマンドも両方のノードで実行します。

[root@node2 ~]# drbdadm up r0

起動されたかどうかはdrbdadm status r0コマンドで確認します。

[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:Inconsistent
  node2 role:Secondary
    peer-disk:Inconsistent

disk:Inconsistentと表示されているのは、初期同期が終わっていないためです。ストレージが不整合状態であることを意味しています。この状態では/dev/drbd0にはアクセスができません。

初期同期の実行

DRBDのデバイスが使えるように初期同期を実行します。これはどちらか片方のノードで実行します。

次はnode1で実行した例です。

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

初期同期が開始されるとnode1からnode2にデータのコピーが始まります。drbdadm statusで状態を確認できます。この例では全体の容量の4.36%の同期が終了したことがわかります。(node2でdrbdadm statusを実行しているので、node1がPrimaryであることが確認できます。)

[root@node2 ~]# drbdadm status r0
r0 role:Secondary
  disk:Inconsistent
  node1 role:Primary
    replication:SyncTarget peer-disk:UpToDate done:4.36

同期が終了すると次のようにdiskの状態がUpToDateの変わります。

[root@node2 ~]# drbdadm status r0
r0 role:Secondary
  disk:UpToDate
  node1 role:Primary
    peer-disk:UpToDate

DRBD9にはAuto Promoteという機能があります。この時点でnode1がPrimaryになっているのでSecondaryの状態に戻しておきます。

[root@node1 ~]# drbdadm secondary r0
[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:UpToDate
  node2 role:Secondary
    peer-disk:UpToDate
ファイルシステムの作成

この構築ではDRBDのデバイスにファイルシステムを作成して、MariaDBのデータ領域として利用します。mkfs.xfsコマンドを使ってファイルシステムを作成します。

[root@node1 lib]# mkfs.xfs /dev/drbd0 
meta-data=/dev/drbd0             isize=512    agcount=4, agsize=524270 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2097079, 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 lib]# mount /dev/drbd0 /var/lib/mysql
[root@node1 ~]# df
ファイルシス            1K-ブロック    使用  使用可 使用% マウント位置
devtmpfs                     495532       0  495532    0% /dev
tmpfs                        507376    8208  499168    2% /dev/shm
tmpfs                        507376    6924  500452    2% /run
tmpfs                        507376       0  507376    0% /sys/fs/cgroup
/dev/mapper/centos-root     6486016 1717088 4768928   27% /
/dev/sda1                   1038336  171148  867188   17% /boot
tmpfs                        101476       0  101476    0% /run/user/0
/dev/drbd0                  8378076   62996 8315080    1% /var/lib/mysql

マウントが確認できたら、あとの操作のためにマウントはいったん解除します。

[root@node1 ~]# umount /dev/drbd0
[root@node1 ~]# df
ファイルシス            1K-ブロック    使用  使用可 使用% マウント位置
devtmpfs                     495532       0  495532    0% /dev
tmpfs                        507376    8208  499168    2% /dev/shm
tmpfs                        507376    6924  500452    2% /run
tmpfs                        507376       0  507376    0% /sys/fs/cgroup
/dev/mapper/centos-root     6486016 1717108 4768908   27% /
/dev/sda1                   1038336  171148  867188   17% /boot
tmpfs                        101476       0  101476    0% /run/user/0

以上で、DRBDの設定は終了です。