Ceph Cluster unter Debian Wheezy installieren

Eine flexible Storage-Lösung wird in der heutigen Zeit immer wichtiger. Ich möchte euch in einem Quick-Guide die einfache Installation von Ceph unter Debian Wheezy vorstellen.

CephFS ist ein verteiltes Dateisystem, welches Teil der Software Ceph ist. Zusammen mit RADOS (englisch reliable autonomic distributed object store) handelt es sich um einen über beliebig viele Server redundant verteilbaren Objektspeicher (object store). Objekte sind beispielsweise Binärdateien, die Ceph zu einem über mehrere Geräte verteilten Blockgerät zusammenfassen kann.

Die Objekte werden repliziert gespeichert. Ceph kann den Ausfall von jeder Komponente auffangen und sich selbst heilen, das heißt, zerstörte Daten aus Replikaten auf anderen Speichermedien wiederherstellen.

Punkt 1: Vorbereitung der Umgebung

In diesem Tutorial verwende ich 3 virtuelle KVM Maschinen, wobei /dev/vda für das Betriebssystem und /dev/vdb für Ceph vorgesehen wird.
Die drei VM’s erhalten die Namen test1, test2 und test3. Dies hinterlegen wir zuallererst in der /etc/hosts.

10.10.20.11	test1.DOMAIN.de	test1
10.10.20.12	test2.DOMAIN.de	test2
10.10.20.13	test3.DOMAIN.de	test3

Nun installieren wir den NTP Dienst auf allen Nodes, damit das Cluster synchron in der Zeit läuft.

apt-get install ntp
/etc/init.d/ntp restart
[ ok ] Stopping NTP server: ntpd.
[ ok ] Starting NTP server: ntpd.

Um im nachfolgenden Schritt mit ceph-deploy arbeiten zu können, erstellen wir einen SSH-Key ohne Passphrase und verteilen diesen auf allen Nodes.
WICHTIG: Ceph-Deploy wird immer von einer Administrator Node und einem Ordner aus installiert und verwaltet. In meinem Fall ist es die Node test1 und der Ordner /root/.

ssh-keygen
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
rsync -r .ssh/ root@test2:.ssh/
rsync -r .ssh/ root@test3:.ssh/

Ich hatte mich der Aktualität halber mit Ceph Version 0.88 beschäftigt. Damit wir CephFS und RBD später einwandfrei nutzen können, brauchen wir mindestens den Linux Kernel 3.15. Diesen installieren wir über die Debian-Backports.

[..]
deb http://ftp.debian.org/debian/ wheezy-backports main contrib non-free
deb-src http://ftp.debian.org/debian/ wheezy-backports main contrib non-free

Installieren den Kernel und rebooten alle Nodes.

apt-get update
apt-get install -t wheezy-backports linux-image-amd64 linux-headers-amd64
reboot

Punkt 2: Installation von ceph-deploy

Nun sind alle 3 Nodes vorbereitet und per SSH untereinander ohne Passwortabfrage erreichbar. Die Installation von dem Ceph Admin-Tool kann beginnen.

wget http://ceph.com/debian-testing/pool/main/c/ceph-deploy/ceph-deploy_1.5.20~bpo70+1_all.deb
dpkg -i ceph-deploy_1.5.20~bpo70+1_all.deb

Punkt 3: Ceph Cluster anlegen

Auf unserer ersten Node test1 im Ordner /root/ beginnen wir nun mit der Erstellung unseres Ceph-Clusters.

test1:~# ceph-deploy new test1
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.20): /usr/bin/ceph-deploy new test1
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[test1][DEBUG ] connected to host: test1 
[test1][DEBUG ] detect platform information from remote host
[test1][DEBUG ] detect machine type
[test1][DEBUG ] find the location of an executable
[test1][INFO  ] Running command: /bin/ip link show
[test1][INFO  ] Running command: /bin/ip addr show
[test1][DEBUG ] IP addresses found: ['10.10.20.11']
[ceph_deploy.new][DEBUG ] Resolving host test1
[ceph_deploy.new][DEBUG ] Monitor test1 at 10.10.20.11
[ceph_deploy.new][DEBUG ] Monitor initial members are ['test1']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['10.10.20.11']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...

