作業ログ源泉垂れ流し

しがないIT技術者の作業ログを垂れ流す

DRBDの練習 4 〜LVM / DRBD / LVM〜

DRBDの下位デバイスと、DRBDのデバイスにLVMを使ってみる。

DRBDの公式ドキュメントを参考に作業する。

まずはDRBDの下位デバイスとして使う論理ボリューム vg01/r0 を作成する。

drbd1# pvcreate /dev/vdb
  Physical volume "/dev/vdb" successfully created.
drbd1# pvs
  PV         VG       Fmt  Attr PSize   PFree 
  /dev/vda5  drbd1-vg lvm2 a--   <4.52g     0 
  /dev/vdb   vg01     lvm2 a--  <10.00g <9.51g
drbd1# vgcreate vg01 /dev/vdb
  Volume group "vg01" successfully created
drbd1# vgs vg01
  VG   #PV #LV #SN Attr   VSize   VFree 
  vg01   1   1   0 wz--n- <10.00g <9.51g
drbd1# lvcreate -n r0 -L 500M vg01
  Logical volume "r0" created.
drbd1# lvs vg01
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  r0   vg01 -wi-ao---- 500.00m                                                    

全く同じことをdrbd2でも行う。

続いて、DRBDの設定ファイルを編集する。 diskには先ほど作成した論理ボリューム /dev/vg01/r0 を指定する。

resource r0 {
        on drbd1 {
                device          /dev/drbd1;
                disk            /dev/vg01/r0;
                address         192.168.122.166:7776;
                meta-disk       internal;
        }
        on drbd2 {
                device          /dev/drbd1;
                disk            /dev/vg01/r0;
                address         192.168.122.45:7776;
                meta-disk       internal;
        }
}

以前の記事と同様に、リソースの初回有効化を行う。

drbd1# drbdadm create-md r0
drbd1# drbdadm up r0

ここまではdrbd2でも実行する。

ここからはdrbd1だけで実行。

drbd1# drbdadm new-current-uuid --clear-bitmap r0/0
drbd1# drbdadm primary r0

これで、論理ボリューム vg01/r0 が、DRBDで同期される。

次に、今使えるようになった/dev/drbd1をLVMのPVとして、その上にVG vg_drbd, LV lv0 を作る。

drbd1# pvcreate /dev/drbd1
  Physical volume "/dev/drbd1" successfully created.
drbd1# pvs
  PV         VG       Fmt  Attr PSize   PFree  
  /dev/drbd1 vg_drbd  lvm2 a--  496.00m 496.00m
  /dev/vda5  drbd1-vg lvm2 a--   <4.52g      0 
  /dev/vdb   vg01     lvm2 a--  <10.00g  <9.51g
drbd1# vgcreate vg_drbd /dev/drbd1
  Volume group "vg_drbd" successfully created
drbd1# vgs vg_drbd
  VG      #PV #LV #SN Attr   VSize   VFree  
  vg_drbd   1   0   0 wz--n- 496.00m 496.00m
drbd1# lvcreate -n lv0 -L 200M vg_drbd
  Logical volume "lv0" created.
drbd1# lvs vg_drbd
  LV   VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg_drbd -wi-a----- 200.00m                                                    

今作った`lv0'にファイルシステムを作り、マウントして、ファイルを作成してみる。

drbd1# mkfs.ext4 /dev/vg_drbd/lv0 
mke2fs 1.46.2 (28-Feb-2021)
Discarding device blocks: done                            
Creating filesystem with 204800 1k blocks and 51200 inodes
Filesystem UUID: 2d5a478b-f48d-475d-9f3a-3feff10c6fb8
Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done 

drbd1# mount /dev/vg_drbd/lv0 /mnt
drbd1# echo 'Test File' > /mnt/test
drbd1# ls /mnt
lost+found  test
drbd1# cat /mnt/test
Test File

アクティブ系をdrbd1からdrbd2に切り換えてみる。
まずdrbd1で、lv0をアンマウントし、vg_drbdを非アクティブ化して、セカンダリに降格する。

drbd1# umount /mnt
drbd1# vgchange -a n vg_drbd
  0 logical volume(s) in volume group "vg_drbd" now active
drbd1# drbdadm secondary r0
drbd1# drbdadm status r0
r0 role:Secondary
  disk:UpToDate
  peer role:Secondary
    replication:Established peer-disk:UpToDate

続いてdrbd2をプライマリに昇格する。

drbd2# drbdadm primary r0
drbd2# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  peer role:Secondary
    replication:Established peer-disk:UpToDate

drbd2# pvs
  PV         VG       Fmt  Attr PSize   PFree  
  /dev/drbd1 vg_drbd  lvm2 a--  496.00m 296.00m
  /dev/vda5  drbd2-vg lvm2 a--   <4.52g      0 
  /dev/vdb   vg01     lvm2 a--  <10.00g  <9.51g
drbd2# vgs vg_drbd
  VG      #PV #LV #SN Attr   VSize   VFree  
  vg_drbd   1   1   0 wz--n- 496.00m 296.00m
drbd2# lvs vg_drbd
  LV   VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg_drbd -wi------- 200.00m                                                    

ちゃんとdrbd1で作ったPV, VG, LVが見えている。
drbd2で、vg_drbdをアクティブ化し、マウントしてファイルを確認。

drbd2# vgchange -a y vg_drbd
  1 logical volume(s) in volume group "vg_drbd" now active
drbd2# mount /dev/vg_drbd/lv0 /mnt
drbd2# ls /mnt
lost+found  test
drbd2# cat /mnt/test 
Test File

DRBDで入れ子LVが同期できた!