作っておぼえるHAシステム2
前回はDRBDのインストールまで行いましたので、このBlogでは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.5.0.1:7777; node-id 0; } on node2 { address 10.5.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の初期化を次の順番で行います。
- メタデータの作成
- DRBDの起動
- 初期同期の実行
初期同期の実行が始まると/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コマンドを使ってファイルシステムを作成します。
(DRBD8ではAuto Promoteの機能が無いので、mkfsコマンドの実行にまえに”drbdadm primary r0″を実行して、DRBDのリソースをPrimary状態にする必要がありました。DRBD9では不要です。)
[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の設定は終了です。