Skip to the content.

Deploying MogileFS manually for test

Want to play with the MogileFS API? Want to help write code, test patches, fix bugs? Follow the guide below to quickly build a test instance.

Assuming you have a Debian, Ubuntu, or Redhat-y system. OS X will be similar but has some missing steps. For a more complete guide on how to set up an install of MogileFS, refer to the InstallHowTo

No attempts to time this guide have actually been made; YMMV.

Howto

Add a new local user and log into it

adduser mogilefs
# ...etc...
su - mogilefs
$

Use App::cpanminus to quickly bootstrap locally installed perl modules. (note: you might need to add –no-certificate-check if you have a buggy version of wget)

wget -O- http://cpanmin.us | perl - local::lib
PERL5LIB="/home/`whoami`/perl5/lib/perl5" perl -Mlocal::lib >> ~/.bashrc
source ~/.bashrc

Install libdbd-mysql-perl (debian) or DBD::mysql via yum. This is needed even if you’re not using MySQL.

apt-get install libdbd-mysql-perl
... or ...
yum install perl(DBD::mysql)

Gas up cpanm again to pull in all dependencies for MogileFS. Read the output carefully in case of any build failures.

cpanm IO::AIO MogileFS::Server MogileFS::Client MogileFS::Utils

Save this script as mogstoreds.sh. Edit anything necessary. It is for starting and stopping a set of test mogstored’s. For convenience in testing replication, the HOSTS example below splits them into the space of two /24’s.

cat > mogstoreds.sh <<END
#!/bin/bash

BASEDIR="/home/mogilefs/mogdata/"
PERL5LIB="$PERL5LIB"
MOGSTORED="mogstored"

HOSTS="127.0.0.20 127.0.0.25 127.0.15.5 127.0.15.10"

if [ $1 = "start" ] ; then
    echo "Starting a few mogstored's"
    for host in $HOSTS ; do
        echo "starting host $host"
        $MOGSTORED -d --httplisten $host:7500 --mgmtlisten $host:7501 \
            --docroot ${BASEDIR}${host}
    done
elif [ $1 = "stop" ] ; then
    echo "Stopping mogstored's"
    for host in $HOSTS ; do
        echo "shutdown" | nc $host 7501
    done
fi
END
$ chmod +x mogstoreds.sh

Pre-make some directories and data

mkdir -p \
  mogdata/{127.0.0.20/{dev1,dev2},127.0.0.25/{dev3,dev4},127.0.15.5/{dev5,dev6},127.0.15.10/{dev7,dev8}}

Install sysstat if you’d like (provides iowait stats)

apt-get install sysstat

Prepare a database, and install it via mogdbsetup. Tune the below if you know better. Run mogdbsetup --help for full options.

mysql> CREATE DATABASE mogilefs; GRANT ALL PRIVILEGES ON mogilefs.* TO \
'mogile'@'%' IDENTIFIED BY 'mogilepass';
# I don't know postgres very well ;)
mogdbsetup --dbhost=127.0.0.1 --dbname=mogilefs --dbuser=mogile \
--dbpass=mogilepass
# Follow any dialogs.

Prepare a tracker configuration.

cat > mogtracker.conf <<END
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = mogile
db_pass = mogilepass
listen = 127.0.1.5:7001
query_jobs = 2
delete_jobs = 1
replicate_jobs = 1
reaper_jobs = 1
fsck_jobs = 1
rebalance_ignore_missing = 1
END

Fire up some mogstored’s.

./mogstoreds.sh start

Fire up a mogilefs tracker. Recommend for testing that you run it in the foreground, or in a screen session, so you can quickly and easily see errors.

mogilefsd --config=./mogtracker.conf

Create a client utility configuration file.

echo "trackers = 127.0.1.5:7001
domain = toast" >> ~/.mogilefs.conf

Add the mogtracker hosts and devices

mogadm host add nearone --ip=127.0.0.20 --status=alive
mogadm host add neartwo --ip=127.0.0.25 --status=alive
mogadm host add farone --ip=127.0.15.5 --status=alive
mogadm host add fartwo --ip=127.0.15.10 --status=alive
mogadm device add nearone 1
mogadm device add nearone 2
mogadm device add neartwo 3
mogadm device add neartwo 4
mogadm device add farone 5
mogadm device add farone 6
mogadm device add fartwo 7
mogadm device add fartwo 8

Create a domain to test with

mogadm domain add toast

Wait a few seconds, then see if everything checks out

mogadm check

Try mogupload‘ing something

echo "Hello, world" | mogupload --key="/hellothere" --file="-"

mogfetch it back

mogfetch --key="/hellothere" --file="-"

Yay, congrats!