Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

Nextcloud Backends automatisch synchronisieren (lsyncd)

turnserver
Nextcloud mit lsyncd synchron halten

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!