Ceph, ES lebt…..

… 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.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.