hunspell-check
This commit is contained in:
parent
95e291e509
commit
9acc0bd116
@ -9,7 +9,7 @@ dem Head-Node erstellten Schlüssel auf die anderen Nodes
|
|||||||
(\emph{/etc/munge/munge.key}).
|
(\emph{/etc/munge/munge.key}).
|
||||||
|
|
||||||
SLURM setzt für die Authentifizierung voraus, das der in der Konfiguration
|
SLURM setzt für die Authentifizierung voraus, das der in der Konfiguration
|
||||||
festgelege Nutzer auf allen Systemen die gleiche UID besitzt:
|
festgelegten Nutzer auf allen Systemen die gleiche UID besitzt:
|
||||||
|
|
||||||
\shellcmd{sudo usermod -u 992 slurm}
|
\shellcmd{sudo usermod -u 992 slurm}
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
\subsection{Konfiguration}
|
\subsection{Konfiguration}
|
||||||
|
|
||||||
Die Konfiguration der Queues (in SLURM Partitions genannt) erfolgt über die
|
Die Konfiguration der Queues (in SLURM \texttt{Partitions} genannt) erfolgt über die
|
||||||
Konfigurationsdateien im Ordner \emph{/etc/slurm/} (auch zu finden in \emph{aufgabe5.2/slurm}).
|
Konfigurationsdateien im Ordner \emph{/etc/slurm/} (auch zu finden in \emph{aufgabe5.2/slurm}).
|
||||||
Die Prioritäten wurden in folgender Reihenfolge absteigend vergeben: benchmark, express, small, long
|
Die Prioritäten wurden in folgender Reihenfolge absteigend vergeben: benchmark, express, small, long
|
||||||
Die benchmark-Partition bekam die größte Priorität, so das Jobs aus anderen
|
Die \texttt{benchmark}-Partition bekam die größte Priorität, so das Jobs aus anderen
|
||||||
Queues angehalten werden. Die anderen Queues wurden umgekehrt proportional zur Zeitdauer
|
Queues angehalten werden. Die anderen Queues wurden umgekehrt proportional zur Zeitdauer
|
||||||
priorisiert. Dadurch werden Nutzer des Batchssystems dazu bewegt Jobs, die
|
priorisiert. Dadurch werden Nutzer des Batchsystems dazu bewegt Jobs, die
|
||||||
weniger Zeit benötigen, den richtige Queue zu zu ordnen.
|
weniger Zeit benötigen, den richtige Queue zu zu ordnen.
|
||||||
|
|
||||||
Zusätzlich zur Verwaltung der Cores haben wir SLURM für die Verwaltung der GPUs
|
Zusätzlich zur Verwaltung der Cores haben wir SLURM für die Verwaltung der GPUs
|
||||||
|
@ -6,7 +6,7 @@ Der HPL-Benchmark wurde mit folgenden Befehlen durchgeführt:
|
|||||||
\shellcmd{mpirun -x LD\_LIBRARY\_PATH -np 8 -hostfile allnodes -npernode 2 \textbackslash} \\
|
\shellcmd{mpirun -x LD\_LIBRARY\_PATH -np 8 -hostfile allnodes -npernode 2 \textbackslash} \\
|
||||||
\shellcmd{\hspace{1cm} /cluster/software/hpl/run\_hpl > hpl.out}
|
\shellcmd{\hspace{1cm} /cluster/software/hpl/run\_hpl > hpl.out}
|
||||||
|
|
||||||
In der Datei \emph{allnodes} sind die Hostnames der Computenodes hinterlegt.
|
In der Datei \emph{allnodes} sind die Hostnames der Compute-Nodes hinterlegt.
|
||||||
Beim Basislauf wurde ein maximaler Wert von $3,842 \cdot 10^{-4}$ GFlops mit folgender Konfiguration erreicht:
|
Beim Basislauf wurde ein maximaler Wert von $3,842 \cdot 10^{-4}$ GFlops mit folgender Konfiguration erreicht:
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
@ -15,7 +15,7 @@ Beim Basislauf wurde ein maximaler Wert von $3,842 \cdot 10^{-4}$ GFlops mit fol
|
|||||||
WR00L2L2 35 4 1 4
|
WR00L2L2 35 4 1 4
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Der optimierte Lauf mit der Standard BLAS-Library des Systems mit der Konfiguration:
|
Der optimierte Lauf mit der Standard-BLAS-Bibliothek des Systems mit der Konfiguration:
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
T/V N NB P Q
|
T/V N NB P Q
|
||||||
@ -36,7 +36,7 @@ einen Wert von {\bf 4,076 GFlops}.
|
|||||||
|
|
||||||
\subsubsection{Auswertung}
|
\subsubsection{Auswertung}
|
||||||
|
|
||||||
Verglichen mit der theoretischen Floating Point Peak Performance von: \\ $1,6$
|
Verglichen mit der theoretischen Floating-Point-Peak-Performance von: \\ $1,6$
|
||||||
GHz $\cdot 2$ CPU-Kerne pro Prozessor $\cdot 2$ Instruktion pro Takt $\cdot 4$
|
GHz $\cdot 2$ CPU-Kerne pro Prozessor $\cdot 2$ Instruktion pro Takt $\cdot 4$
|
||||||
CPUs $ = 25,6$ GFlops \\ erreichten wir also ca. 16 \% der maximal möglichen
|
CPUs $ = 25,6$ GFlops \\ erreichten wir also ca. 16 \% der maximal möglichen
|
||||||
Leistung, was in Anbetracht des langsamen Verbindungsnetzwerkes ein akzeptabler
|
Leistung, was in Anbetracht des langsamen Verbindungsnetzwerkes ein akzeptabler
|
||||||
|
@ -27,7 +27,7 @@ Testaufruf:
|
|||||||
|
|
||||||
\shellcmd{./iozone -azcR -+q 1 -U /fastfs -f /fastfs/testfile -b excel-fastfs.xls}
|
\shellcmd{./iozone -azcR -+q 1 -U /fastfs -f /fastfs/testfile -b excel-fastfs.xls}
|
||||||
|
|
||||||
Der Parameter \emph{-+q 1} sorgt für einen Delay zwischen den einzelnen Tests, ohne den der Benchmark fehlerhaft läuft.\\
|
Der Parameter \emph{-+q 1} sorgt für einen Verzögerung zwischen den einzelnen Tests, ohne den der Benchmark fehlerhaft läuft.\\
|
||||||
|
|
||||||
\subsubsection{Auswertung}
|
\subsubsection{Auswertung}
|
||||||
|
|
||||||
@ -35,14 +35,14 @@ Die Lesegeschwindigkeit von NFS entspricht mit als Maximalwert gemessenen 109 Mi
|
|||||||
|
|
||||||
\shellcmd{hdparm -t /dev/sda}
|
\shellcmd{hdparm -t /dev/sda}
|
||||||
|
|
||||||
Die Schreibegeschwindigkeit liegt bei maximal 62 MiB/s und sollte auch in etwa
|
Die Schreibgeschwindigkeit liegt bei maximal 62 MiB/s und sollte auch in etwa
|
||||||
der Leistungsfähigskeit der Festplatte entsprechen.
|
der Leistungsfähig der Festplatte entsprechen.
|
||||||
|
|
||||||
GlusterFS liegt in der Lesegeschwindigkeit von maximal 104 MiB/s etwa mit NFS
|
GlusterFS liegt in der Lesegeschwindigkeit von maximal 104 MiB/s etwa mit NFS
|
||||||
gleich auf. Die Schreibegeschwindigkeit hingegen erreicht lediglich 28 MiB/s und
|
gleich auf. Die Schreibgeschwindigkeit hingegen erreicht lediglich 28 MiB/s und
|
||||||
liegt damit weit hinter NFS. Dies lässt sich im Wesentlichen darauf
|
liegt damit weit hinter NFS. Dies lässt sich im Wesentlichen darauf
|
||||||
zurückführen, dass GlusterFS ein FUSE-Dateisystem ist und es deshalb bei jeder
|
zurückführen, dass GlusterFS ein FUSE-Dateisystem ist und es deshalb bei jeder
|
||||||
Schreibeoperation es etliche Kontextwechsel und Kopiervorgänge gibt, weil die
|
Schreiboperation es etliche Kontextwechsel und Kopiervorgänge gibt, weil die
|
||||||
einzelnen Nodes miteinander kommunizieren müssen, um die Daten verteilt
|
einzelnen Nodes miteinander kommunizieren müssen, um die Daten verteilt
|
||||||
schreiben zu können. Zusätzlich stellen hier also auch die Atom-Prozessoren
|
schreiben zu können. Zusätzlich stellen hier also auch die Atom-Prozessoren
|
||||||
durch ihre begrenze Leistungsfähigkeit einen limitierenden Faktor dar.
|
durch ihre begrenze Leistungsfähigkeit einen limitierenden Faktor dar.
|
||||||
|
@ -20,7 +20,7 @@ Nun kann die eigentliche Konfiguration per git heruntergeladen werden:
|
|||||||
Wir legten in dieser Konfiguration das Repository \emph{lctp} an und gaben allen
|
Wir legten in dieser Konfiguration das Repository \emph{lctp} an und gaben allen
|
||||||
Benutzern Zugriff darauf. Die gitolite-Konfiguration befindet sich als
|
Benutzern Zugriff darauf. Die gitolite-Konfiguration befindet sich als
|
||||||
Git-Submodule im Verzeichnis \emph{aufgabe2.4/gitolite-admin}.
|
Git-Submodule im Verzeichnis \emph{aufgabe2.4/gitolite-admin}.
|
||||||
Das lctp-Repository wiederum lässt sich mit folgendem Befehl clonen:
|
Das lctp-Repository wiederum lässt sich mit folgendem Befehl klonen:
|
||||||
|
|
||||||
\shellcmd{git clone git@141.76.90.104:lctp.git lctp-gruppe4}
|
\shellcmd{git clone git@141.76.90.104:lctp.git lctp-gruppe4}
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ vorrangig ausgeführt. Die Wrapper befinden sich in \emph{aufgabe2.4/yaourt}
|
|||||||
sowie in \emph{aufgabe2.4/pacman}. Darüber hinaus haben wir das Shell-Script für
|
sowie in \emph{aufgabe2.4/pacman}. Darüber hinaus haben wir das Shell-Script für
|
||||||
tägliche automatische Commits, welches sich im
|
tägliche automatische Commits, welches sich im
|
||||||
\href{https://github.com/joeyh/etckeeper/blob/master/debian/cron.daily}{Git-Repository}
|
\href{https://github.com/joeyh/etckeeper/blob/master/debian/cron.daily}{Git-Repository}
|
||||||
(Stand 07.11.2013) von \emph{etckeeper} liegt, als Cronjob eingerichtet (siehe
|
(Stand 07.11.2013) von \emph{etckeeper} liegt, als Cron-Job eingerichtet (siehe
|
||||||
\emph{aufgabe2.4/cron.daily/etckeeper}).
|
\emph{aufgabe2.4/cron.daily/etckeeper}).
|
||||||
|
|
||||||
\subsubsection{Logs in git}
|
\subsubsection{Logs in git}
|
||||||
|
@ -9,7 +9,7 @@ Das entsprechende Paket war nicht im offiziellen Arch Linux Repository
|
|||||||
vorhanden, deshalb haben wir es über das AUR (siehe \ref{sec:aur}) installiert.
|
vorhanden, deshalb haben wir es über das AUR (siehe \ref{sec:aur}) installiert.
|
||||||
|
|
||||||
\subsubsection{Gruppenverwaltung} Zur Verwaltung mehrerer Rechner in Gruppen (in
|
\subsubsection{Gruppenverwaltung} Zur Verwaltung mehrerer Rechner in Gruppen (in
|
||||||
unserem Fall Headnode und Computenodes) greift \emph{Pdsh} auf die
|
unserem Fall Head-Node und Compute-Nodes) greift \emph{Pdsh} auf die
|
||||||
Gruppenbeschreibungsdatei \texttt{ /etc/genders} (siehe
|
Gruppenbeschreibungsdatei \texttt{ /etc/genders} (siehe
|
||||||
\emph{aufgabe2.5/genders}) zurück. Dort können mehrere Hosts in verschiedene
|
\emph{aufgabe2.5/genders}) zurück. Dort können mehrere Hosts in verschiedene
|
||||||
Gruppen eingeteilt werden. Um zu gewährleisten, dass Pdsh den richtigen Befehl
|
Gruppen eingeteilt werden. Um zu gewährleisten, dass Pdsh den richtigen Befehl
|
||||||
|
@ -43,4 +43,4 @@ Das automatisierte Hinzufügen neuer Nutzer haben wir über ein Script
|
|||||||
\texttt{newuser} (siehe \emph{aufgabe2.3/newuser}) gelöst. Dieses Script legt
|
\texttt{newuser} (siehe \emph{aufgabe2.3/newuser}) gelöst. Dieses Script legt
|
||||||
einen neuen Benutzer an, erstellt dessen Home-Verzeichnis, generiert ein neues
|
einen neuen Benutzer an, erstellt dessen Home-Verzeichnis, generiert ein neues
|
||||||
Public-Private-Key-Paar für SSH und trägt den eigenen Public-Key in die
|
Public-Private-Key-Paar für SSH und trägt den eigenen Public-Key in die
|
||||||
\emph{authorized\_keys} ein und ermöglich den Zugriff auf das git-Repository.
|
\emph{authorized\_keys} ein und ermöglicht den Zugriff auf das git-Repository.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
\section{Betriebsysteminstallation}
|
\section{Betriebssysteminstallation}
|
||||||
|
|
||||||
\subsection{Wahl des Betriebsystems}
|
\subsection{Wahl des Betriebssystems}
|
||||||
\label{sub:wahl_des_betriebsystems}
|
\label{sub:wahl_des_betriebsystems}
|
||||||
|
|
||||||
Wir haben \href{http://www.archlinux.org/}{Arch Linux} als Betriebssystem gewählt. Es hat mit \emph{Systemd} ein modernes und robustes init-System. Systemd verwaltet Abhängigkeiten zwischen den verschiedenen Systemdiensten. Gestartete Dienste werden überwacht und können im Fehlerfall neu gestartet werden.
|
Wir haben \href{http://www.archlinux.org/}{Arch Linux} als Betriebssystem gewählt. Es hat mit \emph{Systemd} ein modernes und robustes init-System. Systemd verwaltet Abhängigkeiten zwischen den verschiedenen Systemdiensten. Gestartete Dienste werden überwacht und können im Fehlerfall neu gestartet werden.
|
||||||
@ -31,21 +31,23 @@ Die Partitionierung haben wir wie im Cluster-Layout angegeben mit \emph{fdisk} v
|
|||||||
|
|
||||||
Nach ursprünglichen Schwierigkeiten mit dem Internet-Zugang im TGI-Labor (keine IP-Adresse über DHCP erhalten), konnten wir dann das Basis-System mittels \emph{pacstrap} installieren und danach mittels \emph{arch-chroot} in dieses wechseln. Dort wurden nach der Anleitung die Sprache, das Konsolen-Tastaturlayout, die Zeitzone, Datum und Uhrzeit und die Hostnames festgelegt sowie den Bootloader \emph{GRUB} installiert und konfiguriert.
|
Nach ursprünglichen Schwierigkeiten mit dem Internet-Zugang im TGI-Labor (keine IP-Adresse über DHCP erhalten), konnten wir dann das Basis-System mittels \emph{pacstrap} installieren und danach mittels \emph{arch-chroot} in dieses wechseln. Dort wurden nach der Anleitung die Sprache, das Konsolen-Tastaturlayout, die Zeitzone, Datum und Uhrzeit und die Hostnames festgelegt sowie den Bootloader \emph{GRUB} installiert und konfiguriert.
|
||||||
|
|
||||||
Nach dem erfolgreichen Reboot haben wir dann das Netzwerk auf eine statische IP-Adresse mittels \emph{netctl} konfiguriert. Damit waren sowohl die Headnode als auch der erste Computenode grundsätzlich einsatzfähig.
|
Nach dem erfolgreichen Reboot haben wir dann das Netzwerk auf eine statische
|
||||||
|
IP-Adresse mittels \emph{netctl} konfiguriert. Damit waren sowohl die Head-Node
|
||||||
|
als auch der erste Compute-Node grundsätzlich einsatzfähig.
|
||||||
|
|
||||||
\subsubsection{Netzwerk-Konfiguration}
|
\subsubsection{Netzwerk-Konfiguration}
|
||||||
|
|
||||||
Auf dem Headnode bzw. Computenode haben wir mit \emph{netctl} die beiden
|
Auf dem Head-Node bzw. Compute-Node haben wir mit \emph{netctl} die beiden
|
||||||
Netzwerk-Interfaces \emph{eth0} und \emph{eth1} bzw. \emph{enp1s0} auf eine
|
Netzwerk-Interfaces \emph{eth0} und \emph{eth1} bzw. \emph{enp1s0} auf eine
|
||||||
statische IP-Adresse (wie im Cluster-Layout angegeben) konfiguriert (siehe
|
statische IP-Adresse (wie im Cluster-Layout angegeben) konfiguriert (siehe
|
||||||
\emph{aufgabe2.2/headnode/network} und \emph{aufgabe2.2/headnode/internal} bzw.
|
\emph{aufgabe2.2/headnode/network} und \emph{aufgabe2.2/headnode/internal} bzw.
|
||||||
\emph{aufgabe2.2/computenode/internal}).
|
\emph{aufgabe2.2/computenode/internal}).
|
||||||
|
|
||||||
Auf dem Headnode mussten wir noch mittels \emph{iptables} das \texttt{
|
Auf dem Head-Node mussten wir noch mittels \emph{iptables} das \texttt{
|
||||||
MASQUERADE}-Target in der \emph{POSTROUTING}-Chain in der \emph{nat}-Tabelle auf
|
MASQUERADE}-Target in der \emph{POSTROUTING}-Chain in der \emph{nat}-Tabelle auf
|
||||||
dem \emph{eth0}-Interface setzen (siehe \emph{aufgabe2.3/iptables.rules}) und mit
|
dem \emph{eth0}-Interface setzen (siehe \emph{aufgabe2.3/iptables.rules}) und mit
|
||||||
\emph{sysctl} (\emph{/etc/sysctl.d}) die Option \emph{net.ipv4.ip\_forward = 1}
|
\emph{sysctl} (\emph{/etc/sysctl.d}) die Option \emph{net.ipv4.ip\_forward = 1}
|
||||||
(siehe \emph{aufgabe2.2/10-ip-forward-conf}) freischalten, damit die Computenodes auch auf das Internet zugreifen können (Paketinstallationen, Updates, etc.).
|
(siehe \emph{aufgabe2.2/10-ip-forward-conf}) freischalten, damit die Compute-Nodes auch auf das Internet zugreifen können (Paketinstallationen, Updates, etc.).
|
||||||
|
|
||||||
\input{bs/bs-ssh}
|
\input{bs/bs-ssh}
|
||||||
|
|
||||||
|
@ -8,12 +8,12 @@ Zur Überwachung und Aufzeichnung des Systems während des Burnin haben wir
|
|||||||
\texttt{Munin} eingerichtet. Munit besteht aus einem Masterprozess, welches
|
\texttt{Munin} eingerichtet. Munit besteht aus einem Masterprozess, welches
|
||||||
die gewünschten Daten aufzeichnet und einem Nodeprozess, welches die Daten
|
die gewünschten Daten aufzeichnet und einem Nodeprozess, welches die Daten
|
||||||
bereitstellt. Die Darstellung erfolgt über ein Webinterface, welches die Graphen
|
bereitstellt. Die Darstellung erfolgt über ein Webinterface, welches die Graphen
|
||||||
aus einer \emph{Rddtool}-Datenbank generiert. Auf dem Headnode haben wir den
|
aus einer \emph{Rddtool}-Datenbank generiert. Auf dem Head-Node haben wir den
|
||||||
Masterprozess installiert:
|
Masterprozess installiert:
|
||||||
|
|
||||||
\shellcmd{pacman -S munin}
|
\shellcmd{pacman -S munin}
|
||||||
|
|
||||||
Auf dem Computenode die Nodekomponente:
|
Auf dem Compute-Node die Nodekomponente:
|
||||||
|
|
||||||
\shellcmd{pacman -S munin-node}
|
\shellcmd{pacman -S munin-node}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ klein ist, haben wir uns für die Aktualisierung der Leistungsdaten mithilfe
|
|||||||
|
|
||||||
Munin bringt bei der Installation schon eine Vielzahl von Plugins mit. Manche
|
Munin bringt bei der Installation schon eine Vielzahl von Plugins mit. Manche
|
||||||
von dieser Plugins benötigen wiederum für die Datenerfassung andere Programme.
|
von dieser Plugins benötigen wiederum für die Datenerfassung andere Programme.
|
||||||
Auf dem Computenode haben wir folgende Plugins aktiviert:
|
Auf dem Compute-Node haben wir folgende Plugins aktiviert:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item cpu
|
\item cpu
|
||||||
|
@ -33,7 +33,7 @@ Wir haben uns folgendes Cluster-Layout überlegt: (Details auf nächster Seite)
|
|||||||
{\bf Compute-Nodes:} \\
|
{\bf Compute-Nodes:} \\
|
||||||
|
|
||||||
\begin{tabularx}{45em}{l|X|X|X|X}
|
\begin{tabularx}{45em}{l|X|X|X|X}
|
||||||
Hostnames & \texttt{zotac1}\footnote{330er Board und 1. Computenode} & \texttt{zotac2} & \texttt{zotac3} & \texttt{zotac4} \\
|
Hostnames & \texttt{zotac1}\footnote{330er Board und 1. Compute-Node} & \texttt{zotac2} & \texttt{zotac3} & \texttt{zotac4} \\
|
||||||
\hline
|
\hline
|
||||||
Interne IPs & \texttt{\small 10.20.0.101} & \texttt{\small 10.20.0.102} & \texttt{\small 10.20.0.103} & \texttt{\small 10.20.0.104} \\
|
Interne IPs & \texttt{\small 10.20.0.101} & \texttt{\small 10.20.0.102} & \texttt{\small 10.20.0.103} & \texttt{\small 10.20.0.104} \\
|
||||||
\hline
|
\hline
|
||||||
|
@ -12,7 +12,7 @@ In die beiden zur Verfügung stehenden Gehäuse bauten wir jeweils zwei Mainboar
|
|||||||
Da nur drei ZOTAC-Boards vorhanden waren, mussten wir als vierten Compute-Node
|
Da nur drei ZOTAC-Boards vorhanden waren, mussten wir als vierten Compute-Node
|
||||||
ein normales Intel-Mainboard (ohne nVidia-Chip) verwenden. \\
|
ein normales Intel-Mainboard (ohne nVidia-Chip) verwenden. \\
|
||||||
|
|
||||||
Beide Boards waren jeweils ausgestattet mit: %\footnote{330er Board und 1. Computenode}
|
Beide Boards waren jeweils ausgestattet mit: %\footnote{330er Board und 1. Compute-Node}
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item einem (bereits fest verbautem) Intel Atom 330 Prozessor
|
\item einem (bereits fest verbautem) Intel Atom 330 Prozessor
|
||||||
|
@ -2,7 +2,14 @@
|
|||||||
|
|
||||||
\subsubsection{Vorbereitungen}
|
\subsubsection{Vorbereitungen}
|
||||||
|
|
||||||
Da Ori seine Configs und Repositorien unter \emph{.ori} im Home-Verzeichnis des jeweiligen Nutzers ablegt und dieses auf allen Nodes eingebunden wird, würden zwangsweise Fehler auftreten. Deshalb wurde auf allen Computenodes eine neue Partition erstellt und unter \emph{/ori} gemounted. Mit \emph{useradd ori} wurde ein neuer User ori angelegt, dem mit \emph{chown /ori/home ori:ori} und \emph{usermod --home /ori/home ori} das Home-Verzeichnis \emph{/ori/home} zugeteilt wurde. Mit \emph{ssh-keygen} wurden auf Computenode 1 die ssh-Schlüssel erstellt und anschließend auf Computenode 2 übertragen. Desweiteren wurde der Public-Key in die \emph{authorized\_keys} eingetragen. Mit diesen Arbeitsschritten war nun ein passwortloser Zugriff für den Nutzer ori auf die beiden Coputenodes gewährleistet.
|
Da Ori seine Configs und Repositorien unter \emph{.ori} im Home-Verzeichnis des
|
||||||
|
jeweiligen Nutzers ablegt und dieses auf allen Nodes eingebunden wird, würden
|
||||||
|
zwangsweise Fehler auftreten. Deshalb wurde auf allen Compute-Nodes eine neue
|
||||||
|
Partition erstellt und unter \emph{/ori} gemounted. Mit \emph{useradd ori} wurde
|
||||||
|
ein neuer User ori angelegt, dem mit \emph{chown /ori/home ori:ori} und
|
||||||
|
\emph{usermod --home /ori/home ori} das Home-Verzeichnis \emph{/ori/home}
|
||||||
|
zugeteilt wurde. Mit \emph{ssh-keygen} wurden auf Compute-Node 1 die
|
||||||
|
ssh-Schlüssel erstellt und anschließend auf Compute-Node 2 übertragen. Desweiteren wurde der Public-Key in die \emph{authorized\_keys} eingetragen. Mit diesen Arbeitsschritten war nun ein passwortloser Zugriff für den Nutzer ori auf die beiden Coputenodes gewährleistet.
|
||||||
|
|
||||||
\subsubsection{Installation}
|
\subsubsection{Installation}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
Wir haben uns für \href{http://www.rsnapshot.org/}{Rsnapshot} aus folgenden Gründen entschieden:
|
Wir haben uns für \href{http://www.rsnapshot.org/}{Rsnapshot} aus folgenden Gründen entschieden:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Die Backups liegen als Ordner mit den gleichen Rechten wie im zu backupenden System.
|
\item Die Backups liegen als Ordner mit den gleichen Rechten wie im zu sichernden System.
|
||||||
Dies hat den Vorteil, dass andere Nutzer diese einsehen können und
|
Dies hat den Vorteil, dass andere Nutzer diese einsehen können und
|
||||||
selbständig Dateien wiederherstellen können.
|
selbständig Dateien wiederherstellen können.
|
||||||
\item Rsnapshot erstellt differentielle Backups. Dabei werden Dateien, die
|
\item Rsnapshot erstellt differentielle Backups. Dabei werden Dateien, die
|
||||||
|
@ -12,14 +12,14 @@ da auf den Festplatten der Compute-Nodes genügend Speicher für das
|
|||||||
Betriebssystem vorhanden ist und bei jedem Zugriff auf das Dateisystem unnötigen
|
Betriebssystem vorhanden ist und bei jedem Zugriff auf das Dateisystem unnötigen
|
||||||
Latenzen entstehen würden.
|
Latenzen entstehen würden.
|
||||||
|
|
||||||
Um Clonezilla auf den Computenodes zu booten, haben wir den
|
Um Clonezilla auf den Compute-Nodes zu booten, haben wir den
|
||||||
\emph{in.tftpd}-Server installiert und das Service-File für \emph{Systemd}
|
\emph{in.tftpd}-Server installiert und das Service-File für \emph{Systemd}
|
||||||
angepasst (siehe \emph{aufgabe4.4/tftpd.service}). Außerdem haben wir die
|
angepasst (siehe \emph{aufgabe4.4/tftpd.service}). Außerdem haben wir die
|
||||||
Konfiguration des DHCP-Servers so angepasst, dass nun jede Compute-Node eine
|
Konfiguration des DHCP-Servers so angepasst, dass nun jede Compute-Node eine
|
||||||
eigene Konfigurationsdatei in \emph{/etc/dhcpd.d/} hat, die jeweils von
|
eigene Konfigurationsdatei in \emph{/etc/dhcpd.d/} hat, die jeweils von
|
||||||
\emph{/etc/dhcpd.d/all} inkludiert wird.
|
\emph{/etc/dhcpd.d/all} inkludiert wird.
|
||||||
|
|
||||||
Außerdem haben wir ein Script \emph{ cluster} geschrieben, mit dem die Computenodes verwaltet werden können. Mit
|
Außerdem haben wir ein Script \emph{ cluster} geschrieben, mit dem die Compute-Nodes verwaltet werden können. Mit
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
cluster add <HOSTNAME> <IP> <MAC>
|
cluster add <HOSTNAME> <IP> <MAC>
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
@ -42,22 +42,22 @@ Konfigurationsdateien liegen in \emph{/srv/tftp/pxelinux/pxelinux.cfg}.
|
|||||||
|
|
||||||
\end{sloppypar}
|
\end{sloppypar}
|
||||||
|
|
||||||
\subsubsection{Provisionierung der Computenodes}
|
\subsubsection{Provisionierung der Compute-Nodes}
|
||||||
|
|
||||||
\begin{sloppypar}
|
\begin{sloppypar}
|
||||||
|
|
||||||
Um den Clone-Vorgang zu starten, führten wir nun mit dem Befehl \emph{sudo
|
Um den Clone-Vorgang zu starten, führten wir nun mit dem Befehl \emph{sudo
|
||||||
cluster set-clone <HOSTNAME>} aus. Durch Neustart des Nodes wird das Clonezilla
|
cluster set-clone <HOSTNAME>} aus. Durch Neustart des Nodes wird das Clonezilla
|
||||||
Live Image gebootet. Dieses holt sich nun vom Headnode ein Script und führt es
|
Live Image gebootet. Dieses holt sich nun vom Head-Node ein Script und führt es
|
||||||
aus. In diesem Script haben wir alle nötigen Befehle eingetragen, um das Clonen
|
aus. In diesem Script haben wir alle nötigen Befehle eingetragen, um das Clonen
|
||||||
vorzubereiten und zu starten (siehe \emph{aufgabe4.4/clone.sh}). Dazu wird per
|
vorzubereiten und zu starten (siehe \emph{aufgabe4.4/clone.sh}). Dazu wird per
|
||||||
NFS das \emph{/cluster}-Verzeichnis des Headnodes eingebunden und dort im
|
NFS das \emph{/cluster}-Verzeichnis des Head-Nodes eingebunden und dort im
|
||||||
Unterverzeichnis \emph{images} das Image der Festplatte abgelegt. Geclont werden
|
Unterverzeichnis \emph{images} das Image der Festplatte abgelegt. Geklont werden
|
||||||
nur die \emph{/}- und die \emph{/boot}-Partition.
|
nur die \emph{/}- und die \emph{/boot}-Partition.
|
||||||
|
|
||||||
Zum Wiederherstellen des Images wird mit \emph{sudo cluster set-restore
|
Zum Wiederherstellen des Images wird mit \emph{sudo cluster set-restore
|
||||||
<HOSTNAME>} wieder der entsprechende Boot-Modus gesetzt und der Node
|
<HOSTNAME>} wieder der entsprechende Boot-Modus gesetzt und der Node
|
||||||
neugestartet. Dort wird nun ein anderes Script vom Headnode geholt (siehe \emph{
|
neu gestartet Dort wird nun ein anderes Script vom Head-Node geholt (siehe \emph{
|
||||||
aufgabe4.4/restore.sh}) und die beiden Partitionen wiederhergestellt.
|
aufgabe4.4/restore.sh}) und die beiden Partitionen wiederhergestellt.
|
||||||
Anschließend werden noch die Swap-Partition und die Daten-Partition für das
|
Anschließend werden noch die Swap-Partition und die Daten-Partition für das
|
||||||
verteilte Dateisystem neu formatiert und die alten UUIDs gesetzt.
|
verteilte Dateisystem neu formatiert und die alten UUIDs gesetzt.
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
\section{Compiler, Modules, Backup und Klonen
|
\section{Compiler, Modules, Backup und Klonen des Compute-Node}
|
||||||
des Compute Nodes}
|
|
||||||
|
|
||||||
\input{prov/prov-compiler}
|
\input{prov/prov-compiler}
|
||||||
|
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
\begin{sloppypar}
|
\begin{sloppypar}
|
||||||
Wir haben uns für den \emph{ISC-Dhcpd} als DHCP-Server entschieden. Zur
|
Wir haben uns für den \emph{ISC-Dhcpd} als DHCP-Server entschieden. Zur
|
||||||
Konfiguration haben wir in \emph{/etc/dhcpd.conf} (siehe \emph{aufgabe3.2}) die
|
Konfiguration haben wir in \emph{/etc/dhcpd.conf} (siehe \emph{aufgabe3.2}) die
|
||||||
interne Top-Level-Domain \emph{zotac} eintragen und den Headnode als DNS-Server eingestellt.
|
interne Top-Level-Domain \emph{zotac} eintragen und den Head-Node als DNS-Server eingestellt.
|
||||||
\end{sloppypar}
|
\end{sloppypar}
|
||||||
|
|
||||||
Des Weiteren haben wir das Subnet \emph{10.20.0.0/24} deklariert und wiederum den Headnode als verantwortlichen Router eingetragen.
|
Des Weiteren haben wir das Subnet \emph{10.20.0.0/24} deklariert und wiederum den Head-Node als verantwortlichen Router eingetragen.
|
||||||
|
|
||||||
Die Pro-Host-Konfiguration sieht bei uns wie folgt aus:
|
Die Pro-Host-Konfiguration sieht bei uns wie folgt aus:
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ Elastic-Hashing nennt. Dieser verteilte Ansatz verbessert die Verfügbar- und
|
|||||||
Skalierbarkeit, da bei Dateisystemen wie Lustre, der Metadatenserver häufig zum
|
Skalierbarkeit, da bei Dateisystemen wie Lustre, der Metadatenserver häufig zum
|
||||||
Flaschenhals wird. Das Dateisystem lässt sich im laufenden Betrieb um weitere
|
Flaschenhals wird. Das Dateisystem lässt sich im laufenden Betrieb um weitere
|
||||||
Nodes erweitern. GlusterFS kann auf beliebige Dateisysteme aufgesetzt werden,
|
Nodes erweitern. GlusterFS kann auf beliebige Dateisysteme aufgesetzt werden,
|
||||||
was die Wiederherstellung im Falle eines Absturzes vereinfacht. Der einzigste
|
was die Wiederherstellung im Falle eines Absturzes vereinfacht. Der einzige
|
||||||
Nachteil, der uns aufgefallen ist, ist das GlusterFS auf Basis von Fuse im
|
Nachteil, der uns aufgefallen ist, ist das GlusterFS auf Basis von FUSE im
|
||||||
User-Space implementiert ist, was potentiell langsamer als eine entsprechende
|
User-Space implementiert ist, was potentiell langsamer als eine entsprechende
|
||||||
Kernel-Implementierung ist.
|
Kernel-Implementierung ist.
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ Partition angelegt, diese mit Befehl:
|
|||||||
\shellcmd{mkfs.xfs -i size=512 /dev/sda5}
|
\shellcmd{mkfs.xfs -i size=512 /dev/sda5}
|
||||||
|
|
||||||
formatiert und nach \emph{/mnt/glusterfs} gemountet (siehe aufgabe3.3/fstab).
|
formatiert und nach \emph{/mnt/glusterfs} gemountet (siehe aufgabe3.3/fstab).
|
||||||
Nach dem Starten des GlusterFS-Dienstes, sowohl auf Head- und Computenode:
|
Nach dem Starten des GlusterFS-Dienstes, sowohl auf Head- und Compute-Node:
|
||||||
|
|
||||||
\shellcmd{systemctl enable glusterfs.service}
|
\shellcmd{systemctl enable glusterfs.service}
|
||||||
|
|
||||||
@ -60,8 +60,8 @@ Um die Schreibdurchsatz zu ermitteln, verwendeten wir den Befehl \emph{dd}:
|
|||||||
|
|
||||||
um einen 512MB Block auf die Festplatte. Die Option \emph{conv=fdatasync} sorgt
|
um einen 512MB Block auf die Festplatte. Die Option \emph{conv=fdatasync} sorgt
|
||||||
für einen Dateisystem-Sync nach dem Schreiben um die korrekte Schreibrate zu
|
für einen Dateisystem-Sync nach dem Schreiben um die korrekte Schreibrate zu
|
||||||
ermitteln. Für die Leserate haben wir folgenden Befehl benutzt um dieselbige
|
ermitteln. Für die Leserate haben wir folgenden Befehl benutzt um erstellte
|
||||||
erstellte Datei zu lesen:
|
Datei zu lesen:
|
||||||
|
|
||||||
\shellcmd{dd bs=1M count=512 if=/path/to/file of=/dev/null conv=fdatasync}
|
\shellcmd{dd bs=1M count=512 if=/path/to/file of=/dev/null conv=fdatasync}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ Um auf den Verzeichnisdienst zugreifen zu können, haben wir eine Datei
|
|||||||
angelegt, die nur durch \emph{root}-Benutzer zugreifbar ist
|
angelegt, die nur durch \emph{root}-Benutzer zugreifbar ist
|
||||||
(Verzeichnisberechtigung $600_8$).
|
(Verzeichnisberechtigung $600_8$).
|
||||||
|
|
||||||
\subsubsection{Client-Konfiguration (Headnode und Computenode)}
|
\subsubsection{Client-Konfiguration (Head-Node und Compute-Node)}
|
||||||
|
|
||||||
\begin{sloppypar}
|
\begin{sloppypar}
|
||||||
Hierfür haben wir die Variablen \emph{BASE, URI, TIMEOUT, NETWORK\_TIMEOUT} in
|
Hierfür haben wir die Variablen \emph{BASE, URI, TIMEOUT, NETWORK\_TIMEOUT} in
|
||||||
|
Loading…
Reference in New Issue
Block a user