Wir installieren einen hochverfügbaren NFS-Server basierenden auf Debian 12. Der NFS-Server wird als Active-Passive installiert. Beim Ausfall des Primären Knotens wird der Sekundäre Knoten automatisch einspringen.
Basisinstallation
Ich setze voraus das 2 Systeme mit Netzwerk miteinander verbunden sind und grundsätzlich installiert sind. Dazu zählt die Installation des Betriebssystems. Die beiden Knoten müssen 2 Harddisks haben, eine für das OS und eine für die NFS Freigaben. Die 2. Harddisk darf nicht gemountet werden.
Setup
Alle nachfolgenden Commandos führst du auf beiden Knoten aus (IPs und co. entsprechend anpassen)
nano /etc/network/interfaces
iface eth0 inet static
address 172.20.96.66/67
netmask 255.255.255.0
network 172.20.96.0
broadcast 172.20.96.255
gateway 172.20.96.253
Ersetze das „eth0“ mit dem Interface-Namen den dein System hat, sowie die Netzwerkdaten mit denen aus deinem Netzwerk.
Ergänze in der Hosts-Datei die nachfolgende Zeile
nano /etc/hosts
172.20.96.66/67 nfs0001.local.loc nfs0001
Hostnamen ändern
echo nfs0001.local.loc > /etc/hostname
/bin/hostname -F /etc/hostname
Nun den Network-Stack neustarten
/etc/init.d/networking restart
Aktualisiere die Pakete
apt-get update
apt-get upgrade -y
NFS-Server Setup
Führe folgende Commandos auf beiden Servern aus:
apt-get install ntp ntpdate
apt-get install nfs-kernel-server
update-rc.d -f nfs-kernel-server remove
update-rc.d -f nfs-common remove
Diese Installieren den NFS Server und entfernen ihn aus dem Autostart.
Exports erstellen
nano /etc/exports
/data/freigabe/ 0.0.0.0/0.0.0.0(rw,no_root_squash,no_all_squash,sync)
In der /etc/exports werden die Freigaben erstellt. /data ist das später gemountete Drive. /freigabe/ ist ein freiwählbarer Name für den Share. 0.0.0.0/0.0.0.0 oder auch einfach * bedeutet, dass alle Clients zugreifen können. Soll das nicht so sein, kannst du einfach die IP des Clients oder ein bestimmtes Netzwerk dort eintragen.
apt-get install drbd-utils
Installation von DRBD.
nano /etc/drbd.d/global_common.conf
Ergänze die conf um folgenden Inhalt:
Disk{
resync-rate 3123M; # bytes/second, default
c-plan-ahead 20; # 1/10 seconds, default
c-delay-target 10; # 1/10 seconds, default
c-fill-target 1M; # bytes, default
c-max-rate 3123M; # bytes/second, default
c-min-rate 250k; # bytes/second, default
}
net {
protocol C;
max-buffers 80k;
sndbuf-size 10M ;
rcvbuf-size 10M;
}
Die Knoten Disk und net sind bereits vorhanden. Ergänze die einzelnen Settings darunter. Diese sind optimiert auf 10G Netzwerk – sollte aber auch mit 1G Netzwerk funktionieren.
Erstelle eine neue Datei mit nano /etc/drbd.d/freigabe.res. „freigabe“ steht hier für einen beliebigen Namen.
Darin definierst du die Server, Drives, Netzwerk usw.
resource freigabe {
on nfs0001.local.loc { # ** EDIT ** the hostname of server 1 (uname -n)
device /dev/drbd0; #
disk /dev/sdb; # ** EDIT ** data partition on server 1
address 172.20.96.66:7788; # ** EDIT ** IP address on server 1
meta-disk internal; # ** EDIT ** 128MB partition for DRBD on server 1
}
on nfs0002.vop.loc { # ** EDIT ** the hostname of server 2 (uname -n)
device /dev/drbd0; #
disk /dev/sdb; # ** EDIT ** data partition on server 2
address 172.20.96.67:7788; # ** EDIT ** IP address on server 2
meta-disk internal; # ** EDIT ** 128MB partition for DRBD on server 2
}
}
Nun führen wir noch folgendes aus : modprobe drbd
Service drbd restart
drbdadm create-md cc02vcd
drbdadm up all
mkdir /data
Alle o.g. Schritte sind auf beiden Knoten durchzuführen.
Einstellungen für NFS-Server Knoten 1
drbdadm up freigabe
drbdadm primary --force freigabe
Nun wurde das Cluster initialisiert. Es findet ein Initialer Sync statt. Über den Nachfolgenden Befehl kannst du überprüfen ob der NFS-Server Cluster fertig initialisiert ist. Dazu muss UpToDate/UpToDate in der Ausgabe stehen
cat /proc/drbd
Wenn der Sync abgeschlossen ist können wir die 2. Festplatte am primären Knoten formatieren und mounten, sowie einige Config-Daten für NFS darauf schieben
mkfs.ext4 /dev/drbd0
mount -t ext4 /dev/drbd0 /data
mv /var/lib/nfs/ /data/
ln -s /data/nfs/ /var/lib/nfs
mkdir /data/cc02vcd
umount /data
NFS-Server Setup Knoten 2
Nur für Knoten 2 stellen wir ein, dass die NFS Config auf dem /data Drive zu finden ist.
rm -fr /var/lib/nfs/
ln -s /data/nfs/ /var/lib/nfs
Erstmal fertig, und jetzt?
DRBD ist jetzt grundsätzlich fertig. Jedoch ist das ganze noch etwas weg von „hochverfügbar“. Daher konfigurieren wir im nächsten Schritt noch Heartbeat. Heartbeat sorgt dafür dass der CLuster die NFS Rolle schwenken kann und wir eine Virtuelle IP Adresse haben, mit der wir den Cluster ansprechen können.
Dazu installieren wir Heartbeat zunächst auf beiden Knoten:
apt-get install heartbeat
In der sysctl.conf fügen wir eine Zeile hinzu, damit wir VIPs einsetzen können. Dazu gehen wir wie folgt vor:
nano /etc/sysctl.conf
#füge die nachfolgende Zeile in der Datei ein.
net.ipv4.ip_nonlocal_bind=1
Nun übernehmen wir die neuen Einstellungen mit:
sysctl -p
Wir erstellen mit nano /etc/ha.d/authkeys eine neue Datei. Dessen Inhalt ist:
auth 3
3 md5 somerandomstring
Den Teil „somerandomstring“ kannst du anpassen in eine persönliche Passphrase.
Wir ändern dann die Berechtigungen der Datei:
chmod 600 /etc/ha.d/authkeys
Nun müssen wir die HA-Ressourcen anlegen. Dazu werden weiterhin auf beiden Knoten die nachfolgenden Einstellungen getätigt:
Auf beiden Knoten wir die Datei /etc/heartbeat/ha.cf erstellt und folgender Inhalt eingefügt (bitte auf deine Namen und IPs anpassen):
Knoten 1 + 2 (bei ucast jeweils die IP des anderen Knoten angeben. ens192 ggf. auf den Interface Namen deines Systems ändern):
#
# keepalive: how many seconds between heartbeats
#
keepalive 2
#
# deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
# What UDP port to use for udp or ppp-udp communication?
#
udpport 694
bcast ens192
mcast ens192 225.0.0.1 694 1 0
ucast ens192 172.20.96.67 #die IP des anderen Knotens
# What interfaces to heartbeat over?
udp ens192
#
# Facility to use for syslog()/logger (alternative to log/debugfile)
#
logfacility local0
#
# Tell what machines are in the cluster
# node nodename ... -- must match uname -n
node nfs0001.local.loc
node nfs0002.local.loc
Nun erstellen wir die Datei /etc/ha.d/haresources
nfs0001.local.loc IPaddr::172.20.96.104/24/ens192 drbddisk::freigabe Filesystem::/dev/drbd0::/data::ext4 nfs-kernel-server
Auch diese Einstellungen machst du auf beiden Knoten. Jedoch enthalten beide Knoten exakt den selben Inhalt. Hier steht immer der Name des ersten Knotens drin. Hinter „IPaddr::“ gibst du deine Virtuelle IP an, die du verwenden möchtest. Ändere ggf. ens192 in dein interface und drbddisk::freigabe in den Namen deiner Freigabe.
Fast fertig
Abschließend können wir den Service heartbeat auf beiden Knoten starten
/etc/init.d/heartbeat start
Folgende Dinge kannst du jetzt prüfen.
- Prüfe ob der Cluster in Sync ist (cat /proc/drbd)
- Der primäre Knoten sollte zusätzlich zu seiner IP auch die VIP haben (ip addr)
- Der primäre Knoten sollte /data gemountet haben (df -h)
Ist das alles der Fall sollte auch alles soweit funktionieren.
Zum testen kannst du den Heartbeat Service auf dem primären Knoten stoppen. Die VIP und der Mount „wandern“ dann zum Secondary Knoten.
/etc/init.d/heartbeat stop
Prüfe auf deinem 2. Knoten mit „ipaddr“ ob er die VIP bekommen hat und mit „df -h“ ob er den /data Mount hat.
Ist das der Fall sind wir fertig. Du kannst deinen hochverfügbaren NFS-Server jetzt über die virtuelle IP ansprechen.
Noch mehr Tutorials? Schau mal hier -> Klick