シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

Rocky Linux 9のDRBDとLVMを組み合わせた構成でのLVMボリューム認識について

技術部ネットワーク課の末吉と申します。

RockyLinux9でDRBDとLVMを組み合わせた構成でサーバを構築する機会がありました。DRBDのPrimary/Secondaryを切り替えてみた所、切り替えたPrimary側でLVMボリュームが表示されないという症状が発生した際の話を紹介します。

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ファイルは直接編集するのではなく、コマンドを実施して行う。
  • 動作確認をすることでDRBD/LVMに関して理解を深めることができた。