Tutorials - Diskless Server
Sprachenübersicht/Betriebssysteme/Linux/System
Diskless Server
Diese Seite wurde 3631 mal aufgerufen.
Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.
Editieren Versionen Linkpartnerschaft Bottom Printversion
Keywords: diskless linux server client high available nfs pxelinux dhcp
Inhaltsverzeichnis
In größeren Umgebungen müssen oftmals Dienste auf mehrere Server verteilt werden. Dabei trennt man gewöhnlich die Daten von der Rechenpower, z.B. lässt man mehrere gleiche Application-Server parallel die Anfragen abarbeiten, während die Daten anderswo in einer Datenbank gespeichert sind. Da das Programm ohnehin auf allen Servern gleich sein muss und keine Schreibvorgänge auf der Platte statt finden, lassen sich die Platten praktisch komplett auslagern und zusammenfassen.
Damit sich dieser Aufwand auch rentiert, müssen die Vorteile überwiegen:
- vereinfachte Wartung - alle Daten liegen auf dem Storage
- skalierbar - bei hoher Last können schnell weitere Server dazugeschalten werden
- weniger Ausfälle - die Clients haben keine Festplatten, die gewechselt werden müssen
- billig - nur der Storage-Server braucht Plattenplatz und RAID-Controller
Wer nicht riskieren will, dass die Server beim Ausfall des zentralen NFS-Servers alle plötzlich tot sind, sollte vorher noch das DRBD- und Heartbeat-Tutorial machen.
Wenn der Kernel wie im DRBD-Tutorial selbst gebaut wurde, kann dazu auch noch der NFS-Kernel-Server einkompiliert werden. Ansonsten genügt unter Debian ein schnelles apt-get install nfs-kernel-server.
Um alle Dateien an einem Ort zu haben, machen wir uns das /srv-Verzeichnis zu nutze. Das hat auch den Vorteil, dass man einfach das DRBD dorthin einbinden kann.
Installieren wir nun die benötigten Programme.
Code:
apt-get install tftpd-hpa syslinux debootstrap build-essential libncurses5-dev
cd /usr/src
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.xx.tar.bz2
tar xvfj linux-2.6.xx.tar.bz2
Am einfachsten Konfigurieren wir unser System nun in der Reihenfolge, wie später auch das Booten der Server ablaufen soll.
Als erstes brauchen wir einen DHCP-Server. Da ich davon ausgehe, dass bereits einer im LAN vorhanden ist, erkläre ich nur kurz, welche Zeilen der Konfiguration hinzugefügt werden müssen, falls es sich um den am weitest verbeiteten ISC-DHCPD handelt.
/etc/dhcp/dhcpd.conf:
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.50 192.168.0.100;
option routers 192.168.0.1;
next-server 192.168.0.49; # das ist der server mit dem tftp-server
filename "pxelinux.0"; # der boot-loader auf dem tftp-server
}
Theoretisch wäre es möglich, den DHCP-, TFTP- und den NFS-Server auf unterschiedliche Rechner zu verteilen, ich gehe jetzt jedoch davon aus, dass TFTP und NFS auf dem selben liegen.
Nun folgt die Konfiguration des TFTP-Servers.
/etc/default/tftpd-hpa:
RUN_DAEMON="yes"
OPTIONS="-l -s /srv/tftp"
Da der Standalone-Server aus meiner Sicht besser läuft als über Inetd, können wir folgende Zeile in der Inetd-Konfig auskommentieren oder löschen.
/etc/inetd.conf:
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
Als nächstes kopieren wir den Bootloader in das TFTP-Root.
Code:
mkdir /srv/tftp
mkdir /srv/tftp/pxelinux.cfg
cp /usr/lib/syslinux/pxelinux.0 /srv/tftp
Der Bootloader muss als nächstes einen Kernel übers Netz nachladen. Diesen bauen wir am besten selbst. Wichtig ist, dass folgende Option aktiviert ist und die NFS-Client-Module einkompiliert sind.
make menuconfig:
Networking
Networking Options
TCP/IP networking
IP: kernel level autoconfiguration
IP: DHCP support
Ich empfehle hierbei komplett auf Module zu verzichten!
Code:
make bzImage
cp arch/<arch>/boot/bzImage /srv/tftp/vmlinuz-2.6.xx-nfs
Der Kernel liegt nun auch im TFTP-Root, doch damit das ganze auch reibungslos klappt, braucht es noch eine Konfigurationsdatei.
/srv/tftp/pxelinux.cfg/default:
LABEL linux
KERNEL vmlinuz-2.6.xx-nfs
APPEND root=/dev/nfs nfsroot=192.168.0.49:/srv/nfsroot ip=dhcp rw
Man kann auch rechner- und netzspezifische Konfiguration anlegen. Diese liegen dann auch innerhalb von pxelinux.cfg und tragen als Namen beispielsweise 01-00-30-48-8b-95-28. Das 01- am Anfang muss immer dort stehen, die restlichen Ziffern sind die Mac-Adresse der Netzwerkkarte. Wichtig ist hierbei, die Buchstaben klein zu schreiben und Bindestriche statt Doppelpunkte zu verwenden.
Um die Konfiguration auf basis der IP-Adresse zu machen, hilft das Tool gethostip, dass die Adresse bzw. Netz in der hexadezimalen Schreibweise ausgibt, die dem Namen der Konfigdatei entspricht.
Damit der Server später auch ein System per NFS erhält, passen wir zuerst die NFS-Konfiguration an.
/etc/exports:
/srv/nfsroot *(rw,async,no_root_squash)
Das Hostsystem ist dann ziemlich schnell eingerichtet.
Code:
mkdir /srv/nfsroot
cd /srv/nfsroot
debootstrap --include=nfs-common,portmap,vim,less,openssh-server,syslog-ng etch ./
cp /etc/apt/sources.list /srv/nfsroot/etc/apt/sources.list
Der Server braucht natürlich eine angepasst fstab-Datei, damit das Root richtig eingebunden wird.
/srv/nfsroot/etc/fstab:
/dev/nfs / nfs defaults 1 1
none /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
Als nächstes müssen noch die hostname- und die hosts-Datei angepasst werden. Einstellungen für IP-Adresse und Netzwerk sind nicht erforderlich, da das bereits vom Kernel erledigt wurde.
Weiters ist es empfehlenswert, dass syslog-ng sämtliche Log-Meldungen an einen zentralen Server schickt und nichts lokal gelogt wird.
Wer hier DRBD mit Heartbeat verwendet, sollte nicht vergessen den NFS-Kernel-Server und TFTP-HPA aus den default-Runlevel zu löschen und stattdessen in der Heartbeat-Konfig einzutragen.
Bei Tests lief das System überaus stabil. Bei manchen Anwendungen ist es erforderlich für jeden Host ein eigenes NFS-Root anzulegen, damit keine Schreibkonflikte entstehen können.
Wurde im Betrieb einem NFS-Server der Strom genommen, so sprang innerhalb kurzer Zeit Heartbeat ein und fuhr den anderen Server hoch. Der Diskless-Server stand dadurch für 20 Sekunden still und setzte danach seine Arbeit ungehindert fort.
Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?
Editieren Versionen Linkpartnerschaft Top Printversion
Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden
Sprachenübersicht/Betriebssysteme/Linux/System/Diskless Server