NFS und GlusterFS hinzugefügt
This commit is contained in:
parent
c9d7190245
commit
aa47774798
@ -1,2 +1,2 @@
|
|||||||
zotac0 headnode
|
zotac0 headnode
|
||||||
zotac[1-4] computenode
|
zotac[1-4] computenodes
|
||||||
|
31
aufgabe3.3/benchmark.txt
Normal file
31
aufgabe3.3/benchmark.txt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Writing
|
||||||
|
$ dd bs=1M count=512 if=/dev/zero of=/test conv=fdatasync
|
||||||
|
512+0 Datensätze ein
|
||||||
|
512+0 Datensätze aus
|
||||||
|
536870912 Bytes (537 MB) kopiert, 5,81494 s, 92,3 MB/s
|
||||||
|
|
||||||
|
$ dd bs=1M count=512 if=/dev/zero of=/cluster/test conv=fdatasync
|
||||||
|
512+0 Datensätze ein
|
||||||
|
512+0 Datensätze aus
|
||||||
|
536870912 Bytes (537 MB) kopiert, 13,9886 s, 38,4 MB/s
|
||||||
|
|
||||||
|
$ dd bs=1M count=512 if=/dev/zero of=/fastfs/test conv=fdatasync
|
||||||
|
512+0 Datensätze ein
|
||||||
|
512+0 Datensätze aus
|
||||||
|
536870912 Bytes (537 MB) kopiert, 9,43777 s, 56,9 MB/s
|
||||||
|
|
||||||
|
# Reading
|
||||||
|
$ dd bs=1M count=256 if=/fastfs/test of=/dev/null conv=fdatasync
|
||||||
|
256+0 Datensätze ein
|
||||||
|
256+0 Datensätze aus
|
||||||
|
268435456 Bytes (268 MB) kopiert, 3,95108 s, 67,9 MB/s
|
||||||
|
|
||||||
|
$ dd bs=1M count=256 if=/cluster/test of=/dev/null conv=fdatasync
|
||||||
|
256+0 Datensätze ein
|
||||||
|
256+0 Datensätze aus
|
||||||
|
268435456 Bytes (268 MB) kopiert, 2,56882 s, 104 MB/s
|
||||||
|
|
||||||
|
$ dd bs=1M count=256 if=/test of=/dev/null conv=fdatasync
|
||||||
|
256+0 Datensätze ein
|
||||||
|
256+0 Datensätze aus
|
||||||
|
268435456 Bytes (268 MB) kopiert, 2,14834 s, 125 MB/s
|
19
aufgabe3.3/fstab
Normal file
19
aufgabe3.3/fstab
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#
|
||||||
|
# /etc/fstab: static file system information
|
||||||
|
#
|
||||||
|
# <file system> <dir> <type> <options> <dump> <pass>
|
||||||
|
# /dev/sda3
|
||||||
|
UUID=1c2fe044-e154-40e1-b04f-32b02da85000 / ext4 rw,relatime,data=ordered 0 1
|
||||||
|
|
||||||
|
# /dev/sda1
|
||||||
|
UUID=9bec115d-77dc-4fd9-b15f-f3cb72015eba /boot ext4 rw,relatime,data=ordered 0 2
|
||||||
|
|
||||||
|
# /dev/sda2
|
||||||
|
UUID=72f3bc4e-237f-4737-94fa-fa3e4d598642 none swap defaults 0 0
|
||||||
|
|
||||||
|
# /dev/sda5
|
||||||
|
UUID=cf837a59-c7b3-40a9-bf83-20acb6eb0fb8 /mnt/glusterfs xfs defaults,noatime,nofail 1 2
|
||||||
|
|
||||||
|
zotac0:/gv0 /fastfs glusterfs defaults 0 0
|
||||||
|
10.20.0.1:/home /home nfs noatime,rw,soft,intr,timeo=60,rsize=32768,wsize=32768 0 0
|
||||||
|
10.20.0.1:/cluster /cluster nfs noatime,rw,soft,intr,timeo=60,rsize=32768,wsize=32768 0 0
|
@ -1,3 +1,142 @@
|
|||||||
%GlusterFS
|
\subsection{Netzwerk-Dateisysteme}
|
||||||
%- fdisk /dev/sda -> extended partition -> 50G partition
|
\label{sub:netzwerk_dateisysteme}
|
||||||
%- mkfs.xfs -i size=512 /dev/sda5
|
|
||||||
|
\subsubsection{NFS}
|
||||||
|
\label{ssub:nfs}
|
||||||
|
|
||||||
|
Unter Archlinux ist der NFS-Server im Packet {\tt nfs-utils} zu finden.
|
||||||
|
Um NFS zu exportieren starten wir auf dem Head-Node den rpc-mountd.service.
|
||||||
|
Das ID-Mapping übernimmt in unserem Fall der ldap-Dienst (\ref{sub:ldap}).
|
||||||
|
Auf den Compute-Node wurde jeweils ein Eintrag für die Verzeichnisse {\tt home}
|
||||||
|
und {\tt cluster} in der fstab angelegt. (siehe {\tt aufgabe3.1/fstab}).
|
||||||
|
|
||||||
|
\subsubsection{Verteiltes Dateisystem}
|
||||||
|
\label{ssub:verteiltes_dateisystem}
|
||||||
|
|
||||||
|
Als Dateisystem haben wir uns für GlusterFS entschieden. Dieses hat im Vergleich
|
||||||
|
zu anderen verteilten Dateisystemen keine zentrale Metadaten-Server. Stattdessen
|
||||||
|
setzt es auf das Elastic-Hashing. Dieser verteilte Ansatz verbessert die
|
||||||
|
Verfügbar- und Skalierbarkeit, da bei Dateisystemen wie Lustre, der
|
||||||
|
Metadatenserver häufigt zum Flaschenhals wird. Das Dateisystem lässt sich im
|
||||||
|
laufenden Betrieb um weitere Nodes erweitern. GlusterFS kann auf beliebige Dateisysteme
|
||||||
|
aufgesetzt werden, was die Wiederherstellung im Falle eines Absturzes
|
||||||
|
vereinfacht. Der einzigste Nachteil, der uns aufgefallen ist,
|
||||||
|
ist das GlusterFS auf Basis von Fuse im User-Space implementiert ist, was
|
||||||
|
potentiell langsamer als eine entsprechende Kernel-Implementierung ist.
|
||||||
|
|
||||||
|
Als Dateisystem für GlusterFS wird xfs empfohlen. Dafür haben wir mit fstab eine
|
||||||
|
50GB Partition angelegt, diese mit folgenden Befehl formatiert.
|
||||||
|
|
||||||
|
\shellcmd{mkfs.xfs -i size=512 /dev/sda5}
|
||||||
|
|
||||||
|
und nach {\tt /mnt/glusterfs} gemountet (siehe aufgabe3.3/fstab). Nach dem Starten des
|
||||||
|
GlusterFS-Dienstes, sowohl auf Head- und Computenode:
|
||||||
|
|
||||||
|
\shellcmd{systemctl enable glusterfs.service}
|
||||||
|
|
||||||
|
\shellcmd{systemctl start glusterfs.service}
|
||||||
|
|
||||||
|
legten wir das Dateisystem an:
|
||||||
|
|
||||||
|
\shellcmd{gluster volume create gv0 zotac1:/mnt/glusterfs}
|
||||||
|
|
||||||
|
\shellcmd{gluster volume start gv0}
|
||||||
|
|
||||||
|
Letztendlich mounten wir das GlusterFS mit folgenden Eintrag in der {\tt
|
||||||
|
aufgabe3.3/fstab}:
|
||||||
|
|
||||||
|
\shellcmd{zotac0:/gv0 /fastfs glusterfs defaults 0 0}
|
||||||
|
|
||||||
|
Um die Schreibrate zu ermitteln, verwendeten wir den Befehl {\tt dd}:
|
||||||
|
|
||||||
|
\shellcmd{dd bs=1M count=512 if=/dev/zero of=/path/to/file conv=fdatasync}
|
||||||
|
|
||||||
|
um einen 512MB Block auf die Festplatte. Die Option {\tt conv=fdatasync} sorgt
|
||||||
|
für einen Dateisystem-Sync nach dem Schreiben um die korrekte Schreibrate zu
|
||||||
|
ermitteln.
|
||||||
|
Für Leserate haben wir folgenden Befehl benutzt um dieselbige erstellte Datei zu
|
||||||
|
lesen:
|
||||||
|
|
||||||
|
\shellcmd{dd bs=1M count=512 if=/path/to/file of=/dev/null conv=fdatasync}
|
||||||
|
|
||||||
|
Um zu verhindern, dass das Betriebssystem hierfür den Cache benutzt, habe wir
|
||||||
|
diesem vor jedem Durchlauf geleert:
|
||||||
|
|
||||||
|
\shellcmd{sync; echo 3 | tee /proc/sys/vm/drop\_caches}
|
||||||
|
|
||||||
|
Die Tests wurden auf dem Host zotac1 ausgeführt, wobei {\emph Lokal}, dem
|
||||||
|
lokalen Ext4-Dateisystem entspricht, NFS dem gemounten NFS von zotac0 und GlusterFS, dem
|
||||||
|
Dateisystem in /fastfs entspricht. Die Rohdaten befinden sich in {\tt aufgabe3.3/benchmark.txt}
|
||||||
|
|
||||||
|
\pgfplotsset{
|
||||||
|
select row/.style={
|
||||||
|
x filter/.code={\ifnum\coordindex=#1\else\def\pgfmathresult{}\fi}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
\pgfplotstableread[header=false]{
|
||||||
|
92.3 Lokal
|
||||||
|
38.4 NFS
|
||||||
|
56.9 GlusterFS
|
||||||
|
}\writetable
|
||||||
|
|
||||||
|
\pgfplotstableread[header=false]{
|
||||||
|
125 Lokal
|
||||||
|
104 NFS.
|
||||||
|
67.9 GlusterFS
|
||||||
|
}\readtable
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
title=Lesen mit dd,
|
||||||
|
xbar, bar shift=0pt,
|
||||||
|
enlarge y limits=0.2,
|
||||||
|
xmin=0,
|
||||||
|
ytick={0,...,4},
|
||||||
|
yticklabels from table={\readtable}{1},
|
||||||
|
xmajorgrids = true,
|
||||||
|
bar width=6mm,
|
||||||
|
width=12cm, height=5.5cm,
|
||||||
|
xlabel={Leserate [MB/s]},
|
||||||
|
nodes near coords, nodes near coords align={horizontal},
|
||||||
|
]
|
||||||
|
\pgfplotsinvokeforeach{0,...,3}{
|
||||||
|
\addplot table [select row=#1, y expr=#1] {\readtable};
|
||||||
|
}
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
title=Schreiben mit dd,
|
||||||
|
xbar, bar shift=0pt,
|
||||||
|
enlarge y limits=0.2,
|
||||||
|
xmin=0,
|
||||||
|
ytick={0,...,4},
|
||||||
|
yticklabels from table={\writetable}{1},
|
||||||
|
xmajorgrids = true,
|
||||||
|
bar width=6mm,
|
||||||
|
width=12cm, height=5.5cm,
|
||||||
|
xlabel={Schreibrate [MB/s]},
|
||||||
|
nodes near coords, nodes near coords align={horizontal},
|
||||||
|
]
|
||||||
|
|
||||||
|
\pgfplotsinvokeforeach{0,...,3}{
|
||||||
|
\addplot table [select row=#1, y expr=#1] {\writetable};
|
||||||
|
}
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
Das lokale Dateisystem war wie zu erwarten sowohl beim Lesen als auch beim
|
||||||
|
Schreiben das schnellste Dateisystem. Der offensichtliche Nachteil, dieser
|
||||||
|
Methode, ist das nur die Node selber Zugriff auf diese Daten hat und die Daten
|
||||||
|
nicht größer als der lokale Speicher werden kann.
|
||||||
|
|
||||||
|
Während beim Schreiben GlusterFS einen höheren Durchsatz verzeichnen konnte,
|
||||||
|
war es deutlicher langsamer als NFS beim Lesen.
|
||||||
|
Zu beachten hierbei sei, dass in diesem Test nur eine Node auf NFS
|
||||||
|
zugegriffen hat. Sobald von mehren Nodes auf das NFS geschrieben wird, kann dies
|
||||||
|
schnell Flaschenhals werden. GlusterFS hingegen kann die Datenmengen auf die
|
||||||
|
einzelnen Nodes verteilen und so höhere Performance erreichen. Ein Nachteil
|
||||||
|
von GlusterFS dabei ist das die Fuse-Implementierung die CPU stärker belastet,
|
||||||
|
als dies bei NFS der Fall wäre.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
\subsection{LDAP}
|
\subsection{LDAP}
|
||||||
|
\label{sub:ldap}
|
||||||
|
|
||||||
\begin{sloppypar}
|
\begin{sloppypar}
|
||||||
Wir haben uns für den OpenLDAP-Server entschieden. Dazu haben wir als Basis-{\tt dn}:
|
Wir haben uns für den OpenLDAP-Server entschieden. Dazu haben wir als Basis-{\tt dn}:
|
||||||
@ -68,4 +69,4 @@ Das Script erstellt das Home-Verzeichnis des Nutzers, ändert den Besitzer und d
|
|||||||
|
|
||||||
\paragraph{Anlegen und Löschen von Benutzern}
|
\paragraph{Anlegen und Löschen von Benutzern}
|
||||||
|
|
||||||
Zum Anlegen und Löschen von Benutzern aus einer Text-Datei (wie in der Aufgabe gefordert) haben wir die Scripte {\tt ldap-users2ldif} (erstellt einen {\tt .ldif} Output anhand der Text-Datei), {\tt ldap-add-ldif} (fügt die im {\tt .ldif} Format vorliegenden Benutzerbeschreibungen zur LDAP-Datenbank hinzu) und {\tt ldap-delete-users} (löscht die in einer Text-Datei aufgelisteten Benutzer aus der LDAP-Datenbank) geschrieben (siehe Dateien in {\tt aufgabe3.5/ldap-tools}).
|
Zum Anlegen und Löschen von Benutzern aus einer Text-Datei (wie in der Aufgabe gefordert) haben wir die Scripte {\tt ldap-users2ldif} (erstellt einen {\tt .ldif} Output anhand der Text-Datei), {\tt ldap-add-ldif} (fügt die im {\tt .ldif} Format vorliegenden Benutzerbeschreibungen zur LDAP-Datenbank hinzu) und {\tt ldap-delete-users} (löscht die in einer Text-Datei aufgelisteten Benutzer aus der LDAP-Datenbank) geschrieben (siehe Dateien in {\tt aufgabe3.5/ldap-tools}).
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
\usepackage{pgfplots}
|
\usepackage{pgfplots}
|
||||||
\usepgfplotslibrary{dateplot}
|
\usepgfplotslibrary{dateplot}
|
||||||
\RequirePackage{mymacros}
|
\RequirePackage{mymacros}
|
||||||
|
\usepackage{tikz}
|
||||||
|
\usepackage{pgfplotstable}
|
||||||
|
|
||||||
\lstset{basicstyle=\footnotesize\ttfamily,breaklines=true,xleftmargin=1cm}
|
\lstset{basicstyle=\footnotesize\ttfamily,breaklines=true,xleftmargin=1cm}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user