Befinden Sie sich in einer skalierten Nextcloud-Umgebung, so sind Nextcloud Updates deutlich aufwendiger und komplexer, da u.a. die Webserver und Webserververzeichnisse synchron gehalten werden müssen.
Um sowohl für App-Aktualisierungen, als auch für Nextcloud-Upgrades die Aufwände und Risiken im Betrieb dauerhaft zu minimieren, bedienen wir uns der automatischen Synchronisation der Webserver mittels lsyncd.
In diesem Beispiel gehen wir von zwei Webservern aus.
Webserver #1: 192.168.2.101
Webserver #2: 192.168.2.102
Bitte passen Sie diese exemplarischen IP-Adressen an Ihre Systeme an
Inhaltsverzeichnis
1. NFS (am Webserver #2)
2. lsyncd (am Webserver #1)
Melden Sie sich am Webserver #2 an und wechseln in den privilegierten Modus::
sudo -s
1. NFS (Webserver #2)
Richten Sie zu Beginn den NFS-Serverdienst zur Synchronisierung (lsyncd) am Webserver #2 ein:
apt install -y nfs-kernel-server
Erstellen Sie die NFS-Freigabe
nano /etc/exports
Passen Sie die IP-Adresse an Ihre Umgebung an. Die IP-Adresse 192.168.2.101 entspricht in diesem Beispiel der IP-Adresse des ersten Webservers.
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/var/www/nextcloud 192.168.2.101(rw,sync,anonuid=33,anongid=33,no_subtree_check,no_root_squash)
Speichern und verlassen Sie diese Datei und spezifizieren dann den NFS-Port innerhalb der [mountd]-Sektion:
nano /etc/nfs.conf
Setzen Sie den Port auf 13025:
[...]
[mountd]
# debug=0
manage-gids=y
# descriptors=0
port=13025
# threads=1
# reverse-lookup=n
# state-directory-path=/var/lib/nfs
# ha-callout=
#
[...]
Limitieren Sie zudem die nutzbaren NFS-Versionen in der nfsd-Sektion:
[...]
[nfsd]
# debug=0
# threads=8
# host=
# port=0
# grace-time=90
# lease-time=90
# udp=n
# tcp=y
vers2=n
vers3=n
vers4=y
vers4.0=y
vers4.1=y
vers4.2=y
# rdma=n
# rdma-port=20049
#
Um die Kommunikation von Webserver#1 » Webserver#2 zu ermöglichen, erweitern wir die Firewall am Webserver#2:
ufw allow from 192.168.2.101 to any port nfs comment "NFS"
ufw allow from 192.168.2.101 to any port 111 comment "NFS"
ufw allow from 192.168.2.101 to any port 13025 comment "NFS"
Fügen Sie am Ende der Datei /etc/sysctl.conf
nano /etc/sysctl.conf
folgende drei Zeilen hinzu
[...]
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.tcp_window_scaling = 1
Um diese Änderungen adhoc und dauerhaft zu übernehmen führen Sie
sysctl -p
aus und überprüfen dann, ob der Wert auf bbr gesetzt ist.
sysctl net.ipv4.tcp_congestion_control
Die Ausgabe sollte wie folgt aussehen:
Abschließend überprüfen wir noch die Firewall
ufw status verbose
und publizieren dann die NFS-Freigabe:
exportfs -av
Der NFS-Server und die benötigte Freigabe wurden somit für lsyncd eingerichtet. Wechseln Sie nun auf den primären Webserver und installieren lsyncd.
2. LSYNCD (Webserver #1)
Melden Sie sich am Webserver #1 an und wechseln in den privilegierten Modus:
sudo -s
Installieren Sie die notwendige Software, lsyncd und nfs-common am Webserver #1:
apt install -y lsyncd nfs-common
Legen Sie dann die notwendigen Ordner an:
mkdir -p /etc/lsyncd/ /lsyncd
chown -R www-data:www-data /lsyncd
Um den sekundären Server durch den ersten synchron zu halten erstellen wir eine lsyncd-Konfiguration:
nano /etc/lsyncd/lsyncd.conf.lua
settings{
logfile="/var/log/lsyncd.log",
statusFile="/var/log/lsyncd.stat",
statusInterval=1,
}
sync{
default.rsync,
source="/var/www/nextcloud",
target="/lsyncd",
delay=0,
rsync = {
verbose = true,
owner = true,
group = true,
perms = true,
update = false,
chmod = 750,
chown = "www-data:www-data"
}
}
Binden Sie nun die NFS-Freigabe des sekundären Webservers dauerhaft in das System (Webserver #1) ein:
nano /etc/fstab
Ergänzen Sie die folgende Zeile und passen die IP des Webserver #2 (192.168.2.102) an Ihr System an:
[...]
192.168.2.102:/var/www/nextcloud /lsyncd nfs4 nfsvers=4.2,noatime,nolock,sec=sys 0 0
Um die Freigabe des Webserver #2 nach /lsyncd am Webserver #1 einzubinden rufen Sie einmalig
mount -a -vv
auf. Das erfolgreiche Einbinden wird mit „successfully mounted“ quitiert.
Aktivieren und starten Sie nun den lsyncd-Dienst
systemctl enable lsyncd.service && systemctl restart lsyncd.service
und überprüfen die Logdatei.
tail -f /var/log/lsyncd.log
Ab sofort können Sie Aktualisierungen und Erweiterungen Ihrer Nextcloud-Instanzen am primären Webserver durchführen und alle Veränderungen werden auf den zweiten Webserver synchronisiert. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen. Vorab vielen Dank!