{"id":88,"date":"2013-05-18T19:58:01","date_gmt":"2013-05-18T17:58:01","guid":{"rendered":"http:\/\/blog.roellig-it.de\/?p=88"},"modified":"2015-12-07T00:25:31","modified_gmt":"2015-12-06T23:25:31","slug":"ceph-es-lebt","status":"publish","type":"post","link":"https:\/\/blog.roellig-it.de\/index.php\/2013\/05\/18\/ceph-es-lebt\/","title":{"rendered":"Ceph, ES lebt&#8230;.."},"content":{"rendered":"<p>&#8230; und das ganz einfach.<\/p>\n<p>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<\/p>\n<pre>wget -q -O- 'https:\/\/ceph.com\/git\/?p=ceph.git;a=blob_plain;f=keys\/release.asc' | sudo apt-key add -\r\necho deb http:\/\/ceph.com\/debian-dumpling\/ $(lsb_release -sc) main | sudo tee \/etc\/apt\/sources.list.d\/ceph.list<\/pre>\n<p>Damit ist die Paketquelle f\u00fcr Apt bekannt. Ein<\/p>\n<pre>apt-get update &amp;&amp; apt-get upgrade<\/pre>\n<p>bringt das System auf den neuen Stand. Um Ceph zu Installieren kommt jetzt<\/p>\n<pre>apt-get install ceph ceph-deploy<\/pre>\n<p>Das Paket ceph-deploy ist f\u00fcr das erzeugen des Clusters und damit den Deploy der Maschinen zust\u00e4ndig.<\/p>\n<p>Als n\u00e4chstes muss man daf\u00fcr sorgen das die OSD\u00b4s, also Festplatten, vorbereitet werden. Dazu m\u00fcssen die ausgew\u00e4hlten Platten nur eine Normale Partition haben. Diese werden dann sp\u00e4ter von Ceph beim Deploy entsprechend in die Verzeichnisstruktur von Ceph eingeh\u00e4ngt.<\/p>\n<p>Dann geht es an\u00b4s erzeugen der Ceph Konfiguration.<\/p>\n<pre>[global]\r\n       ; use cephx or none\r\n       auth supported = cephx\r\n\r\n       auth cluster required = cephx\r\n       auth service required = cephx\r\n       auth client required = cephx\r\n\r\n       keyring = \/etc\/ceph\/keyring.admin\r\n\r\n[mon]\r\n\r\n[mon.1]\r\n       host = node01\r\n       mon addr = 192.168.3.12:6789\r\n\r\n[mon.2]\r\n       host = node02\r\n       mon addr = 192.168.3.13:6789\r\n\r\n[mon.3]\r\n       host = node03\r\n       mon addr = 192.168.3.14:6789\r\n\r\n[mds]\r\n\r\n[mds.1]\r\n       host = node01\r\n\r\n[mds.2]\r\n       host = node02\r\n\r\n[mds.3]\r\n       host = node03\r\n\r\n[osd]\r\n       osd journal = \/var\/lib\/ceph\/journal\/osd.$id.journal  ;only if you want put journal on a dedicated disk, like ssd\r\n       osd journal size = 100\r\n\r\n       ; uncomment the following line if you are mounting with ext4\r\n       ; filestore xattr use omap = true\r\n\r\n       ; uncomment if you want journal on tmpfs\r\n       ;journal dio = false\r\n       osd mkfs type = xfs\r\n       osd mkfs options xfs = \"-f\"\r\n       osd mount options xfs = \"rw,noatime,inode64,logbufs=8,logbsize=256k\"\r\n\r\n[osd.10]\r\n       host = node01\r\n       addr = 192.168.3.12\r\n       devs = \/dev\/sdb1\r\n\r\n[osd.11]\r\n       host = node01\r\n       addr = 192.168.3.12\r\n       devs = \/dev\/sdc1\r\n\r\n[osd.20]\r\n       host = node02\r\n       addr = 192.168.3.13\r\n       devs = \/dev\/sdb1\r\n\r\n[osd.21]\r\n       host = node02\r\n       addr = 192.168.3.13\r\n       devs = \/dev\/sdc1\r\n\r\n[osd.30]\r\n       host = node03\r\n       addr = 192.168.3.14\r\n       devs = \/dev\/sdb1\r\n\r\n[osd.31]\r\n       host = node03\r\n       addr = 192.168.3.14\r\n       devs = \/dev\/sdc1<\/pre>\n<p>Wie man sieht besteht der Ceph Cluster aus drei Nodes, auf jeder Node l\u00e4uft ein MON, ein MDS und zwei OSD\u00b4s mit je 8 GB. Somit sind alle Nodes im Cluster auch gleichzeitig Monitore und Metadaten Speicher. Damit k\u00f6nnen Theoretisch zwei Nodes weg brechen ohne die Daten zu gef\u00e4hrden.<\/p>\n<p>Um sich die Sache mit den OSD\u00b4s einfach zu machen nimmt man die Pfade der Platten direkt mit in die Konfiguration auf, ansonsten m\u00fcsste man das manuell \u00fcber die Fstab machen, was gerade bei vielen OSD\u00b4s zu fehlern f\u00fchren kann. Ausserdem hat es den Vorteil das Ceph in dieser Konstellation alle ben\u00f6tigten Verzeichnisse beim Deploy mit anlegt und das Einh\u00e4ngen der Platten automatisch nach dem anlegen des Dateisystems erledigt.<\/p>\n<p>Wie man sieht nutze ich XFS, aber auf den <a href=\"http:\/\/ceph.com\/community\/ceph-performance-part-2-write-throughput-without-ssd-journals\/\" target=\"_blank\">Performanceseiten<\/a> von Ceph hat BTRFS beim schreiben eigentlich immer die Nase vorn, was bei gro\u00dfen Nodes bzw. Clustern schon einen entscheidenden Unterschied machen kann, zum Testen mit VirtualBox reicht mir aber XFS.<\/p>\n<p>Als n\u00e4chstes sollte auf jedenfall der NTP laufen damit alle Nodes im Cluster die gleiche Uhrzeit haben, sollte das nicht der Fall sein f\u00e4ngt <a href=\"http:\/\/www.mail-archive.com\/ceph-devel@vger.kernel.org\/msg00505.html\" target=\"_blank\">Ceph an zu meckern und der Cluster bleibt stehen<\/a>, was den Supergau darstellt. Im ceph.log findet man dann solche Eintr\u00e4ge:<\/p>\n<pre>....[WRN] message from mon.0 was stamped 0.106686s in the future, clocks not synchronized<\/pre>\n<p>Um alle Systeme gleichzeitig nach der Uhrzeit zu fragen kann man diese Schleife auf der Console nutzen:<\/p>\n<pre> for i in node01 node02 node03; do ssh root@$i date; done<\/pre>\n<p>Damit sieht man auf einen Schlag alle Uhrzeiten aller Nodes. Wichtig ist das hier mit SSH Schl\u00fcsseln gearbeitet wird die Ceph ben\u00f6tigt um die Konfigurationen und passenden Verzeichnisse anzulegen. Hier im Test Cluster hab ich mir die Arbeit einfach gemacht und einfach mit<\/p>\n<pre>ssh-keygen -t rsa<\/pre>\n<p>einen Schl\u00fcssel erzeugt und diesen dann per<\/p>\n<pre>scp .ssh\/id_rsa.pub node02:.ssh\/authorized_keys2\r\nscp .ssh\/id_rsa.pub node03:.ssh\/authorized_keys2<\/pre>\n<p>auf die anderen Nodes verteilt. In einem Produktiv Cluster ist das nat\u00fcrlich ein KO Kriterium, f\u00fcr solche Dinge nimmt man dann einen eigenen User der kein Passwort f\u00fcr den ssh Login hat und eben alles nur \u00fcber ssh Keys macht.<\/p>\n<p>Um Ceph nun zum Leben zu erwecken nutzt man<\/p>\n<pre>mkcephfs -a -c \/etc\/ceph\/ceph.conf -k ceph.keyring<\/pre>\n<p>was alle OSD\u00b4s 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 \u00fcber SSH mit den Pub Keys l\u00e4uft. Mit den neuen Versionen von Ceph wird mkcephfs aber durch ceph-deploy ersetzt.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; 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- &#8218;https:\/\/ceph.com\/git\/?p=ceph.git;a=blob_plain;f=keys\/release.asc&#8216; | sudo apt-key add &#8211; 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\u00fcr Apt bekannt. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.roellig-it.de\/index.php\/2013\/05\/18\/ceph-es-lebt\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eCeph, ES lebt&#8230;..\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-88","post","type-post","status-publish","format-standard","hentry","category-storage"],"_links":{"self":[{"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/posts\/88","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/comments?post=88"}],"version-history":[{"count":1,"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/posts\/88\/revisions"}],"predecessor-version":[{"id":239,"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/posts\/88\/revisions\/239"}],"wp:attachment":[{"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/media?parent=88"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/categories?post=88"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.roellig-it.de\/index.php\/wp-json\/wp\/v2\/tags?post=88"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}