NFS und GlusterFS hinzugefügt
This commit is contained in:
parent
c9d7190245
commit
aa47774798
@ -1,2 +1,2 @@
|
||||
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
|
||||
%- fdisk /dev/sda -> extended partition -> 50G partition
|
||||
%- mkfs.xfs -i size=512 /dev/sda5
|
||||
\subsection{Netzwerk-Dateisysteme}
|
||||
\label{sub:netzwerk_dateisysteme}
|
||||
|
||||
\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}
|
||||
\label{sub:ldap}
|
||||
|
||||
\begin{sloppypar}
|
||||
Wir haben uns für den OpenLDAP-Server entschieden. Dazu haben wir als Basis-{\tt dn}:
|
||||
|
@ -9,6 +9,8 @@
|
||||
\usepackage{pgfplots}
|
||||
\usepgfplotslibrary{dateplot}
|
||||
\RequirePackage{mymacros}
|
||||
\usepackage{tikz}
|
||||
\usepackage{pgfplotstable}
|
||||
|
||||
\lstset{basicstyle=\footnotesize\ttfamily,breaklines=true,xleftmargin=1cm}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user