This is a step-by-step guide on the installation of Distributed Replicated Block Device (DRBD) on CentOS 8 / RHEL 8 Linux servers. DRBD is a free and open source, software-based replicated storage solution used for mirroring the content of block devices such as disk partitions, hard disks and logical volumes between hosts in a network.
The core functionality of DRBD is implemented by a way of Linux kernel module with driver for a virtual block device. Because DRBD is located near the bottom of system’s I/O stack, it is extremely flexible and versatile which makes it an ideal solution for implementing a high available replication solution.
By installing DRBD you’ll get a set of administration tools which communicate with the kernel module in order to configure and administer DRBD resources.
- drbdadm: This is the high-level administration tool of the DRBD program suite.
- drbdsetup: This tool is used to configure the DRBD module loaded into the kernel
- drbdmeta: Used to create, dump, restore, and modify DRBD meta data structures
How DRBD mirrors data:
- in real time. Replication will happen continuously while applications modify the data stored in the device.
- transparently. Applications are not aware that the data is stored on multiple hosts in the network.
- synchronously or asynchronously. When synchronous mirroring is used applications are notified of write completions upon completion on all hosts. For asynchronous mirroring, applications are notified of write completions when the writes have completed locally, which usually is before they have propagated to the other hosts.
Step 1: Install DRBD on CentOS 8 | RHEL 8 Linux
The packages for DRBD needs to be installed manually on CentOS 8 / RHEL 8 Linux. For the installation we’ll use ELRepo repository which contains extra packages for Enterprise Linux.
Add ELRepo repository to your CentOS / RHEL 8 system by running the commands below.
sudo dnf -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
– With the repository added to the system you can import the public key:
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
Confirm configuration by searching for DRBD packages.
$ sudo dnf search drbd
ELRepo.org Community Enterprise Linux Repository - el8 338 kB/s | 264 kB 00:00
================================================================== Name & Summary Matched: drbd ==================================================================
kmod-drbd90.x86_64 : drbd90 kernel module(s)
drbd90-utils.x86_64 : Management utilities for DRBD
drbd90-utils-sysvinit.x86_64 : The SysV initscript to manage the DRBD.
Now you can install DRBD with kernel module on CentOS 8 Linux.
sudo dnf install vim drbd90-utils kmod-drbd90
Accept installation in the prompt shown by command execution.
Dependencies resolved.
========================================================================================================================================================
Package Arch Version Repository Size
========================================================================================================================================================
Installing:
kmod-drbd90 x86_64 9.0.21-3.el8_2.elrepo elrepo 292 k
drbd90-utils x86_64 9.10.0-2.el8.elrepo elrepo 753 k
Upgrading:
dracut x86_64 049-70.git20200228.el8 BaseOS 365 k
dracut-network x86_64 049-70.git20200228.el8 BaseOS 100 k
dracut-squash x86_64 049-70.git20200228.el8 BaseOS 54 k
iptables x86_64 1.8.4-10.el8 BaseOS 581 k
iptables-ebtables x86_64 1.8.4-10.el8 BaseOS 70 k
iptables-libs x86_64 1.8.4-10.el8 BaseOS 105 k
kexec-tools x86_64 2.0.20-14.el8 BaseOS 485 k
libnftnl x86_64 1.1.5-4.el8 BaseOS 83 k
linux-firmware noarch 20191202-97.gite8a0f4c9.el8 BaseOS 72 M
systemd x86_64 239-30.el8_2 BaseOS 3.5 M
systemd-libs x86_64 239-30.el8_2 BaseOS 1.1 M
systemd-pam x86_64 239-30.el8_2 BaseOS 449 k
systemd-udev x86_64 239-30.el8_2 BaseOS 1.3 M
Installing dependencies:
kernel-core x86_64 4.18.0-193.6.3.el8_2 BaseOS 28 M
Transaction Summary
========================================================================================================================================================
Install 3 Packages
Upgrade 13 Packages
Total download size: 109 M
Is this ok [y/N]: y
Under the default SELinux security policies DRBD mail fail to run and you may need to exempt DRBD processes from SELinux control:
sudo dnf -y install policycoreutils-python-utils
sudo semanage permissive -a drbd_t
Enable DRBD service ports on the firewall.
sudo firewall-cmd --add-port=6996-7800/tcp --permanent
sudo firewall-cmd --reload
Step 2: Preparing your lower-level storage
With the installation of DRBD done on CentOS / RHEL 8 Linux system we can proceed to configure replicated storage using DRBD across two servers.
We need to set aside a roughly identically sized storage area on both cluster nodes which used as lower-level device for your DRBD resource. Block devices that you can easily use are:
- Hard drive partition (or a full physical hard drive)
- Software RAID device
- LVM Logical Volume
- Any other block device type found on your system.
In my Setup I have two servers with below details.
Server Name | Server IP | Raw Disk Device |
server-01.computingforgeeks.com | 192.168.20.11 | /dev/sdb |
server-02.computingforgeeks.com | 192.168.20.12 | /dev/sdb |
This is my servers disk layout:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 19.1G 0 disk
├─sda1 8:1 0 19G 0 part /
├─sda14 8:14 0 1M 0 part
└─sda15 8:15 0 64M 0 part /boot/efi
sdb 8:16 0 50G 0 disk
sr0 11:0 1 1024M 0 rom
I’ll use LVM to create Volume group for DRBD to make it easy for later scaling. This is done on the server with raw disk and DRBD installed.
Create partition table in the disk.
sudo parted -s -a optimal -- /dev/sdb mklabel gpt
sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
sudo parted -s -- /dev/sdb align-check optimal 1
Install LVM tools and create both PV, VG and LV for DRBD.
$ sudo dnf -y install lvm2 $ sudo pvcreate /dev/sdb1 Physical volume "https://computingforgeeks.com/dev/sdb1" successfully created. $ sudo vgcreate drbdpool /dev/sdb1 Volume group "drbdpool" successfully created $ sudo lvcreate -n drbdata -l100%FREE drbdpool Logical volume "drbdata" created.
Confirm LVM settings.
$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 drbdpool lvm2 a-- <50.00g <50.00g
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
drbdpool 1 0 0 wz--n- <50.00g <50.00g
Step 3: Configure DRBD resource
All aspects of DRBD are controlled in the /etc/drbd.conf configuration file which has the contents below.
$ cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
This is just a skeleton file which tells the service which directories to look for other config files.
I’ll create a new configuration file under /etc/drbd.d/r0.res
sudo vim /etc/drbd.d/resource0.res
With below contents:
resource resource0 {
on server-01.computingforgeeks.com {
device /dev/drbd1;
disk /dev/mapper/drbdpool-drbdata;
address 95.217.209.209:7789;
meta-disk internal;
}
on server-02.computingforgeeks.com {
device /dev/drbd1;
disk /dev/mapper/drbdpool-drbdata;
address 95.217.220.167:7789;
meta-disk internal;
}
}
Configuration summary:
- Our cluster consists of two nodes, ‘server01‘ and ‘server02‘.
- We have a resource arbitrarily named resource0 which uses /dev/mapper/drbdpool-drbdata as the lower-level device, and is configured with internal meta data.
- The resource uses TCP port 7789 for its network connections, and binds to the IP addresses 192.168.20.11 and 192.168.20.12, respectively.
- server-01.computingforgeeks.com and server-02.computingforgeeks.com are the correct server hostbnames as shown in
uname -a
Step 4: Initialize DRDB resource
After you have completed initial resource configuration you can bring up your resource. This is only done once.
Each of the following steps must be completed on both nodes.
Initialize DRBD’s metadata – Syntax: drbdadm create-md
$ sudo drbdadm create-md resource0
initializing activity log
initializing bitmap (1600 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
Step 5: Enable DRBD resource
Once the resource has bee initialized you need to associates it with its backing device (or devices, in case of a multi-volume resource), sets replication parameters, and connects the resource to its peer:
$ sudo drbdadm up resource0
--== Thank you for participating in the global usage survey ==--
The server's response is:
you are the 6934th user to install this version
Observe the status:
$ sudo drbdadm status resource0
resource0 role:Secondary
disk:Inconsistent
server-02.computingforgeeks.com role:Secondary
peer-disk:Inconsistent
The Inconsistent/Inconsistent disk state is expected at this point.
Step 6: Initial device synchronization
DRBD has successfully allocated both disk and network resources and is ready for operation. The next action is to tell DRBD which of the nodes should be used as the source of the initial device synchronization.
We need to start the initial full synchronization (Only perform on one node). I’ll run mine on server-01.computingforgeeks.com
sudo drbdadm primary --force resource0
After issuing this command, the initial full synchronization will commence. It may take some time depending on the size of the device.
Check Status:
# On Primary
$ sudo drbdadm status
sudo drbdadm status resource0
resource0 role:Primary
disk:UpToDate
server-02.computingforgeeks.com role:Secondary
peer-disk:UpToDate
# On Secondary
$ sudo drbdadm status resource0
resource0 role:Secondary
disk:UpToDate
server-01.computingforgeeks.com role:Primary
peer-disk:UpToDate
Step 7: Using DRBD Device
We can now use DRBD Device as it is fully operational. We can create a filesystem on the device, use it as a raw block device, mount it, and perform any other operation you would with an accessible block device.
Get device mapping for name.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 19.1G 0 disk
├─sda1 8:1 0 19G 0 part /
├─sda14 8:14 0 1M 0 part
└─sda15 8:15 0 64M 0 part /boot/efi
sdb 8:16 0 50G 0 disk
└─sdb1 8:17 0 50G 0 part
└─drbdpool-drbdata 253:0 0 50G 0 lvm
└─drbd1 147:1 0 50G 0 disk
sr0 11:0 1 1024M 0 rom
Let’s create a filesystem on DRBD device:
$ sudo mkfs.xfs /dev/drbd1
meta-data=/dev/drbd1 isize=512 agcount=4, agsize=3276442 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=13105767, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6399, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Let’s taste mounting:
sudo mkdir /mnt/mydrbd
sudo mount /dev/drbd1 /mnt/mydrbd
Confirmation:
$ df -hT /mnt/mydrbd/
Filesystem Type Size Used Avail Use% Mounted on
/dev/drbd1 xfs 50G 390M 50G 1% /mnt/mydrbd
Check if you can write files.
for i in {1..10}; do
sudo touch /mnt/mydrbd/${i}.txt
done
Confirm if files were created on the DRBD device:
$ ls -l /mnt/mydrbd
total 0
-rw-r--r--. 1 root root 0 Jul 7 00:36 10.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 1.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 2.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 3.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 4.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 5.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 6.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 7.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 8.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 9.txt
Step 8: Mounting DRBD device on the secondary Host:
First unmount on the primary node and get secondary role.
sudo umount /mnt/mydrbd
sudo drbdadm secondary resource0
Then on the secondary node run:
$ sudo drbdadm primary resource0
$ sudo drbdadm status
resource0 role:Secondary
disk:UpToDate
server-02.computingforgeeks.com role:Primary
peer-disk:UpToDate
$ sudo mkdir /mnt/mydrbd
$ sudo mount /dev/drbd1 /mnt/mydrbd
$ df -hT /mnt/mydrbd
Filesystem Type Size Used Avail Use% Mounted on
/dev/drbd1 xfs 50G 390M 50G 1% /mnt/mydrbd
$ ls -lh /mnt/mydrbd/
total 0
-rw-r--r--. 1 root root 0 Jul 7 00:36 10.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 1.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 2.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 3.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 4.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 5.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 6.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 7.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 8.txt
-rw-r--r--. 1 root root 0 Jul 7 00:36 9.txt
In this guide we have learned how we can install and configure DRBD on CentOS / RHEL 8 Linux machine. For an in-depth learning of DRBD technology refer to the official documentation in the link below.
More on Storage:
Install Ceph 15 (Octopus) Cluster on CentOS 8