… und das ganz einfach.
Um Ceph auf das System zu bekommen kann man sich die fertigen Pakte von Ceph.com holen. Bei mir die Aktuellen, mittlerweile 0.67.1, Dumpling Packete
wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add - echo deb http://ceph.com/debian-dumpling/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
Damit ist die Paketquelle für Apt bekannt. Ein
apt-get update && apt-get upgrade
bringt das System auf den neuen Stand. Um Ceph zu Installieren kommt jetzt
apt-get install ceph ceph-deploy
Das Paket ceph-deploy ist für das erzeugen des Clusters und damit den Deploy der Maschinen zuständig.
Als nächstes muss man dafür sorgen das die OSD´s, also Festplatten, vorbereitet werden. Dazu müssen die ausgewählten Platten nur eine Normale Partition haben. Diese werden dann später von Ceph beim Deploy entsprechend in die Verzeichnisstruktur von Ceph eingehängt.
Dann geht es an´s erzeugen der Ceph Konfiguration.
[global] ; use cephx or none auth supported = cephx auth cluster required = cephx auth service required = cephx auth client required = cephx keyring = /etc/ceph/keyring.admin [mon] [mon.1] host = node01 mon addr = 192.168.3.12:6789 [mon.2] host = node02 mon addr = 192.168.3.13:6789 [mon.3] host = node03 mon addr = 192.168.3.14:6789 [mds] [mds.1] host = node01 [mds.2] host = node02 [mds.3] host = node03 [osd] osd journal = /var/lib/ceph/journal/osd.$id.journal ;only if you want put journal on a dedicated disk, like ssd osd journal size = 100 ; uncomment the following line if you are mounting with ext4 ; filestore xattr use omap = true ; uncomment if you want journal on tmpfs ;journal dio = false osd mkfs type = xfs osd mkfs options xfs = "-f" osd mount options xfs = "rw,noatime,inode64,logbufs=8,logbsize=256k" [osd.10] host = node01 addr = 192.168.3.12 devs = /dev/sdb1 [osd.11] host = node01 addr = 192.168.3.12 devs = /dev/sdc1 [osd.20] host = node02 addr = 192.168.3.13 devs = /dev/sdb1 [osd.21] host = node02 addr = 192.168.3.13 devs = /dev/sdc1 [osd.30] host = node03 addr = 192.168.3.14 devs = /dev/sdb1 [osd.31] host = node03 addr = 192.168.3.14 devs = /dev/sdc1
Wie man sieht besteht der Ceph Cluster aus drei Nodes, auf jeder Node läuft ein MON, ein MDS und zwei OSD´s mit je 8 GB. Somit sind alle Nodes im Cluster auch gleichzeitig Monitore und Metadaten Speicher. Damit können Theoretisch zwei Nodes weg brechen ohne die Daten zu gefährden.
Um sich die Sache mit den OSD´s einfach zu machen nimmt man die Pfade der Platten direkt mit in die Konfiguration auf, ansonsten müsste man das manuell über die Fstab machen, was gerade bei vielen OSD´s zu fehlern führen kann. Ausserdem hat es den Vorteil das Ceph in dieser Konstellation alle benötigten Verzeichnisse beim Deploy mit anlegt und das Einhängen der Platten automatisch nach dem anlegen des Dateisystems erledigt.
Wie man sieht nutze ich XFS, aber auf den Performanceseiten von Ceph hat BTRFS beim schreiben eigentlich immer die Nase vorn, was bei großen Nodes bzw. Clustern schon einen entscheidenden Unterschied machen kann, zum Testen mit VirtualBox reicht mir aber XFS.
Als nächstes sollte auf jedenfall der NTP laufen damit alle Nodes im Cluster die gleiche Uhrzeit haben, sollte das nicht der Fall sein fängt Ceph an zu meckern und der Cluster bleibt stehen, was den Supergau darstellt. Im ceph.log findet man dann solche Einträge:
....[WRN] message from mon.0 was stamped 0.106686s in the future, clocks not synchronized
Um alle Systeme gleichzeitig nach der Uhrzeit zu fragen kann man diese Schleife auf der Console nutzen:
for i in node01 node02 node03; do ssh root@$i date; done
Damit sieht man auf einen Schlag alle Uhrzeiten aller Nodes. Wichtig ist das hier mit SSH Schlüsseln gearbeitet wird die Ceph benötigt um die Konfigurationen und passenden Verzeichnisse anzulegen. Hier im Test Cluster hab ich mir die Arbeit einfach gemacht und einfach mit
ssh-keygen -t rsa
einen Schlüssel erzeugt und diesen dann per
scp .ssh/id_rsa.pub node02:.ssh/authorized_keys2 scp .ssh/id_rsa.pub node03:.ssh/authorized_keys2
auf die anderen Nodes verteilt. In einem Produktiv Cluster ist das natürlich ein KO Kriterium, für solche Dinge nimmt man dann einen eigenen User der kein Passwort für den ssh Login hat und eben alles nur über ssh Keys macht.
Um Ceph nun zum Leben zu erwecken nutzt man
mkcephfs -a -c /etc/ceph/ceph.conf -k ceph.keyring
was alle OSD´s auf ALLEN beteiligten Nodes mit XFS Formatiert und auch Automatisch in die Ceph Ordnerstruktur einbindet. Des Weiteren wird auch die ceph.conf kopiert was alles über SSH mit den Pub Keys läuft. Mit den neuen Versionen von Ceph wird mkcephfs aber durch ceph-deploy ersetzt.