技術部ネットワーク課の末吉と申します。
RockyLinux9でDRBDとLVMを組み合わせた構成でサーバを構築する機会がありました。DRBDのPrimary/Secondaryを切り替えてみた所、切り替えたPrimary側でLVMボリュームが表示されないという症状が発生した際の話を紹介します。
- DRBDとLVMについて
- 設定内容
- DRBD/LVMの状態
- DRBD Primary/Secondary切り替えテスト
- DRBD Primary/Secondaryでのボリューム表示(1)
- DRBD Primary/Secondaryでのボリューム表示(2)
- DRBD Primary/Secondary切り替えについて
- LVM system.device
- DRBDの切り替えによるLVM system.deviceの変化
- LVM system.deviceの編集
- DRBD Primary/Secondary切り替え
- まとめ
DRBDとLVMについて
DRBD(Distributed Replicated Block Device)は、Linuxプラットフォームの分散ストレージシステムになります。詳細はWikipediaを参照ください。
LVM(logical volume manager)は複数のハードディスクやパーティションにまたがった記憶領域をひとつのボリュームグループにまとめ、単一の論理ボリューム(LV)として扱うことのできるディスク管理機能になります。詳細はWikipediaを参照ください。
設定内容
構成と概要
- 物理サーバを2台使用。
- DRBDで/dev/sda5を/dev/drbd0として定義しデータのレプリケーションを実施。
- /dev/drbd0を物理ディスクとして登録し、ボリュームグループ「vg01」を作成。
- ボリュームグループ上に論理ボリュームを作成。
ソフトウェアバージョン
今回の検証で使用した各ソフトウェアバージョンは以下の通りです。
kmod-drbd9x-9.1.21-1.el9_4.elrepo.x86_64 drbd9x-utils-9.28.0-1.el9.elrepo.x86_64 lvm2-2.03.23-2.el9.x86_64
DRBD
DRBDのリソース設定ファイルとして/etc/drbd.d/drbd0.resを作成し、物理サーバ2台に以下のように設定。
resource drbd0 { device /dev/drbd0; disk /dev/sda5; meta-disk internal; on drbdtest1.synapse.ne.jp { address 192.168.0.1:7789; } on drbdtest2.synapse.ne.jp { address 192.168.0.2:7789; } }
他は全てデフォルトの設定となります。
LVM
/etc/lvm/lvm.confはデフォルトのままで利用しました。
DRBD/LVMの状態
各サーバにDRBD/LVM設定を追加後、各ボリュームを作成した状態を確認します。
- drbd1.synapse.ne.jp
■DRBD状態 [root@drbdtest1 ~]# drbdadm status drbd0 role:Primary disk:UpToDate drbdtest2.synapse.ne.jp role:Secondary peer-disk:UpToDate ■物理ボリューム [root@drbdtest1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/drbd0 vg01 lvm2 a-- 1.58t 1.54t ■ボリュームグループ [root@drbdtest1 ~]# vgs VG #PV #LV #SN Attr VSize VFree vg01 1 1 0 wz--n- 1.58t 1.54t ■論理ボリューム [root@drbdtest1 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert voltest.synapse.ne.jp vg01 -wi-a----- 40.00g
- drbd2.synapse.ne.jp
■DRBD状態 [root@drbdtest2 ~]# drbdadm status drbd0 role:Secondary disk:UpToDate drbdtest1.synapse.ne.jp role:Primary peer-disk:UpToDate ■物理ボリューム [root@drbdtest2 ~]# pvs [root@drbdtest2 ~]# ■ボリュームグループ [root@drbdtest2 ~]# vgs [root@drbdtest2 ~]# ■論理ボリューム [root@drbdtest2 ~]# lvs [root@drbdtest2 ~]#
以下のことが確認できました。
- drbdtest1はDRBD Primaryであり ボリュームが表示されアクセスできる。
- drbdtest2はDRBD Secondaryでありボリュームが表示されずアクセスできない。
DRBD Primary/Secondary切り替えテスト
DRBD をdrbdtest1:Primary/drbdtest2:Secondaryから drbdtest1:Secondary/drbdtest2:Primaryに切り替えて drbdtest2でボリュームが表示されアクセスできるか確認してみます。
■drbdtest1 ボリュームグループ非アクティブ化 [root@drbdtest1 ~]# vgchange -a n vg01 0 logical volume(s) in volume group "vg01" now active ※ボリュームグループの非アクティブ化をしないとDRBDをsecondaryに移行できない。 ■drbdtest1 PrimaryからSecondaryへ移行 [root@drbdtest1 ~]# drbdadm secondary drbd0 ■drbdtest1 確認 [root@drbdtest1 ~]# drbdadm status drbd0 role:Secondary disk:UpToDate drbdtest2.synapse.ne.jp role:Secondary peer-disk:UpToDate ■drbdtest2 DRDB SecondaryからPrimaryへ移行 [root@drbdtest2 ~]# drbdadm primary drbd0 ■drbdtest2 確認 [root@drbdtest2 ~]# drbdadm status drbd0 role:Primary disk:UpToDate drbdtest1.synapse.ne.jp role:Secondary peer-disk:UpToDate ■drbdtest2 物理ボリューム確認 [root@drbdtest2 ~]# pvs [root@drbdtest2 ~]# ※表示されない ■drbdtest2 ボリュームグループ確認 [root@drbdtest2 ~]# vgs [root@drbdtest2 ~]# ※表示されない ■drbdtest2 論理ボリューム確認 [root@drbdtest2 ~]# lvs [root@drbdtest2 ~]# ※表示されない
drbdtest2をDRBD Primaryに切り替えたが、各ボリュームが表示されずアクセスできない状態となりました。
DRBD Primary/Secondaryでのボリューム表示(1)
drbdtest1 DRBD Primary/Secondaryの各状態で各ボリュームがどう表示されるか確認してみます。
Primary時
■物理ボリューム [root@drbdtest1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/drbd0 vg01 lvm2 a-- 1.58t 1.54t ■ボリュームグループ [root@drbdtest1 ~]# vgs VG #PV #LV #SN Attr VSize VFree vg01 1 1 0 wz--n- 1.58t 1.54t ■論理ボリューム [root@drbdtest1 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert voltest.synapse.ne.jp vg01 -wi-a----- 40.00g
Secondary時
■物理ボリューム [root@drbdtest1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda5 vg01 lvm2 a-- 1.58t 1.54t ■ボリュームグループ [root@drbdtest1 ~]# vgs VG #PV #LV #SN Attr VSize VFree vg01 1 1 0 wz--n- 1.58t 1.54t ■論理ボリューム [root@drbdtest1 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert voltest.synapse.ne.jp vg01 -wi------- 40.00g ■ボリュームグループ アクティブ化 [root@drbdtest1 ~]# vgchange -a y vg01 device-mapper: reload ioctl on (253:0) failed: Device or resource busy 0 logical volume(s) in volume group "vg01" now active [root@drbdtest1 ~]# ls -la /dev/vg01/ ls: cannot access '/dev/vg01/': No such file or directory
結果
Secondaryだと各ボリュームは表示されますが、ボリュームグループのアクティブ化をするとエラーとなりました。
DRBD Primary/Secondaryでのボリューム表示(2)
続けて、drbdtest2 DRBD Primary/Secondaryの各状態で各ボリュームがどう表示されるか確認してみます。
Primary時
■物理ボリューム [root@drbdtest2 ~]# pvs [root@drbdtest2 ~]# ■ボリュームグループ [root@drbdtest2 ~]# vgs [root@drbdtest2 ~]# ■論理ボリューム [root@drbdtest2 ~]#l vs [root@drbdtest2 ~]#
Secondary時
■物理ボリューム [root@drbdtest2 ~]# pvs [root@drbdtest2 ~]# ■ボリュームグループ [root@drbdtest2 ~]# vgs [root@drbdtest2 ~]# ■論理ボリューム [root@drbdtest2 ~]#l vs [root@drbdtest2 ~]#
結果
Primary/Secondaryともにボリュームが表示されずアクセスできない状態ということがわかりました。
DRBD Primary/Secondary切り替えについて
期待している動作は以下の通りです。
- drbdtest1 Primary → Secondary に切り替わるとボリュームは表示されずアクセスできない。
- drbdtest2 Secondary → Primary に切り替わるとボリュームが表示されアクセスできる。
実際の動作は以下の通りでした。
- drbdtest1 Primary → Secondary に切り替わるとボリュームは表示させるがアクセスできない。
- drbdtest2 Secondary → Primary に切り替わるとボリュームが表示されずアクセスできない。
LVM system.device
LVMに関してRHEL9のドキュメントを確認すると「system.devices」で管理しているということが記載されていました。
論理ボリュームマネージャー (LVM) の system.devices ファイルは、LVM に対するデバイスの可視性および使いやすさを制御します。デバイスファイルは /etc/lvm/devices/ ディレクトリーにあります。デバイスファイルを管理するには、LVM コマンドを使用します。system.devices ファイルを直接編集しないでください。 Red Hat Enterprise Linux 9 では、デフォルトで system.devices ファイル機能が有効になっています。アクティブな場合、LVM デバイスフィルターを置き換えます。LVM デバイスフィルターを有効にするには、system.devices ファイルを無効にします。詳細は、system.devices ファイルの無効化 を参照してください。
DRBDの切り替えによるLVM system.deviceの変化
DRBD Primary/Secondaryを切り替えた場合、drbdtest1/drbdtest2でsystem.deviceにどの様な変化があるか確認してみます。
drbdtest1
■DRBD をPrimaryからSecondaryに切り替えた直後のsystem.device [root@drbdtest1 ~]# cat /etc/lvm/devices/system.devices # LVM uses devices listed in this file. # Created by LVM command lvmdevices pid 46941 at Fri Aug 9 11:24:01 2024 PRODUCT_UUID=f48ad600-0eab-11ee-8000-7cc25583e796 VERSION=1.1.19 IDTYPE=devname IDNAME=/dev/drbd0 DEVNAME=/dev/drbd0 PVID=YFuaLJJ2TLjl12CCcd3Gsc4Yr0ONBNQm ■物理ボリューム確認 [root@drbdtest1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda5 vg01 lvm2 a-- 1.58t 1.54t ■pvs実行後のsystem.device [root@drbdtest1 ~]# cat /etc/lvm/devices/system.devices # LVM uses devices listed in this file. # Created by LVM command pvs pid 46988 at Fri Aug 9 11:42:24 2024 PRODUCT_UUID=f48ad600-0eab-11ee-8000-7cc25583e796 VERSION=1.1.20 IDTYPE=devname IDNAME=/dev/sda5 DEVNAME=/dev/sda5 PVID=YFuaLJJ2TLjl12CCcd3Gsc4Yr0ONBNQm PART=5
Secondaryへ移行後pvsを実行すると物理ボリュームのデバイス名が /dev/drbd0から/dev/sda5に変わっていることが確認できました。/dev/drbd0にアクセスできなくなった影響だと思われます。
drbdtest2
■DRBD をSecondaryからPrimaryに切り替えた直後のsystem.device [root@drbdtest2 ~]# cat /etc/lvm/devices/system.devices # LVM uses devices listed in this file. # Created by LVM command lvmdevices pid 45939 at Fri Aug 9 11:22:25 2024 PRODUCT_UUID=7112ba00-0e96-11ee-8000-7cc25583e7a2 VERSION=1.1.13 ■物理ボリューム確認 [root@drbdtest2 ~]# pvs [root@drbdtest2 ~]# ■pvs実行後のsystem.device [root@drbdtest2 ~]# cat /etc/lvm/devices/system.devices # LVM uses devices listed in this file. # Created by LVM command lvmdevices pid 45939 at Fri Aug 9 11:22:25 2024 PRODUCT_UUID=7112ba00-0e96-11ee-8000-7cc25583e7a2 VERSION=1.1.13
system.deviceに変化は見られない、system.deviceに何も記述がないのでボリュームが表示されないと思われる。
LVM system.deviceの編集
DRBDを切り替える際にsystem.deviceを編集する必要があるようでした。ドキュメントによるとsystem.deviceは直接編集はせずlvmdeviceコマンドで実施するようでした。
- 追加
- lvmdevice –-adddev <デバイス名>
- 削除
- lvmdevice --deldev <デバイス名>
DRBD Primary/Secondary切り替え
Primary/Secondary切り替え時、 lvmdeviceコマンドでsystem.deviceを編集してみます。
■drbdtest1 ボリュームグループ非アクティブ化 [root@drbdtest1 ~]# vgchange -a n vg01 0 logical volume(s) in volume group "vg01" now active ■drbdtest1 PrimaryからSecondaryへ移行 [root@drbdtest1 ~]# drbdadm secondary drbd0 ■drbdtest1 DRBD状態確認 [root@drbdtest1 ~]# drbdadm status drbd0 role:Secondary disk:UpToDate drbdtest2.synapse.ne.jp role:Secondary peer-disk:UpToDate ■drbdtest1 system.deviceから/dev/drbd0を削除(追加した作業) [root@drbdtest1 ~]# lvmdevices --deldev /dev/drbd0 ■drbdtest1 物理ボリューム確認 [root@drbdtest1 ~]# pvs [root@drbdtest1 ~]# ■drbdtest1 ボリュームグループ確認 [root@drbdtest1 ~]# vgs [root@drbdtest1 ~]# ■drbdtest1 論理ボリュームグループ確認 [root@drbdtest1 ~]# lvs [root@drbdtest1 ~]# ■drbdtest2 DRDB SecondaryからPrimaryへ移行 [root@drbdtest2 ~]# drbdadm primary drbd0 ■drbdtest2 DRBD状態確認 [root@drbdtest2 ~]# drbdadm status drbd0 role:Primary disk:UpToDate drbdtest1.synapse.ne.jp role:Secondary peer-disk:UpToDate ■drbdtest2 system.deviceへ/dev/drbd0を追加(追加した作業) [root@drbdtest2 ~]# lvmdevices --adddev /dev/drbd0 ■drbdtest2 物理ボリューム確認 [root@drbdtest2 ~]# pvs PV VG Fmt Attr PSize PFree /dev/drbd0 vg01 lvm2 a-- 1.58t 1.54t ■drbdtest2 ボリュームグループ確認 [root@drbdtest2 ~]# vgs VG #PV #LV #SN Attr VSize VFree vg01 1 1 0 wz--n- 1.58t 1.54t ■drbdtest2 論理ボリューム確認 [root@drbdtest2 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert voltest.synapse.ne.jp vg01 -wi------- 40.00g ■drbdtest2 ボリュームグループアクティブ化 [root@drbdtest1 ~]# vgchange -a y vg01 1 logical volume(s) in volume group "vg01" now active
- drbdtest1 DRBD Primary → Secondaryに切り替えるとボリュームが表示されない。
- drbdtest2 DRBD Secondary → Primaryに切り替えるとボリュームが表示されアクセスできる。
期待している動作が得られました。
まとめ
- RHEL9でLVM対象のデバイスに関してデフォルトではsystem.deviceで管理している。
- system.deviceファイルは直接編集するのではなく、コマンドを実施して行う。
- system.devices ファイルを無効化し、filterを利用して自動認識させることも可能なようです。
- 動作確認をすることでDRBD/LVMに関して理解を深めることができた。