DRBD 8からDRBD 9への移行手順
DRBDの最新バージョンは9です。
2020年時点でHAクラスタに使われているのは主にDRBD 8.4で、DRBD 9も開発がすすみ安定して使えるようになっています。
DRBD 9の大きな特徴は 多ノード対応、SDS対応ですが、DRBD 8との互換性もあり、DRBD 8で構築した環境をそのままDRBD 9にバージョンアップすることもできます。
本ブログでは、node1、node2の2台構成のMariaDBのHAクラスターのDRBDのバージョンを8.4から9.0にバージョンアップの方法を説明します。
1.node2のDRBDをバージョンアップ
まず、node2をOfflineにします。これはDRBDのバージョンアップ中にPacemakerがDRBDの異常を検知しないようにするためです。
[root@node2 lib]# crm_mon -1D Online: [ node1.example.com node2.example.com ] Active resources: Resource Group: rg_mariadb res_ipadr (ocf::heartbeat:IPaddr2): Started node1.example.com res_fsmnt (ocf::heartbeat:Filesystem): Started node1.example.com res_mysql (ocf::heartbeat:mysql): Started node1.example.com Master/Slave Set: ms_drbd_r0 [res_drbd_r0] Masters: [ node1.example.com ] Slaves: [ node2.example.com ]
crm node standbyコマンドでnode2をOffline(スタンバイ)状態にします。
[root@node2 lib]# crm node standby node2.example.com [root@node2 lib]# crm_mon -1D Node node2.example.com: standby Online: [ node1.example.com ] Active resources: Resource Group: rg_mariadb res_ipadr (ocf::heartbeat:IPaddr2): Started node1.example.com res_fsmnt (ocf::heartbeat:Filesystem): Started node1.example.com res_mysql (ocf::heartbeat:mysql): Started node1.example.com Master/Slave Set: ms_drbd_r0 [res_drbd_r0] Masters: [ node1.example.com ]
node2がOffline(スタンバイ)状態になったのが確認できました。
2.DRBDの削除
node2がOffline状態になったら、DRBD 8.4を削除します。
[root@node2 lib]# rpm -qa | grep drbd
drbd-udev-9.13.1-1.el7.x86_64
kmod-drbd-8.4.11_3.10.0_1127-1.el7.x86_64
drbd-utils-9.13.1-1.el7.x86_64
drbd-bash-completion-9.13.1-1.el7.x86_64
drbd-pacemaker-9.13.1-1.el7.x86_64
drbd-9.13.1-1.el7.x86_64
drbd-xen-9.13.1-1.el7.x86_64
drbd-utilsなどは最新のDRBD 8.4ではバージョン 9.13になっていて、DRBD 9と共通で使えるパッケージになっています。古い8.4バージョンである場合は、まずdrbd-utilsなどのバージョンアップを行ってください。
この例ではkmod-drbd-8.4を削除します。
[root@node2 ~]# rmmod drbd
[root@node2 ~]# yum remove kmod-drbd
読み込んだプラグイン:fastestmirror
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ kmod-drbd.x86_64 0:8.4.11_3.10.0_1127-1.el7 を 削除
--> 依存性解決を終了しました。
依存性を解決しました
================================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
================================================================================================
削除中:
kmod-drbd x86_64 8.4.11_3.10.0_1127-1.el7 @drbd-8.4 9.8 M
トランザクションの要約
================================================================================================
削除 1 パッケージ
インストール容量: 9.8 M
上記の処理を行います。よろしいでしょうか? [y/N]y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
削除中 : kmod-drbd-8.4.11_3.10.0_1127-1.el7.x86_64 1/1
検証中 : kmod-drbd-8.4.11_3.10.0_1127-1.el7.x86_64 1/1
削除しました:
kmod-drbd.x86_64 0:8.4.11_3.10.0_1127-1.el7
完了しました!
3.DRBDのリポジトリファイルの修正
次にDRBDのリポジトリファイルを修正します。
8.4をインストールした時に/etc/yum.repo.dの中に例えばlinbit.repoというファイルがあり、その中にリポジトリの設定が書かれています。
[drbd-8.4] name=LINBIT Packages for drbd-8.4 - $basearch baseurl=http://packages.linbit.com/<<ハッシュ番号>>/yum/rhel7/drbd-8.4/$basearch enabled=1 gpgkey=https://packages.linbit.com/package-signing-pubkey.asc gpgcheck=1
9.0用の設定に書き換えます。
※<<ハッシュ番号は>> LINBIT HAクラスタスタックサポートを契約された時に発行される文字列です。
[drbd-9.0]
name=LINBIT Packages for drbd-9.0 - $basearch
baseurl=http://packages.linbit.com/<<ハッシュ番号>>/yum/rhel7/drbd-9.0/$basearch
enabled=1
gpgkey=https://packages.linbit.com/package-signing-pubkey.asc
gpgcheck=1
4.DRBD 9のインストール
リポジトリの設定後、DRBD 9をインストールします。
[root@node2 ~]# yum install kmod-drbd 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp base | 3.6 kB 00:00:00 drbd-9.0 | 2.9 kB 00:00:00 extras | 2.9 kB 00:00:00 pacemaker-1.1.20 | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): updates/7/x86_64/primary_db | 2.1 MB 00:00:00 (2/2): drbd-9.0/x86_64/primary_db | 850 kB 00:00:04 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ kmod-drbd.x86_64 0:9.0.23_3.10.0_1127-1 を インストール --> 依存性解決を終了しました。 依存性を解決しました ================================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================================ インストール中: kmod-drbd x86_64 9.0.23_3.10.0_1127-1 drbd-9.0 2.4 M トランザクションの要約 ================================================================================================ インストール 1 パッケージ 総ダウンロード容量: 2.4 M インストール容量: 2.4 M Is this ok [y/d/N]: y Downloading packages: kmod-drbd-9.0.23_3.10.0_1127-1.x86_64.rpm | 2.4 MB 00:00:04 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : kmod-drbd-9.0.23_3.10.0_1127-1.x86_64 1/1 検証中 : kmod-drbd-9.0.23_3.10.0_1127-1.x86_64 1/1 インストール: kmod-drbd.x86_64 0:9.0.23_3.10.0_1127-1 完了しました!
インストール後にDRBDのバージョンを確認します。/proc/drbdファイルでバージョン確認ができます。
[root@node2 ~]# modprobe drbd [root@node2 ~]# cat /proc/drbd version: 9.0.23-1 (api:2/proto:86-116) GIT-hash: d16bfab7a4033024fed2d99d3b179aa6bb6eb300 build by @buildsystem, 2020-06-08 14:43:16 Transports (api:16): [root@node2 ~]#
ここで/proc/drbdのversion:が9.0.2xになっていない場合、node2は再起動してください。DRBDはカーネルモジュールなので、再起動しないと古いDRBDのプログラムが動くことがあります。
5.メタデータの変換
DRBDのメタデータをver 8.4からver 9.0へ変換します。メタデータとはDRBDの管理情報がは記録されているディスクの一部の領域です。DRBD 8とDRBD 9では内部の形式が異なるため、drbdadm create-mdコマンドを実行して、メタデータを変換します。
[root@node2 ~]# drbdadm create-md r0 You want me to create a v09 style flexible-size internal meta data block. There appears to be a v08 flexible-size internal meta data block already in place on /dev/loop0 at byte offset 2147479552 Valid v08 meta-data found, convert to v09? [need to type 'yes' to confirm] yes md_offset 2147479552 al_offset 2147446784 bm_offset 2147381248 Found xfs filesystem 2097052 kB data area apparently used 2097052 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 Writing meta data... New drbd meta data block successfully created. success
6.クラスタシステムの復旧
DRBDを起動してnode1と同期を再開します。
[root@node2 ~]# drbdadm up r0 [root@node2 ~]# drbdadm status r0 role:Secondary disk:UpToDate node1.example.com role:Primary peer-disk:UpToDate
node1のDRBD 8.4とUpToDateとなっているので、正常に同期していることがわかります。
最後に、node2のPacemakerをOnlineに戻します。
[root@node2 ~]# crm node online node1.example.com [root@node2 ~]# crm_mon -1D Online: [ node1.example.com node2.example.com ] Active resources: Resource Group: rg_mariadb res_ipadr (ocf::heartbeat:IPaddr2): Started node1.example.com res_fsmnt (ocf::heartbeat:Filesystem): Started node1.example.com res_mysql (ocf::heartbeat:mysql): Started node1.example.com Master/Slave Set: ms_drbd_r0 [res_drbd_r0] Masters: [ node1.example.com ] Slaves: [ node2.example.com ]
node1とnode2のPacemakerの連携が再開しました。
7.node1のDRBDをバージョンアップ
続いてnode1のDBRDをバージョンアップします。node1のPacemakerをOffline (スタンバイ)にすれば、node2にサービスが切り替わります。
[root@node1 ~]# crm node standby node1.example.com
サービスがnode2にフェールオーバしたら、node2で行ったDRBDのバージョンアップ作業をnode1でも同様に行います。
8.DRBD 9に変更した時に注意すること。
DRBD 9では/proc/drbdファイルを使ったDRBDの動作チェックができません。
以下はDRBD8.4での表示例です。
[root@node2 lib]# cat /proc/drbd version: 8.4.11-1 (api:1/proto:86-101) GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by @buildsystem, 2020-04-02 08:12:50 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:10579 nr:42837 dw:53416 dr:55259 al:3 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
監視ソフトなどで、DRBDの状態を確認している場合、drbdadm statusコマンドを使って動作チェックするか、/sys/のproc_drbdファイルで同様の確認ができます。
[root@node1 ~]# cat /sys/kernel/debug/drbd/resources/*/connections/*/0/proc_drbd 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----- ns:0 nr:484516 dw:484516 dr:2120 al:0 bm:0 lo:1 pe:[0;17] ua:0 ap:[0;0] ep:1 wo:2 oos:1614620 [===>................] sync'ed: 23.1% (1614620/2097052)K finish: 0:00:13 speed: 120,608 (120,608 -- 120,608) want: 26,760 K/sec 23% sector pos: 966952/4194104 resync: used:1/61 hits:15733 misses:8 starving:0 locked:0 changed:4 act_log: used:0/1237 hits:0 misses:0 starving:0 locked:0 changed:0 blocked on activity log: 0/0/0