Backup - ubtue/ub_tools GitHub Wiki
Infrastruktur
Das Backupsystem besteht aus einem GlusterFS-Volume names glusterbackup, das ein RAID-1-Netzwerkmirroring zwischen sobek und ptah darstellt. Grundlage sind eine 1 TB und eine 3 TB Platte in jedem der beiden Rechner, die per LVM zusammengefasst werden. Die Kommunikation zwischen sobek und ptah erfolgt durch eine dedizierte Direktverbindung mit gesonderten Netzwerkkarten.
Netzwerksetup
Sowohl sobek als auch path verfügen über je eine TG-3448 GB-Ethernet-Karte (Interface: enp2s0).
Die Konfiguration erfolgt in Analogie zu ifcfg-enp0s25 durch die neu anzulegende Datei /etc/sysconfig/network-scripts/ifcfg-enp2s0 in für ein 192.168.0.0-Netzwerk.
(ptah: 192.168.0.1, sobek: 192.168.0.2).
Das direkte Routen wird durch Eintragen des jeweils anderen Rechners in /etc/hosts erzielt, also 192.168.0.2 sobek sobek.ub.uni-tuebingen.de auf ptah und 192.168.0.1 ptah ptah.ub.uni-tuebingen.de auf sobek.
LVM Setup
Vorgehensweise LVM auf ptah und sobek
3 TB ist /dev/sdb
1 TB ist /dev/sdc
Partionierung mit parted auf jeder Partition
mklabel gpt
mkpart primary 0% 100%
set 1 lvm on
Das Volume erstellen
pvcreate /dev/sdb1 /dev/sdc1
vgcreate space /dev/sdb1 /dev/sdc1
lvcreate --name backup --extent 953862 space
Formatieren
mkfs -t xfs /dev/mapper/space-backup
In fstab mountbar machen
/dev/mapper/space-backup /mnt/backup xfs defaults 1 2
und mounten
Glusterfs Installation und Setup
Anleitung nach https://wiki.centos.org/SpecialInterestGroup/Storage/gluster-Quickstart
yum install centos-release-gluster
yum install glusterfs-server
systemctl enable glusterd
systemctl start glusterd
Auf ptah
gluster peer probe sobek.ub.uni-tuebingen.de
Auf sobek
gluster peer probe ptah.ub.uni-tuebingen.de
Volume erstellen (entweder ptah oder sobek)
gluster volume create glusterbackup replica 2 ptah.ub.uni-tuebingen.de:/mnt/backup sobek.ub.uni-tuebingen.de:/mnt/backup
gluster volume start glusterbackup
gluster volume info
Gluster zum lokalen mounten in fstab eintragen
ptah.ub.uni-tuebingen.de:/glusterbackup /mnt/glusterbackup glusterfs defaults 0 0
sobek.ub.uni-tuebingen.de:/glusterbackup /mnt/glusterbackup glusterfs defaults 0 0
Gluster absichern
http://blog.gluster.org/author/zbyszek/
openssl genrsa glusterfs.key 2048
openssl req -new -x509 -key glusterfs.key -subj '/CN=Anyone' -out glusterfs.pem
Die Schlüssel auf beiden Servern müssen identisch sein, ansonsten bricht die Kommunikation mit einem SSL-Error ab !!!!
Außerdem muss die auth.ssl-allow Option auf den CN (bei uns Anyone) gesetzt werden.
Das Managementprotokoll auf SSL umstellen (http://www.gluster.org/community/documentation/index.php/SSL)
touch /var/lib/glusterd/secure-access
auf beiden Maschinen. [Edit: Aufgrund eines Bugs funktioniert in Version 3.6.7 das "healing" nicht, wenn secure-access existiert und server.allow-insecure: on nicht gesetzt ist.]
[Edit: Wegen der direkten physischen Verbindung zwischen sobek und ptah und Problemen im Zusammenspiel zwischen glusterfs und SSL wurde der SSL modus deaktiviert (20.2.16)]
Iptables:
Durch iptables werden die Ports 111 (Portmapper), 24007-24047, 49152:49160 (Gluster) für alle Zugriffe auf der 134.2.67.* Adresse gesperrt.
Zur persistenten Speicherung der Daten wurde iptables-service installiert und der defaultmäßig verwendete firewalld deaktiviert (vgl: https://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern)
Backup Infrastruktur
Auf dem glusterbackup-Volume stehen für sobek und ptah jeweils 1 T und für die Laptops 500 GB zur Verfügung in den in den jeweiligen Unterverzeichnissen zur Verfügung.
Backup von sobek und ptah.
Backup erfolgt mit rsnapshot jeweils auf das lokale /mnt/glusterbackup
In etc/rsnapshot.conf sind folgende Anpassungen notwendig:
-
snapshot_root auf /mnt/glusterbackup/{sobek,ptah} anpassen
-
no_create_root einkommentieren (Verhindet Backup, falls glusterbackup nicht gemounted ist)
-
da für /dev, /proc, /sys und /mnt Rekursionen entstehen können: exclude patterns werden in
/usr/local/etc/rsnapshot_exclude_patternsangegeben und diese muss als exclude-file angegeben werden -
Eintrag für Logfile einkommentieren
Cronjobs aktivieren
0 22 * * * /usr/bin/rsnapshot daily
0 1 * * 1 /usr/bin/rsnapshot weekly
0 2 1 * * /usr/bin/rsnapshot monthly
Backupstrategie Laptops
Da das exportieren des gluster-Volumes als NFS-Laufwerk ohne Einrichtung einer Kerberos-Infrastruktur zu Sicherheitsproblemen führt, erfolgt der Zugriff über sshfs. Dieses kann per apt-get install sshfs nachinstalliert und durch
[email protected]:/mnt/glusterbackup/$MACHINEDIR /mnt/backup fuse.sshfs noauto,_netdev,identityfile=/home/$USERNAME/.ssh/id_rsa,default_permissions
in fstab regulär als root gemounted werden.
Um keine Probleme mit Dateien von root zu haben, wird ein kryptographischer Container als Datei angelegt, dieser mittels LUKS geöffnet ein eigenes Dateisystem angelegt.
Zuächst kann durch den wiederholten Aufruf von
time openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | pv -s 20G -S >> backup_$HOSTNAME.img
eine randomisierte Datei angelegt werden. Aus Performancegründen sollte dies direkt auf einem der beiden Server in das Verzeichnis /mnt/glusterbackup/$MACHINENAME geschehen. Wichtig ist, darauf zu achten, die Datei als User, nicht als root anzulegen.
Diese Datei kann auf dem Laptop als Loopbackdevice eingebunden werden.
losetup /dev/loop0 /mnt/backup/backup_$HOSTNAME.img
mkdir /mnt/glusterbackup_$HOSTNAME
Formatieren
cryptsetup luksFormat /dev/loop0
cryptsetup luksOpen /dev/loop0 backup_$HOSTNAME
mkfs -t ext4 /dev/mapper/backup_$HOSTNAME
cryptsetup luksClose /dev/mapper/backup_$HOSTNAME
losetup -d /dev/loop0
Öffnen
losetup /dev/loop0 backup_$HOSTNAME.img
cryptsetup luksOpen /dev/loop0 backup_$HOSTNAME
mount /dev/mapper/backup_$HOSTNAME /mnt/glusterbackup_$HOSTNAME
Für das eigentlich Backup kann dann ebenfalls rsnapshot verwendet werden. Zunächst rsnapshot mit apt-get installieren. Unter ptah:/mnt/glusterbackup/backupscripts finden sich einige Skripte. rsnapshot.conf auf den lokalen Rechner nach /etc/ kopieren. rnsnapshot_exclude_patterns lokal nach /usr/local/etc kopieren.
In /etc/rsnapshot.conf müssen folgende Sachen angepasst werden.
root_directoryauf das Mountverzeichnis des geöffneten LUKS-Containers (oben/mnt/glusterbackup_$HOSTNAME)- Im Abschnitt Backup-Points das Zielverzeichnis auf $MACHINENAME
Die Skripte mount_$HOSTNAME_backup erleichtern das Einbinden und Mounten des Containers. Hier sollte die Variable BACKUP_FILE und BACKUP_MOUNT angepasst werden.
rsnapshot -t daily zeigt als Testlauf die Parameter für das intern verwendete rsync an.
Ein Backup kann manuell als root per rsnapshot daily angestoßen werden.
Zur Automatisierung ist eine mögliche crontab-Konfiguration folgende:
0 21 * * * mount -o remount,rw /mnt/glusterbackup_$HOSTNAME &&/usr/bin/rsnapshot daily && mount -o remount,ro /mnt/glusterbackup_$HOSTNAME
0 23 * * 1 mount -o remount,rw /mnt/glusterbackup_$HOSTNAME && /usr/bin/rsnapshot weekly && mount -o remount,ro /mnt/glusterbackup_$HOSTNAME
0 1 1 * * mount -o remount,rw /mnt/glusterbackup_$HOSTNAME && /usr/bin/rsnapshot monthly && mount -o remount,ro /mnt/glusterbackup_$HOSTNAME