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_patterns angegeben 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_directory auf 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