{"id":894,"date":"2022-01-04T12:22:44","date_gmt":"2022-01-04T11:22:44","guid":{"rendered":"https:\/\/informatik.htwk-leipzig.de\/seminar\/?p=894"},"modified":"2022-02-28T19:00:24","modified_gmt":"2022-02-28T18:00:24","slug":"glusterfs","status":"publish","type":"post","link":"https:\/\/informatik.htwk-leipzig.de\/seminar\/lehrveranstaltungen\/betriebliche-informationssysteme\/2022\/glusterfs\/","title":{"rendered":"GlusterFS"},"content":{"rendered":"<h1><b>Was<\/b>\u00a0ist<b> Gluster FS<\/b><\/h1>\n<p>GlusterFS ist ein verteiltes, beliebig skalierbares Dateisystem, das Speicherelemente von mehreren Servern in einem einheitlichen Dateisystem zusammenfasst.<\/p>\n<p>Webseite:\u00a0<a class=\"externallink\" title=\"https:\/\/www.gluster.org\" href=\"https:\/\/www.gluster.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.gluster.org<\/a><\/p>\n<h2>Funktionsweise<\/h2>\n<ul>\n<li>ein Server (Node) kann in physischer Form als Server oder Virtuelle Maschine eingebunden sein<\/li>\n<li>diese Server bilden einen Trusted Pool (Verbund vertrauensw\u00fcrdiger Server)<\/li>\n<li>Speicher wird in Form von Bricks (Bausteinen) zur Verf\u00fcgung gestellt<\/li>\n<li>auf denen Volumes (Laufwerke) gebildet werden<\/li>\n<li>ein PC kann sowohl Server als auch Client sein<\/li>\n<\/ul>\n<h2>Anwendungsm\u00f6glichkeiten<\/h2>\n<ul>\n<li>Netzwerk-RAID analog zum Festplatten-RAID (Redundant Array of Independent Disks)<\/li>\n<\/ul>\n<p>Zur Erinnerung werden die Gel\u00e4ufigsten im Nachfolgenden aufgelistet:<\/p>\n<ul>\n<li>RAID 0 (Striping)<\/li>\n<\/ul>\n<p>Festplatten werden zu einem Volumen verbunden, die Lese-\/Schreibzugriffe werden auf einzelne Speichermedien in Stripes verteilt. Daraus resultiert ein Geschwindigkeitszuwachs auf Kosten der Ausfallsicherheit.<\/p>\n<ul>\n<li>RAID 1 (Spiegelung)<\/li>\n<\/ul>\n<p>Bei RAID1 werden Kopien der Daten auf redundante Datentr\u00e4ger geschrieben. Die Nutzbare Kapazit\u00e4t reduziert sich dadurch bei Verwendung von 2 Festplatten um die H\u00e4lfte. Daf\u00fcr ist aber die Ausfallsicherheit durch das Vorhandensein der Spiegelung gegeben.<\/p>\n<ul>\n<li>RAID 5 (Striping + verteilte Parit\u00e4t)<\/li>\n<\/ul>\n<p>Dieses RAID-Verbund ben\u00f6tigt mindestens 3 Laufwerke, wobei die Daten abwechselnd auf Festplatten verteilt werden. Dabei werden auf einem zuf\u00e4lligen Datentr\u00e4ger die Parit\u00e4tsinformationen zur Rekonstruktion f\u00fcr den Fall eines Datentr\u00e4gerausfalls gespeichert. Bietet bessere Leistung und h\u00f6here Sicherheit gegen\u00fcber einer Festplatte. Speicherkapazit\u00e4t wird um eine Festplatte reduziert.<\/p>\n<ul>\n<li>RAID 10 (Striping + Spiegelung)<\/li>\n<\/ul>\n<p>Hier werden mindestens 4 Datentr\u00e4ger ben\u00f6tigt, welche dann verbunden werden, um die Vorteile des RAID 0 und RAID 1 zu kombinieren.<\/p>\n<h3>Betriebsmodi<\/h3>\n<ul>\n<li>Distributed Storage (verteilt)<\/li>\n<\/ul>\n<p>Ist dem RAID 0 \u00e4hnlich, allerdings werden die Files im Ganzen auf einzelne Bricks verteilt, beispielsweise nach Round Robin Prinzip<\/p>\n<ul>\n<li>Replicated Storage (gespiegelt)<\/li>\n<\/ul>\n<p>Die Daten werden analog zu RAID 1 auf einzelne Bausteine redundant verteilt. Allerdings ist hier auch ungerade Anzahl an Bricks m\u00f6glich, \u00e4hnlich wie bei RAID 1E<\/p>\n<ul>\n<li>Distributed Replicated Storage<\/li>\n<\/ul>\n<p>Stellt die Kombination der beiden oben genannten Modi dar. F\u00fcr die Verteilung ist der Translator verantwortlich.\u00a0 Es sind hier genauso Paare mit ungerader Anzahlen an Bricks m\u00f6glich. Des Weiteren l\u00e4sst sich hier die Geo-Replication einstellen.<\/p>\n<ul>\n<li>Dispersed Storage<\/li>\n<\/ul>\n<p>hat \u00c4hnlichkeit zu dem RAID 5, allerdings werden Fragmente statt Parit\u00e4tsinformationen zur Rekonstruktion auf alle Bricks verteilt (Erasure Coding). Beim Einstellen der 4+2 Konfiguration, k\u00f6nnen bis zu 2 Bricks\/Nodes ausfallen.<\/p>\n<ul>\n<li>Distributed Dispersed Storage<\/li>\n<\/ul>\n<p>Hier werden die Daten durch den Translator auf mehrere Dispersed Volumen nacheinander verteilt.<\/p>\n<h2><b>Vor- und Nachteile<\/b><\/h2>\n<p>Vorteile:<\/p>\n<ul>\n<li>Gute Auslastung vorhandener Kapazit\u00e4ten<\/li>\n<li>Erh\u00f6hung der Ausfallsicherheit<\/li>\n<li>Verteilung der Netzlast<\/li>\n<li>Sehr gute Skalierbarkeit<\/li>\n<\/ul>\n<p>Nachteile:<\/p>\n<ul>\n<li>Schaffung einer komplexeren Netzwerkstruktur<\/li>\n<li>Erh\u00f6hter administrativer Aufwand bei der Einrichtung<\/li>\n<li>Schnelle Netzwerkinfrastruktur n\u00f6tig<\/li>\n<li>Zus\u00e4tzlicher Aufwand zur technischen Absicherung<\/li>\n<\/ul>\n<h2><b>Alternativen<\/b><\/h2>\n<ul>\n<li>Ceph<\/li>\n<li>BeeGFS<\/li>\n<\/ul>\n<h2><b>Demo-System<\/b><\/h2>\n<p>Host: Dell Workstation Precision T7910<\/p>\n<ul>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"alignnone \" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/7\/74\/Arch_Linux_logo.svg\" alt=\"arch logo\" width=\"64\" height=\"19\" \/><\/li>\n<li>2x Intel E5-2640 v3 (8 Cores \/ 16 Threads)<\/li>\n<li>64 GB DDR4-RAM<\/li>\n<li>120 GB SSD<\/li>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"alignnone \" src=\"https:\/\/cdn.freebiesupply.com\/logos\/large\/2x\/virtualbox-logo-png-transparent.png\" width=\"70\" height=\"17\" \/><\/li>\n<\/ul>\n<p>VM&#8217;s:<\/p>\n<ul>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"alignnone \" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/9\/9d\/Ubuntu_logo.svg\" alt=\"ubuntu logo\" width=\"68\" height=\"16\" \/> 21.04<\/li>\n<li>11 Nodes<\/li>\n<li>1 vCores<\/li>\n<li>4096 MB RAM<\/li>\n<li>10 GB Space<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li>Windows 10<\/li>\n<li>1 Node<\/li>\n<li>4 vCores<\/li>\n<li>4096 MB RAM<\/li>\n<li>10 GB Space<\/li>\n<\/ul>\n<p>Zus\u00e4tzlich ben\u00f6tigte Software Pakete (Ubuntu):<\/p>\n<ul>\n<li>glusterfs-server<\/li>\n<li>samba<\/li>\n<\/ul>\n<p>Konfiguration:<\/p>\n<ul>\n<li>IP-Adressen<\/li>\n<li>hosts Datei<\/li>\n<li>Trusted Storage Pool (TSP)<\/li>\n<li>glusterFS Volumes<\/li>\n<\/ul>\n<h3>Detaillierte Node Konfiguration<\/h3>\n<p>IP-Adressen wurden wie folgt\u00a0festgelegt.<\/p>\n<ul>\n<li>node-01: 192.168.1.1<\/li>\n<li>node-02: 192.168.1.2<\/li>\n<li>&#8230;<\/li>\n<li>node-14: 192.168.1.14<\/li>\n<\/ul>\n<p>Bei allen Nodes (Ubuntu) die dem TSP beitreten sollen, wurden die Hosts mit ihren dazugeh\u00f6rigen IP-Adressen in der hosts Datei eingetragen.<\/p>\n<p>Beispiel node-01<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1351\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-01-hosts.png\" alt=\"\" width=\"268\" height=\"303\" \/><\/p>\n<h3>Erstellen der TSP<\/h3>\n<p>Um einen Node dem TSP hinzuzuf\u00fcgen muss der Befehl &#8220;sudo gluster peer probe node(Nummer)&#8220; f\u00fcr jeden Node ausgef\u00fchrt werden.<\/p>\n<p>Zur \u00dcberpr\u00fcfung der Konnektivit\u00e4t der Nodes wird &#8220;sudo gluster peer status&#8220; ausgef\u00fchrt.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1352\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-01-peer-status.png\" alt=\"\" width=\"353\" height=\"828\" \/><\/p>\n<h3>Erstellen der Volumes<\/h3>\n<p>Bevor die Volumes erstellt werden k\u00f6nnen muss noch die Ordnungsstruktur erzeugt werden. Dies wurde durch eines selbst erstellten Batch Skript realisiert. Folgende Ordnerstruktur ist dabei entsanden.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1354\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-01-tree.png\" alt=\"\" width=\"376\" height=\"268\" \/><\/p>\n<p>Danach k\u00f6nnen die Volumes erstellt und gestartet werden werden.<\/p>\n<p>sudo gluster volume create dist node0{1..2}:\/data\/glusterfs\/distributed\/brick<br \/>\nsudo gluster volume start dist<\/p>\n<p>sudo gluster volume create rep2 replica 2 transport tcp node0{3..4}:\/data\/glusterfs\/replicated-two\/brick<br \/>\nsudo gluster volume start rep2<\/p>\n<p>sudo gluster volume create rep2a replica 2 arbiter 1 transport tcp node0{3..5}:\/data\/glusterfs\/replicated-two\/bricka<br \/>\nsudo gluster volume start rep2a<\/p>\n<p>sudo gluster volume create rep3 replica 3 transport tcp node0{5..7}:\/data\/glusterfs\/replicated-three\/brick<br \/>\nsudo gluster volume start rep3<\/p>\n<p>sudo gluster volume create dist-rep2 replica 2 transport tcp node0{8..9}:\/data\/glusterfs\/distributed-replicated-two\/brick node1{0..1}:\/data\/glusterfs\/distributed-replicated-two\/brick<br \/>\nsudo gluster volume start dist-rep2<\/p>\n<p>sudo gluster volume create dist-rep2a replica 2 arbiter 1 transport tcp node0{7..9}:\/data\/glusterfs\/distributed-replicated-two\/bricka node1{0..2}:\/data\/glusterfs\/distributed-replicated-two\/bricka<br \/>\nsudo gluster volume start dist-rep2a<\/p>\n<p>sudo gluster volume create dist-rep3 replica 3 transport tcp node0{1..6}:\/data\/glusterfs\/distributed-replicated-three\/brick<br \/>\nsudo gluster volume start dist-rep3<\/p>\n<p>sudo gluster volume create disp disperse-data 4 redundancy 2 transport tcp node0{7..9}:\/data\/glusterfs\/dispersed\/brick node1{0..12}:\/data\/glusterfs\/dispersed\/brick<br \/>\nsudo gluster volume start disp<\/p>\n<p>sudo gluster volume create distdisp disperse-data 4 redundancy 2 transport tcp node01:\/data\/glusterfs\/distributed-dispersed\/brick1 node02:\/data\/glusterfs\/distributed-dispersed\/brick2 node03:\/data\/glusterfs\/distributed-dispersed\/brick3 node04:\/data\/glusterfs\/distributed-dispersed\/brick4 node05:\/data\/glusterfs\/distributed-dispersed\/brick5 node06:\/data\/glusterfs\/distributed-dispersed\/brick6 node07:\/data\/glusterfs\/distributed-dispersed\/brick7 node08:\/data\/glusterfs\/distributed-dispersed\/brick8 node09:\/data\/glusterfs\/distributed-dispersed\/brick9 node10:\/data\/glusterfs\/distributed-dispersed\/brick10 node11:\/data\/glusterfs\/distributed-dispersed\/brick11 node12:\/data\/glusterfs\/distributed-dispersed\/brick12<br \/>\nsudo gluster volume start distdisp<\/p>\n<p>Bei den Varianten mit zwei replica kann es zu so genannten &#8220;split-brain&#8220; Problem kommen. Probleml\u00f6sung ist die Verwendung von replica 3 oder die Nutzung von Arbiter. Siehe dazu: <a href=\"https:\/\/docs.gluster.org\/en\/latest\/Administrator-Guide\/Split-brain-and-ways-to-deal-with-it\/\">https:\/\/docs.gluster.org\/en\/latest\/Administrator-Guide\/Split-brain-and-ways-to-deal-with-it\/<\/a>\u00a0Zus\u00e4tzlich kann auch ein Server-seitiges &#8220;Quorum&#8220; f\u00fcr die Volumes festgelegt werden, welches Prozentual angibt wie viele Bricks online sein m\u00fcssen um das Volume schreibbar bereit zu stellen. Dies verhindert inkonsistente Datenst\u00e4nde.<\/p>\n<p>Beispielhafte \u00dcberpr\u00fcfung eines Volumes.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1356\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-01-vol-info-distdisp.png\" alt=\"\" width=\"494\" height=\"486\" \/><\/p>\n<h3>Einbinden und Bereitstellen der Volumes<\/h3>\n<p>Node-13 wurde dazu genutzt alle Volumes Lokal einzubinden und durch einen Samba Share f\u00fcr Windows Clients bereit zu stellen.<\/p>\n<p>sudo mount -t glusterfs node01:dist \/mnt\/glusterfs\/dist<br \/>\nsudo mount -t glusterfs node01:rep2 \/mnt\/glusterfs\/rep2<br \/>\nsudo mount -t glusterfs node01:rep2a \/mnt\/glusterfs\/rep2a<br \/>\nsudo mount -t glusterfs node01:rep3 \/mnt\/glusterfs\/rep3<br \/>\nsudo mount -t glusterfs node01:dist-rep2 \/mnt\/glusterfs\/dist-rep2<br \/>\nsudo mount -t glusterfs node01:dist-rep2a \/mnt\/glusterfs\/dist-rep2a<br \/>\nsudo mount -t glusterfs node01:dist-rep3 \/mnt\/glusterfs\/dist-rep3<br \/>\nsudo mount -t glusterfs node01:disp \/mnt\/glusterfs\/disp<br \/>\nsudo mount -t glusterfs node01:distdisp \/mnt\/glusterfs\/distdisp<\/p>\n<p>Ausgabe der Mountpunkte und Verzeichnisstruktur mit enthaltenen Dateien.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1362\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-13-df-mnt.png\" alt=\"\" width=\"659\" height=\"321\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1361\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-13-tree-mnt.png\" alt=\"\" width=\"340\" height=\"413\" \/><\/p>\n<p>Es erfolgt nun die Konfiguration der Samba Shares in der Datei &#8220;\/etc\/samba\/smb.conf&#8220;<\/p>\n<p>Beispielhafte Ausgabe:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1365\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-13-smb-conf.png\" alt=\"\" width=\"212\" height=\"200\" \/><\/p>\n<p>Damit ist das Einbinden der Samba Shares in Windows m\u00f6glich.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1364\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2022\/01\/node-14-win-mnt.png\" alt=\"\" width=\"501\" height=\"429\" \/><\/p>\n<h1>Fazit<\/h1>\n<p>Nach einer Kurzen Einlesephase in das GlusterFS Universum ist die Bedienung und Wartung des TSP und der Volumes keine Herausforderung mehr.<\/p>\n<p>Das System ist leicht zu bedienen, es kann sehr gut Skaliert werden. Die Ausfallsicherheit kann beliebig erh\u00f6ht werden. Die Netzwerklast wird besser Verteilt, welche auch ein Geschwindigkeitsvorteil mit sich bringt.<\/p>\n<p>Grenzen\u00a0 der Volumengr\u00f6\u00dfe wird durch das verwendete Dateisystem vorgegeben. Zum Beispiel ist bei ext4 die Obere Grenze 1 EiB welches 1024 PB entspricht, oder auch ZFS mit einer oberen Grenze von 16 EiB.<\/p>\n<p>Unterst\u00fctzung von GlusterFS auf Breiter Ebene, so ist die Verwendung von Windows, Linux und Mac als Endbenutzer Client m\u00f6glich. (MacOS nicht getestet, aber gelesen)<\/p>\n<p>Zu beachten ist das dabei eine komplexe Netzwerkstruktur geschaffen wird die einen erh\u00f6hten administrativen Aufwand schafft.<\/p>\n<h1>Quellen<\/h1>\n<p><a href=\"https:\/\/docs.gluster.org\/en\/latest\/Administrator-Guide\/\">https:\/\/docs.gluster.org\/en\/latest\/Administrator-Guide\/<\/a><\/p>\n<p><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_gluster_storage\/3.1\/html\/administration_guide\/index\">https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_gluster_storage\/3.1\/html\/administration_guide\/index<\/a><\/p>\n<p><a href=\"https:\/\/glusterdocs.readthedocs.io\/en\/latest\/Administrator%20Guide\/Setting%20Up%20Clients\/\">https:\/\/glusterdocs.readthedocs.io\/en\/latest\/Administrator%20Guide\/Setting%20Up%20Clients\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was\u00a0ist Gluster FS GlusterFS ist ein verteiltes, beliebig skalierbares Dateisystem, das Speicherelemente von mehreren Servern in einem einheitlichen Dateisystem zusammenfasst.<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"templates\/template-fullwidth.php","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[87,91,86,90,88,33,89,92],"class_list":["post-894","post","type-post","status-publish","format-standard","hentry","category-betriebliche-informationssysteme","tag-cloudstorage","tag-filesystem","tag-glusterfs","tag-nas","tag-nfs","tag-open-source","tag-raid","tag-skalierbar"],"_links":{"self":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/comments?post=894"}],"version-history":[{"count":40,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/894\/revisions"}],"predecessor-version":[{"id":1447,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/894\/revisions\/1447"}],"wp:attachment":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media?parent=894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/categories?post=894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/tags?post=894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}