DRBD and MySQL - Virtualbox Setup

Monday Jan 4th 2010 by Sean Hull

DRBD is a Linux project that provides a real-time distributed filesystem. Sean Hull demonstrates how to use Sun's virtualbox software to create a pair of VMs, then configure those VMs with DRBD, and finally install and test MySQL running on volumes sitting on DRBD.


DRBD is a Linux project to provide a real time distributed filesystem.  Part two of this series will dig deep into a real-world installation example.  We'll use Sun's virtualbox software to create a couple of VMs, then configure those VMs with DRBD, and finally install and test MySQL running on volumes sitting on DRBD.

Virtualbox - An Easy and Powerful VM Solution

Sun has a great free virtual machine solution called Virtualbox.  There are many such options, but I chose theirs because it runs on Linux, Windows and Mac, so it should work for everyone.  

The download can be found here:


It of course comes with a simple GUI installer, so I won't go through that in too much detail.  That is pretty straightforward.  Once you have that installed, fire it up and we'll run through the steps to create a vm.  Since we will also be installing CentOS on our virtual machines, I recommend you go find that here:


Create Your VMs

I went with penguin names.  The first host is called adelie, and the second one called african.  The steps are as follows:

1. Create the vm using the virtualbox GUI by clicking "New".  A wizard will take you through the process.  Enter the name, specify "Linux" as the OS, and select Redhat 64 bit as the OS.  Unfortunately it won't install that for  you too, but it wouldn't really be a true vm if it did that for you.  Leave base memory, boot hard disk, create new hard disk, etc. all at their defaults.  It creates an 8GB disk and I left that at default too.  Then click finish and it will create the virtual disk.  Click finish again and it will create the vm.

2. You'll need to add a second disk for your DRBD use.  A small 25M disk will be fine. Click the "Settings" for your new vm, and then select the "Storage" tab. For simplicities sake we used a new SCSI controller. Click the add disk button a few times until the wizard comes up.  Click "Create".  Use defaults, and give it a name like adelie_data.vdi, then make it 25M in size.

3. We'll also need to configure the networking interface.  By default, virtualbox makes it NAT.  This doesn't allow us to see other machines in the sandbox.  So click the "Network" tab, and select "Bridged Adapter" from the popup menu.

4. Per our recommendation above, if you haven't already, download your CentOS ISO for 5.4.

5. We'll also need to specify the ISO media.   This can be a little tricky as the interface is a little odd in this regard.  Go back to the "Storage" tab, and click on the CD/DVD symbol under IDE Controller.  Click the little folder icon on the right hand side, and a popup comes up.  If you don't see your ISO image, use the "Add" button, and find your ISO and select it.  The virtualbox will treat your ISO as a mounted CD image.

6. Start your engines.  That's right, finally we can start the vm.  Hopefully the CentOS installer comes up.  If you have trouble, use the disk symbol at the bottom of the window, click for the menu, and select your DVD ISO of CentOS 5.4.

7.  Install CentOS 5.4.  Run through the screens and click OK.

8. Verify and start your network.  Hopefully this has already happened by default with DHCP.  See also these commands:

$ /sbin/ifconfig eth0
$ /sbin/ifup eth0

You'll now need to run through these same eight steps again to create the second node, we called it african.

Install DRBD on both Nodes

1. Use yum to install the drbd tools, and the kernel module:

$ yum install drbd83.x86_64
$ yum install kmod-drbd83.x86_64

2. Install the mysql server software:

$ yum install mysql-server.x86_64

3. Install emacs:

$ yum install emacs

4. Configure drbd.conf as follows (same on both boxes).  Note the IP addresses, device and disk specification.  If you created your virtualbox just like we did, these should all be the same.  IP address will still depend on your DHCP server.

common { 
  protocol C; 
resource sean {
  on adelie { 
    device /dev/drbd0;
    disk /dev/sda1;
    meta-disk internal;
  on african { 
    device /dev/drbd0;
    disk /dev/sda1;
    meta-disk internal;

Start DRBD

This part turned out to be a huge struggle.  I configured it, but tried over and over to no avail to get things working.  It turned out that the firewall that Linux by default installs, blocked the ports 7789 on both machines.  So DRBD couldn't reach each other on the two nodes.  This failed silently and repeatedly and all I knew was that it wasn't connecting.  So be sure to disable iptables.  Since these are virtual boxes, I recommend just deleting the file:  /etc/rc.d/rc3.d/S08iptables

Use fdisk to create a partition roughly 25M in size on each node.

$ fdisk /dev/sda

Use drbdadm to create the initial mirrored device as follows:

$ drbdadm create-md sean

This will synchronize all data between the two volumes for the first time.  Note that if you have data you want to preserve you should (a) do a backup of it of course, and then (b) perform this step on the node whose data you want to preserve!

$ drbdadm -- --overwrite-data-of-peer primary sean

Verify syncronization with:

$ watch cat /proc/drbd

Create a filesystem in the usual way:

$ mkfs.ext3 /dev/drdb0

Mount it on /mnt/mysql (create that dir if necessary):

$ mount /dev/drbd0 /mnt/mysql

Configure MySQL and Start

Edit the /etc/my.cnf file and set the datadir as follows:


We'll simple start mysql manually now:

$ mysqld_safe &

Let's create a table and add a row:

$ mysql
mysql> use test;
mysql> create table sean_test (c1 varchar(64));
mysql> insert into sean_test values ('hi there');
mysql> commit;
mysql> quit

Test Switching to the Other Node

To verify what's happening on the other node you'll need to "promote" it to being the primary.  Do the following:

On your current primary do:

$ ps auxw | grep mysql
$ kill <procid>

$ umount /mnt/mysql

$ drbdadm secondary sean

Then on the other node do:

$ drbdadm primary sean

Mount it:

$ mount /dev/drbd0 /mnt/mysql

Start MySQL:

$ mysqld_safe &

Lastly login and see your change:

$ mysql
mysql> use test;
mysql> select * from sean_test;
mysql> quit


DRBD is some sophisticated technology.  Luckily, with today's VM technology such as Sun's Virtualbox, we can set up a couple of virtual machines quite easily, and test out the technology.  We've tried to break that whole process down into really simple steps.  You should be able to follow those and get your whole DRBD setup in no time.  Hopefully the lessons we learned in the process will save you some time.

In our next installment of this series, we'll explain how to set up heartbeat to handle the failover automatically and gracefully.  This is the piece that we describe in "test switching to the other node" above.  Heartbeat will automatically perform all of these steps, and determine when a node is out of commission.

» See All Articles by Columnist Sean Hull

Mobile Site | Full Site