Distributed Replicated Block Device (DRBD)

(Lab Setup Series)

1 Overview

        VM1                 VM2
    192.0.0.10           192.0.0.20
       eth2                 eth2
        +                    +
        +--------------------+
                  +
                 br2
              192.0.0.254
               Container

2 Base Lab

vm1$ apk add drbd-utils lsblk parted e2fsprogs-extra
vm2$ apk add drbd-utils lsblk parted e2fsprogs-extra

3 Manual Setup

3.1 Setup VM1

vm1$ cat /root/.profile
export PATH=$PATH:/usr/lib/drbd

vm1$ cat /etc/init.d/drbd
export PATH=$PATH:/usr/lib/drbd
# ...
vm1$ parted -s /dev/sdb mklabel msdos
vm1$ parted -s /dev/sdb mkpart primary 0% 2GiB
vm1$ vi /etc/drbd.d/r0.res
# ---------------------------------------- #
resource r0 {
    device minor 0;
    disk /dev/sdb1;
    meta-disk internal;
    protocol C;

    on vm1 {
        address       192.0.0.10:7789;
    }

    on vm2 {
        address       192.0.0.20:7789;
    }
}
# ---------------------------------------- #
vm1$ drbdadm create-md r0
vm1$ drbdadm up r0
vm1$ drbdadm primary --force r0

3.2 Setup VM2

vm2$ cat /root/.profile
export PATH=$PATH:/usr/lib/drbd

vm2$ cat /etc/init.d/drbd
export PATH=$PATH:/usr/lib/drbd
# ...
vm2$ parted -s /dev/sdb mklabel msdos
vm2$ parted -s /dev/sdb mkpart primary 0% 2GiB
vm2$ vi /etc/drbd.d/r0.res
# ---------------------------------------- #
resource r0 {
    device minor 0;
    disk /dev/sdb1;
    meta-disk internal;
    protocol C;

    on vm1 {
        address       192.0.0.10:7789;
    }

    on vm2 {
        address       192.0.0.20:7789;
    }
}
# ---------------------------------------- #
vm2$ drbdadm create-md r0
vm2$ drbdadm up r0
vm1$ drbdadm secondary r0
vm1$ lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdb         8:16   0    4G  0 disk
└─sdb1      8:17   0    2G  0 part
  └─drbd0 147:0    0    2G  0 disk

vm2$ drbdadm status
r0 role:Primary
  disk:UpToDate
  peer role:Secondary
    replication:Established peer-disk:UpToDate
vm2$ lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdb         8:16   0    8G  0 disk
└─sdb1      8:17   0    2G  0 part
  └─drbd0 147:0    0    2G  1 disk

vm2$ drbdadm status
r0 role:Secondary
  disk:UpToDate
  peer role:Primary
    replication:Established peer-disk:UpToDate

4 Automation Setup

To save time from manual setup, use the below steps to quickly setup the DRBD lab.

host$ find lab/drbd/setup-1 -type f -exec docker cp {} apk:/ws \;
host$ docker exec apk /ws/drbd_setup_vm1.sh
host$ docker exec apk /ws/drbd_setup_vm2.sh
vm1$ drbdadm status
r0 role:Primary
  disk:UpToDate
  peer role:Secondary
    replication:Established peer-disk:UpToDate
vm2$ drbdadm status
r0 role:Secondary
  disk:UpToDate
  peer role:Primary
    replication:Established peer-disk:UpToDate

5 References