Ceph, oder: <insert cute text>

Zu OpenStack gehört auch irgendwie Storage. Im Testaufbau lungert ein MSA mit mehreren TB, die Cinder & Co. nutzen könnten; aber Ceph klingt einfach zu verlockend, es nicht mal anzutesten …

Wie so viele aktuelle Projekte, ist es auch bei Ceph mit der Dokumentation eher etwas dünn; ich danke daher u. a. Oliver Fuckner für seinen Blogpost dazu.

In meiner Resterampe finden sich fünf Blades mit 300 GB (RAID-1), das sollte doch schon mal zum Start reichen, der Rest hat 73 GB HDDs (ja, nicht ganz taufrische HW), also präpariere ich die 300er mal für Ceph — 200 GB für Ceph ergeben ungefähr je 70 GB/Server für OS & Ephemeral:

ksiering@ysabell:~$ for i in 1 3 6 10 12 ; do ssh  -A root@10.99.2.$i uname -n \; yum -y install http://ceph.com/rpm/el6/noarch/ceph-release-1-0.el6.noarch.rpm \; yum -y install ceph-deploy python-pushy ; done

Das installiert auf CentOS 6.4 aktuell folgendes:

================================================================================
 Package                Arch        Version              Repository        Size
================================================================================
Installing:
 ceph-deploy            noarch      1.3.3-0              ceph-noarch      175 k
Installing for dependencies:
 python-argparse        noarch      1.2.1-2.el6          ceph-noarch       48 k
 python-setuptools      noarch      0.6.10-3.el6         Base             336 k

FTR, das Ganze findet in einer RDO-Umgebung statt, d. h. die Ceph-Nodes werden später auch Compute-Nodes sein.

Nächster Schritt: User für Ceph anlegen:

ksiering@ysabell:~$ for i in 1 3 6 10 12 ; do ssh  -A root@10.99.2.$i uname -n \; useradd -d /home/ceph -m ceph \; mkdir /home/ceph/.ssh \; chmod 700 /home/ceph/.ssh \; echo \>/home/ceph/.ssh/authorized_keys "ssh-dss [key] ceph_provisioning" \; chmod 600 /home/ceph/.ssh/authorized_keys \; chown -R ceph:ceph /home/ceph/.ssh \; echo \"ceph ALL = \(root\) NOPASSWD:ALL\" \> /etc/sudoers.d/ceph \; chmod 0440 /etc/sudoers.d/ceph \; echo \"Defaults:ceph \!requiretty\" \>\> /etc/sudoers ; done

Danach klappt’s dann auch mit dem Nachbarn:

ksiering@ysabell:~$ for i in 1 3 6 10 12 ; do ssh  -A ceph@10.99.2.$i uname -n \; sudo id ; done | sed -e 's/bc04bl/node/g'
node01
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
node03
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
node06
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
node10
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
node12
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Brute force; aber mit ssh-copy-id bräuchte ich erst mal ein Password für den ceph-User, was ich eigentlich gar nicht möchte …

Bis zu einem bestimmten Zeitpunkt lief das auch gut — aber das Anlegen von Ceph-Daten in einem LVM ist offensichtlich mehr als experimentell :-(

[ceph_deploy.osd][DEBUG ] Preparing host noce12 disk /dev/vg00/ceph journal None activate True
[node12][INFO  ] Running command: sudo ceph-disk-prepare --fs-type xfs --cluster ceph -- /dev/vg00/ceph
[node12][WARNIN] INFO:ceph-disk:Will colocate journal with data on /dev/vg00/ceph
[node12][WARNIN] Could not create partition 2 from 2097153 to 2097152
[node12][WARNIN] Error encountered; not saving changes.
[node12][WARNIN] ceph-disk: Error: Command '['sgdisk', '--new=2:0:1024M', '--change-name=2:ceph journal', '--partition-guid=2:1eaf2a81-3f2a-4c60-9d50-849718af28cd', '--typecode=2:45b0969e-9b03-4f30-b4c6-b4b80ceff106', '--', '/dev/vg00/ceph']' returned non-zero exit status 4
[node12][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.osd][ERROR ] Failed to execute command: ceph-disk-prepare --fs-type xfs --cluster ceph -- /dev/vg00/ceph
[ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs

Hintergrund: hier installiert man i. d. R. eine kleine /boot-Partition, der Rest ist ein LVM. Das hat den Vorteil, daß alle /-Partitionen gleich groß sind und auf dem gleichen Device liegen – und die Root-Partition ggf. unkompliziert vergrößert werden kann. Tut nur leider nicht mit Ceph, ergo muß das Partitionsformat geändert werden — und damit erneut die 16 Blades (naja, eigentlich nur die 5 Ceph-Nodes) neu aufgesetzt werden. »Mal eben schnell« Ceph antesten fällt also flach :( Tendentiell verstehen kann ich es ja immerhin; LVM ist letztlich auch eine Virtualisierungstechnik, und davon braucht man aus Gründen der Performance nicht zwingend mehrere übereinander …