Es befindet sich nun die Master Konfigurationsdatei ceph.conf im Ordner /root/, die wir auch gleich um folgende Zeilen erweitern.

public_network = 10.10.20.0/24
cluster_network = 10.10.20.0/24
osd pool default size = 3
osd pool default min size = 1
osd pool default pg num = 128
osd pool default pgp num = 128

Das public_network ist für den Traffic vom Clienten zu den OSD’s und zurück, in meinem Fall das interne Netz 10.10.20.0/24. Das cluster_network ist alleine für die Kommunikation unter den OSD’s, MON’s und MDS’s zuständig. In diesem Tutorial ebenfalls das selbe interne Netz. Mehr könnt ihr in der offiziellen Dokumantion nachlesen.

Die osd pool default size von 3 bestimmt die Anzahl der Replicas, also wie oft ein Object in einem Cluster vorhanden sein soll. Default ist 3.
Die osd pool default min_size von 1 bestimmt die Anzahl von minimalen Rplicas die im Cluster vorhanden sein müssen. Sollte dieser Wert erreicht sein ist der Storage im Schutzmodus und nicht mehr beschreibbar. Default ist 2.

Die Kalkulation von Placement Groups ist ein etwas längeres Thema, wird hier jedoch gut beschrieben. Da wir ein Cluster von 3 OSD’s (je Node eine Festplatte = eine OSD) haben, stellen wir den pg_num Wert default auf 128.

Punkt 4: Ceph Installation

Jetzt kann Ceph auf allen 3 Nodes installiert werden, wieder über die Admin-Node test1.

test1:~# ceph-deploy install --testing test1 test2 test3

Der Zusatz –testing damit wir auf Version 0.88 kommen – ACHTUNG das könnte bei eurem Versuch eine andere Version sein.

test1:~# ceph -v
ceph version 0.88 (4be687bf4480474117f56c387febc75c904036be)

Punkt 5: MON Installation

In einem Rutsch installieren wir den MON Dienst auf allen 3 Nodes.

test1:~# ceph-deploy mon create-initial test1 test2 test3

Fügen die zwei IP-Adressen der Nodes test2 und test3 der /root/ceph.conf hinzu.

test1:~# cat ceph.conf
[global]
fsid = bf734b34-cc3b-4d58-92ce-fd094341d9ca
mon_initial_members = test1
mon_host = 10.10.20.11,10.10.20.12,10.10.20.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
public_network = 10.10.20.0/24
cluster_network = 10.10.20.0/24
osd pool default size = 3
osd pool default min size = 1
osd pool default pg num = 128
osd pool default pgp num = 128

Und verteilen die Konfiguration auf allen 3 Nodes.

test1:~# ceph-deploy --overwrite-conf admin test1 test2 test3

Punkt 6: OSD erstellen

Jetzt geht es an die Festplatten. Dies übernimmt praktischerweise auch ceph-deploy vollautomatisch für uns.
ACHTUNG: Es werden alle Daten auf /dev/vdb gelöscht!

test1:~# ceph-deploy osd --zap-disk create test1:/dev/vdb test2:/dev/vdb test3:/dev/vdb

Auf allen 3 Nodes sollten nun jeweils ein MON und ein OSD Dienst laufen.

root      4054  0.3  2.1 201700 21932 pts/0    Sl   14:17   0:00 /usr/bin/ceph-mon -i test1 --pid-file /var/run/ceph/mon.test1.pid -c /etc/ceph/ceph.conf --cluster ceph
root      4947  1.1  2.9 677984 30616 ?        Ssl  14:19   0:01 /usr/bin/ceph-osd -i 0 --pid-file /var/run/ceph/osd.0.pid -c /etc/ceph/ceph.conf --cluster ceph

Der Cluster Status sollte ebenfalls OK sein.

