System Installation

Example of a single machine's hardware and software installation

Hardware CPU: Intel(R) Xeon CPU E5630 @ 2.53Ghz (8 cores) RAM: DDR3 19GB NIC: Dual GbE Intel Pro PCIe cards (Channel bonding mode 0 (RR) or 4 (LACP))

Software OS: Ubuntu 10.04 LTS x64 / OpenSUSE 11.3 x64

  • username: aaa * hostname: ss1 * IP address: * netmask: * gateway: *"

It is highly recommended to disable sudo passwords for our experiments. In the Terminal, type sudo visudo

Find the three lines starting with root, %sudo and %admin, and then replace with the following lines respectively.


Now set the network via the /etc/resolv.conf, /etc/hosts, /etc/network/interface files:



/etc/hosts   localhost   ss1 p5e  #DongJin's machine

# Super-Storage Systems # ss1  #Storage machine 1 - OSD (3U) ss2  #Storage machine 2 - OSD (3U) ss3  #Monitor / MDS machine (2U) ss4  #Client machine (2U)

# Low-Power Systems # lp0  #Monitor / MDS machine (Micro1U SuperMicro) lp1  #Storage machine 1 - OSD (Gigabyte D525TUD) lp2  #Storage machine 2 - OSD (Gigabyte D525TUD) lp3  #Storage machine 3 - OSD (Gigabyte D525TUD) lp4  #Storage machine 4 - OSD (Gigabyte D525TUD) lp5  #Storage machine 5 - OSD (Gigabyte D525TUD) lp6  #Storage machine 6 - OSD (Gigabyte D525TUD)

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts


auto lo
iface lo inet loopback

auto bond0
iface bond0 inet static
mtu 9000
bond-slaves eth0 eth1
bond-mode 0
bond-miimon 100   

auto eth0
iface eth0 inet static
bond-master bond0
bond-primary eth0 eth1

auto eth1
iface eth1 inet static
bond-master bond0
bond-primary eth0 eth1
and restart the networking:

sudo /etc/init.d/networking restart

Preliminarily packages

Following packages should be installed:

  • git (for retrieving and updating Ceph repository)
  • ifenslave 2.6 (channel bonding)
  • bmon (monitoring the individual NICs for checking / estimating the rate)
  • sysinfo (system information)
  • mdadm (RAID)
  • sysstat (iostat)
  • iperf (traffic sending/receiving, useful for finding bottleneck/bandwidth)
  • ssh (ssh)
  • wireshark (capturing packets,etc)
  • traceroute (checking packet routes)
  • dia (for drawing system diagrams)
  • libgtkmm (for Ceph GUI)

Finally check that the system is running as expected - check if the bonding is working correctly, use iperf to test throughputs are expected (i.e., 1Gb/s, 2Gb/s) are observed. - Also check bonding as shown below.

aaa@ss1:~$ cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.0 (June 2, 2010)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:25:90:18:14:80
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Link Failure Count: 3
Permanent HW addr: 00:25:90:18:14:81
Slave queue ID: 0

Setting up ssh (no) password

Since the system will use ssh and scp operations in many scripts, it is recommended to bypass the ssh password: this is done by using public/private keying.

As an example, if ss4 (Ceph Client) wants to access for ssh/scp to ss1 (Ceph OSD), then ss4 first needs to have its own 'public-key' stored in ss1.

The quickest way is to generate private/public key from ss4, copy the public-key to ss1, as below.

aaa@ss4:~$ ssh-keygen -t rsa
There's no need to enter pass-phrase when asked (just type enter twice). The command generates two files (private + public keys) that are stored in the /home/aaa/.ssh/ directory. Now simply type as below to copy the ss3's public key to ss1
aaa@ss4:~$ ssh-copy-id ss1

Type 'yes' when it ask to store the address into 'known-hosts' list. Vice versa if ss1 would like to access ss4. (At this stage, our client)

Also it is important to make sure that the username is explicitly stated if both systems use different username. In the above example, there was no need to state aaa@ss1 because both systems use the same username. If you want to access system such as mike@bb1, from ss4, then you need to make sure to enter full name; mike@bb1 every time. Without typing the username, it will try to to access as aaa@bb1 which bb1 does not have (yet, unless you separately create one).

OpenSUSE 11.3 System configuration

We also use OpenSUSE as our OS. It uses RPM packages instead of DEB. The configurations are similar but some differences are found. See below.

  • No longer user name 'aaa' -- for simplicity, all are 'root' with super-user privilege, making it easier for the ceph configurations (but be careful!)
  • Configuring the NIC and Bond0 (follow the GUI) --> much more reliable bonding than Debian (it is less error-prone)
Instead of a single file with all of the NIC /etc/network/interfaces (Debian/Ubuntu), openSUSE uses each NIC name in a separate file.

For example, configuring eth0, etc/sysconfig/network/ifcfg-eth0

ETHTOOL_OPTIONS='-K eth2 rx off tx off sc off tso off udo off gso on'
NAME='RTL8111/8168B PCI Express Gigabit Ethernet controller'

Also, the gateway address is in a separate file, /etc/sysconfig/network/routes

default - eth2

And lastly, /etc/HOSTNAME is a capital (the hostname),

Tuning Networks

For OpenSuSe

sysctl -a | egrep 'rmem|wmem|tcp_congestion|reordering|metrics' | egrep -v 'default|udp|lowmem'

copy the following linesto "/etc/sysctl.conf"

net.ipv4.tcp_reordering = 20
net.ipv4.tcp_wmem = 8192 87380 16777216
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_congestion_control = cubic
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216

and finally (re)start the sysctl,

sysctl -p /etc/sysctl.conf
Refer to
Topic revision: r1 - 2011-09-15 - DongJinLee
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback