NFS und GlusterFS hinzugefügt

This commit is contained in:
Jörg Thalheim 2013-11-18 16:33:46 +01:00
parent c9d7190245
commit aa47774798
6 changed files with 197 additions and 5 deletions

View File

@ -1,2 +1,2 @@
zotac0 headnode
zotac[1-4] computenode
zotac[1-4] computenodes

31
aufgabe3.3/benchmark.txt Normal file
View 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
View 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

View File

@ -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.

View File

@ -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}:

View File

@ -9,6 +9,8 @@
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\RequirePackage{mymacros}
\usepackage{tikz}
\usepackage{pgfplotstable}
\lstset{basicstyle=\footnotesize\ttfamily,breaklines=true,xleftmargin=1cm}