Hochverfügbare Fileserver auf Samba Basis
In einem typischen Firmennetz haben wir Standard Dienste, wie DHCP, DNS, Domänen-Controller und eine Fileserver. Auf dem Fileserver werden im Laufe des Arbeitstages ständig Dateien geschrieben. Sollte der Fileserver ausfallen, haben wir ein kleines Problem. Meistens befinden sich große Datenmengen auf dem Server. Die Wiederherstellung kann Stunden dauern.
Aus diesem Grund wünschen sich einiger Unternehmer hochverfügbaren Fileserver. Beim Ausfall eines Servers können die Mitarbeiter weiter arbeiten, weil der zweiter Server noch verfügbar ist.
Hier wird beschrieben, wie man eine Hochverfügbaren Fileserver auf Samba Basis aufsetzt. Es ist auch unerheblich, ob sich in Netz ein Domänen-Controller auf Windows Basis oder auf Linux Basis befindet. Wir können selbstverständlich nicht nur 2 Knoten (Server) aber auch 3 Knoten (Server) einsetzen.
Unser Netzwerk (Ausgangssituation)
Firmen-Netzwerk: 172.16.0.0/22
Domänen-Controller: dc1 (IP: 172.16.0.10)
Gateway: 172.16.0.1 (Die IP-Adresse der Firewall (Router))
DNS: IP-Adresse des DNS-Servers, z.B. des DC: 172.16.0.10
Daten zum Server1
Name: brick1deb
Domain: mono.plan
IP: 172.16.0.101/22
Gateway: 172.16.0.1
DNS: 172.16.0.10
Zweite Festplatte: /dev/sdb1
Daten zum Server2
Name: brick2deb
Domain: mono.plan
IP: 172.16.0.102/22
Gateway: 172.16.0.1
DNS: 172.16.0.10
Zweite Festplatte: /dev/sdb1
Floating-IP: 172.16.0.100
Gewünschte Name des Fileservers: FS1
Gebraucht wird noch eine IP-Adresse, wir nennen die Floating-IP: 172.16.0.100
Die IP-Adresse wird den Ort wechseln, abhängig von dem Status der Bricks, bedeutet, es kann auf dem Brick1deb oder auch auf dem Brick2deb sein.
Auf beiden Servern wird eine Partition /dev/sdb1 erstellt. Danach bitte die Partitionen formatieren.
root@brick1deb:~# mkfs.ext4 /dev/sdb1
root@brick2deb:~# mkfs.ext4 /dev/sdb1
root@brick1deb:~# mkdir /datastore
root@brick2deb:~# mkdir /datastore
172.16.0.102 brick2deb.mono.plan brick2deb
Gluster Installation und Konfiguration
root@brick1deb:~# systemctl enable glusterd.service
root@brick1deb:~# systemctl start glusterd.service
root@brick2deb:~# systemctl enable glusterd.service
root@brick2deb:~# systemctl start glusterd.service
Wir bekommen auch eine Warnung. Der Grund ist, dass Hochverfügbarkeit mit 2 Knoten kann unter bestimmten Umständen zu Split-Brain führen. Im Grunde genommen sollte man mindestens 3 Bricks nutzen, um sicherzugehen. Bei 2 Bricks muss man noch zusätzlich bestimmte Parameter setzen. Das wird später noch beschrieben.
Sollten Probleme bei der Erstellung des Volumes vol1 entstehen, kann man den Befehl mit dem Parameter --force nutzen.
root@brick1deb:~# gluster volume list
root@brick1deb:~# gluster volume start vol1
Gluster hat viele Aufrufparameter, mit diesen 3 erhalten Sie ein paar Informationen.
# gluster volume status
# gluster volume info
root@brick1deb:/datastore# touch Testdatei.txt
Auf dem zweiten Server in der letzten Zeile
Mögliche Probleme: Wenn beide Server offline sind und nur ein Server gestartet wird, wird das vol1 nicht gemountet. Es gibt mehrere Möglichkeiten, um das Problem zu beseitigen. In unserem Fall reicht es, wenn wir das Paket network-manager installieren. Danach dauert das Booten länger, aber es wird gemountet.
Oder, die mount Einträge (In der letzten Zeile der /etc/fstab Datei) werden kommentiert und eine /etc/rc.local Datei wird erstellt, wenn noch nicht existiert. Die Datei wird dann so aussehen und nicht vergessen, die Rechte der Datei anzupassen.
#!/bin/sh -e
sleep 20
mount -t glusterfs -o acl brick1deb:/vol1 /datastore/
exit 0
Entsprechend muss man das auch auf dem anderem Server machen.
Installation und Konfiguration von pacemaker
# systemctl start pcsd.service
# systemctl enable corosync.service
# systemctl start corosync.service
# systemctl enable pacemaker.service
# systemctl start pacemaker.service
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
Es sollte so ähnliche Ausgabe kommen
Password:
brick2deb: Authorized
brick1deb: Authorized
Bei älteren Softwareversionen
Sollte man Probleme bei der Erstellung des Clusters haben, können Ihnen vielleicht dieser Befehl helfen
# pcs cluster destroy
Vorsicht: Alle Cluster werden gelöscht und die Dienste werden gestoppt.
# pcs config
# pcs resource status
# pcs resource move samba-ip <Ziel-Brick> // z.B. brick2deb oder brick1deb
root@brick1deb:~# pcs property set no-quorum-policy=ignore
root@brick1deb:~# crm_verify -L
Warnung: Cluster mit 2 Knoten ist nicht unbedingt 100 % sicher, deshalb für wichtige Daten sollte man schon 3 Knoten nutzen.
Samba als Mitglied der Domäne installieren
workgroup = MONO
realm = MONO.PLAN
netbios name = FS101
server string = Fileserver
security = ADS
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config MONO: backend = rid
idmap config MONO: range = 10000-999999
idmap config MONO: schema_mode = rfc2307
idmap config MONO: unix_nss_info = yes
template shell = /bin/bash
# template homedir = /home/%U
domain master = no
winbind nss info = rfc2307
winbind use default domain = Yes
# oplocks auf no, sonnst bei Profilen nach dem Abmelden kann passieren, dass
# die Datei ntusers.dat und ntusers.ini auf dem Server in Benutzung bleibt.
# Bei nächsten Anmeldung kommen dann Probleme mit den Profilen.
oplocks = no
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
# admin users = Administrator
[Marktplatz]
path = /datastore/marktplatz
comment =
read only = no
browseable = yes
Auf dem zweiten Server
workgroup = MONO
realm = MONO.PLAN
netbios name = FS102
server string = Fileserver
security = ADS
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config MONO: backend = rid
idmap config MONO: range = 10000-999999
idmap config MONO: schema_mode = rfc2307
idmap config MONO: unix_nss_info = yes
template shell = /bin/bash
# template homedir = /home/%U
domain master = no
winbind nss info = rfc2307
winbind use default domain = Yes
# oplocks auf no, sonnst bei Profilen nach dem Abmelden kann passieren, dass
# die Datei ntusers.dat und ntusers.ini auf dem Server in Benutzung bleibt.
# Bei nächsten Anmeldung kommen dann Probleme mit den Profilen.
oplocks = no
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
# admin users = Administrator
[Marktplatz]
path = /datastore/marktplatz
comment =
read only = no
browseable = yes
root@brick1deb:~# chmod 777 /datastore/marktplatz
default_realm = MONO.PLAN
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
MONO.PLAN = {
kdc = dc1.mono.plan
master_kdc = dc1.mono.plan
admin_server = dc1.mono.plan
}
[domain_realm]
.dc1.mono.plan = MONO.PLAN
dc1.mono.plan = MONO.PLAN
[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON
group: compat winbind
shadow: files
gshadow: files
# systemctl restart winbind
# wbinfo -u
# wbinfo -g
# systemctl status smbd
# systemctl status smbd
# systemctl status winbind
# wbinfo --online-status
# systemctl restart nmbd.service
# systemctl restart winbind.service