MySQL Cluster running on Raspberry Pi

MySQL Cluster running on Raspberry Pi

I start a long weekend tonight and it’s the kids’ last day of school before their school holidays and so last night felt like the right time to play a bit. This week I received my Raspberry Pi – if you haven’t heard of it then you should take a look at the Raspberry Pi FAQ – basically it’s a ridiculously cheap ($25 or $35 if you want the top of the range model) ARM based PC that’s the size of a credit card.

A knew I had to have one to play with but what to do with it? Why not start by porting MySQL Cluster onto it? We always claim that Cluster runs on commodity hardware – surely this would be the ultimate test of that claim.

I chose the customised version of Debian – you have to copy it onto the SD memory card that acts as the storage for the Pi. Once up and running on the Pi, the first step was to increase the size of the main storage partition – it starts at about 2 Gbytes – using gparted. I then had to compile MySQL Cluster – ARM isn’t a supported platform and so there are no pre-built binaries. I needed to install a couple of packages before I could get very far:

Compilation initially got about 80% through before failing and so if you try this yourself then save yourself some time by applying the patch from this bug report before starting. The build scripts wouldn’t work but I was able to just run make…

make
sudo make install

As I knew that memory was tight I tried to come up with a config.ini file that cut down on how much memory would be needed (note that 192.168.1.122 is the Raspberry Pi while 192.168.1.118 is an 8GByte Linux x86-64 PC – doesn’t seem a very fair match!):

OK – so 157 Mbytes of memory available and no swap space, not ideal and so the next step was to use gparted again to create swap partitions on the SD card as well a massive 1Gbyte on my MySQL branded USB stick (need to persuade marketing to be a bit more generous with those). A quick edit of /etc/fstab and a restart and things were looking in better shape:

Next to start up the management node and 1 data node on the Pi as well as a second data node on the Linux server “ws2” (I want High Availability after all – OK so running the management node on the same host as a data node is a single point of failure)…

Next step is to run a MySQL Server so that I can actually test the Cluster – if I tried running that on the Pi then it caused problems (157 Mbytes of RAM doesn’t stretch as far as it used to) – on ws2:

OK – so is there any real application to this? Well, probably not other than providing a cheap development environment – imagine scaling out to 48 data nodes, that would cost $1,680 (+ the cost of some SD cards)! More practically might be management nodes – we know that they need very few resources. As a reminder – this is not a supported platform!

You can increase the RAM available by replacing the the boot.elf with one of the others in the same directory. By default 128MB will be assigned to the video chip set, by replacing the boot.elf you can knock this down to 32MB giving you ~224MB system memory.

[…] parallel computing cluster (Bramble discussion thread) and there’s already a project for a Raspberry Pi based MySQL Cluster which sounds like a great idea for scenarios with lots of little MySQL databases. Thanks for rating […]

Did some more digging, and this turns out to be the “memory barrier” assembly functions, wich are only defined for the x86 architecture. w and r stand for write and read respectively.
I got around the problem by bascially commenting out these calls in the mt.cpp . Not sure how stable/reliable this will make the ndb, but at least it compiled and it is working.

Hi Sebastian,
Forgot which version it was, but it was ndb. It was stable for basic playing around. I didn’t invest more time into it due to low RAM on the PI.
However, I just picked up 10 PI 2s, so will try to do 8 node cluster (paired with another 8 nodes on the xen for redundancy)
I currently use 2×4 set up with 4 old laptops (1GB ram each) and 4 VMs. PI 2s come with 1GB or ram so might get somewhere with that.