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.
Hier wird beschrieben, wie man eine Hochverfügbaren Fileserver auf Samba Basis aufsetzt. Es ist auch unerheblich, ob in Netz sich eine DC auf Windows Basis oder auf Linux Basis befindet. Wir können selbstverständlich nicht nur 2 Knoten (Server) aber auch 3 Knoten 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 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