test1:~# ceph -s
    cluster 5ba3e91d-2954-4ddf-bbb5-f213778cdb10
     health HEALTH_OK
     monmap e3: 3 mons at {test1=10.10.20.11:6789/0,test2=10.10.20.12:6789/0,test3=10.10.20.13:6789/0}
            election epoch 6, quorum 0,1,2 test1,test2,test3
     osdmap e13: 3 osds: 3 up, 3 in
      pgmap v22: 64 pgs, 1 pools, 0 bytes data, 0 objects
            100 MB used, 66421 MB / 66521 MB avail
                  64 active+clean

Punkt 7: MDS installieren, CephFS mounten

Um CephFS nutzen zu können, benötigen wir einen MDS Dienst in unserem Cluster. Wir nehmen unsere Admin-Node test1 für diese Zwecke.

test1:~# ceph-deploy mds create test1
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.20): /usr/bin/ceph-deploy mds create test1
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts test1:test1
[test1][DEBUG ] connected to host: test1 
[test1][DEBUG ] detect platform information from remote host
[test1][DEBUG ] detect machine type
[ceph_deploy.mds][INFO  ] Distro info: debian 7.7 wheezy
[ceph_deploy.mds][DEBUG ] remote host will use sysvinit
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to test1
[test1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[test1][DEBUG ] create path if it doesn't exist
[test1][INFO  ] Running command: ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.test1 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-test1/keyring
[test1][INFO  ] Running command: service ceph start mds.test1
[test1][DEBUG ] === mds.test1 === 
[test1][DEBUG ] Starting Ceph mds.test1 on test1...
[test1][DEBUG ] starting mds.test1 at :/0

Das Filesystem benötigt ebenfalls einen Pool und eine kleine Vorbereitung. Das erledigen wir mit diesen wenigen Befehlen.

test1:~# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created

test1:~# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created

test1:~# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1

test1:~# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

test1:~# ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED 
    66521M     66413M         108M          0.16 
POOLS:
    NAME                ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd                 0         0         0        21291M           0 
    cephfs_data         1         0         0        21291M           0 
    cephfs_metadata     2      1902         0        21291M          20

Wir benötigen den Admin Key um das Filesystem mounten zu können. Alles nach ‚key =‚ wird benötigt.

test1:~# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
	key = AQBvanxUwiMEDRAA08/jUyiCPZ3D+QqfQl7MyA==

Wir erstellen das Verzeichnis /cephfs

mkdir /cephfs

… und editieren unsere /etc/fstab. Die IP-Adresse muss eine der 3 Monitoring Server sein, in diesem Beispiel ist es test1.

10.10.20.11:6789:/ /cephfs ceph name=admin,secret=AQBvanxUwiMEDRAA08/jUyiCPZ3D+QqfQl7MyA==,noatime 0 2

Zu guter Letzt mounten wir unser CephFS, die Fehlermeldung kann dabei ignoriert werden.

test1:~# mount /cephfs/
mount: error writing /etc/mtab: Invalid argument

Webinterface und Sonstiges

Als kleines Schmankerl könnt ihr ein kleines Webinterface namens Kraken installieren. Dies bietet eine kleine visuelle Darstellung eures Ceph Clusters.

https://github.com/krakendash/krakendash

Folgende Unterseiten der Dokumentation von Ceph könnten euch interessieren.

Alles über die Placement Groups: http://ceph.com/docs/master/rados/operations/placement-groups/
RBD Block Device erstellen: http://ceph.com/docs/master/start/quick-rbd/

Deinstallation

Wer Ceph entfernen möchte kann wie folgt vorgehen.

test1:~# ceph-deploy uninstall test1 test2 test3
test1:~# ceph-deploy purgedata test1 test2 test3
test1:~# ceph-deploy forgetkeys
test1:~# ceph-deploy purge test1 test2 test3

Ceph auf nur einer Node

Damit Ceph auf einer Node agieren kann müssen wir den folgenden Wert vor Cluster-Erstellung in der ceph.conf hinzufügen.

osd crush chooseleaf type = 0

Dieser Wert bewirkt, dass Ceph zwischen den OSD’s der lokalen Node repliziert und nicht auf remote Nodes.

Dominion

Dominion

Linux Systemadministrator

Schreibe einen Kommentar

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