Datenaustausch zwischen VMs

Datenaustausch zwischen VMs  

  By: Forum user on Oct. 18, 2022, 1:03 p.m.

Hallo,

Was wäre denn die performanteste Lösung große Datenmengen die auf einem storage, der an einer VM gemountet ist anderen VMs innerhalb unseres Kontingents zugänglich zumachen, so dass dort gleichzeitg drauf zugegriffen werden kann? Wir haben es mit NFS versucht, allerdings ist der gleichzeitige Datenzuggriff dann sehr langsam.

Wäre der object container eine Lösung? Der ist soweit ich weiß 'nur' über S3 zugänglich - was ja an sich auch nicht sehr schnell ist. Wie groß ist der Speicherplatz für object container eigentlich?

Wäre für jeden Tip dankbar.

Patric

 Last edited by: Forum user on Oct. 18, 2022, 1:04 p.m., edited 1 time in total.

Re: Datenaustausch zwischen VMs  

  By: StefanK on Nov. 8, 2022, 8:32 a.m.

Um die beste Performance erreichen zu können, wird die Einbindung über s3cmd empfohlen.

Stefan

Re: Datenaustausch zwischen VMs  

  By: Forum user on Nov. 10, 2022, 10:20 a.m.

Hallo, hier ein kurzer Erfahrungsbericht aus den letzten Monaten, um mit große Datenmengen auf mehreren VMs zu arbeiten.

Warum haben wir große Datenmengen?:

Wir produzieren deutschlandweite Produkte aus Fernerkundungsdaten für die Landwirtschaft. Dafür benötigen wir gut vorprozessierte analysefertige Sentinel-Daten. So wie die Daten jedoch auf CODE-DE bereitgestellt werden, wäre es sehr aufwändig deutschlandweite Produkte zu produzieren. Wir haben deswegen das gesamte S2-Archiv von CODE-DE nochmals komplett weiter prozessiert, damit wir analysefertige Datensätze haben (10 Bänder, resampling auf 10 m, wolkenmaskiert, nichtüberlappende 10km-Kacheln, Wolkenbedeckungsgrade in Metadaten). Nun liegen Stand heute (10.11.2022) 42 TB an Sentinel-2 Daten auf einer unserer Maschinen. Diese Daten sollen aber auf jeder Maschine im CODE-DE-Kontingent verfügbar sein.

Es kommt natürlich immer darauf an, was man machen möchte.
Wir nutzen 3 verschiedenen Methoden um mit den Daten auf verschiedenen VMs (alles Ubuntu) zu arbeiten.


1. RSYNC zum kopieren von Daten auf andere Maschinen

rsync synchronisiert Daten zwischen zwei Ordnern, auch von einer Maschine zur anderen. Der Befehl dafür lautet:

nohup rsync -ratlz --progress --rsh="/usr/bin/sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no -l USER" /path/to/data/ 10.0.0.XXX:/path/to/remote/directory/ > /path/for/logfile/log_file_name.log 2>&1 &

rsync -ratlz
rsync ist das eigentliche Kommando, was mit den zusätzlichen Optionen -ratlz ausgeführt wird. Infos zu den Optionen hier: https://wiki.ubuntuusers.de/rsync/

rsync –progress
progress zeigt den aktuellen Verlauf des Kopiervorganges an.

--rsh="/usr/bin/sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no -l USER"
Im Hintergrund wird eine ssh Verbindung aufgebaut, wofür die sofware sshpass genutzt wird. USER ist hier der Benutzername der Zielmaschine u nd dessen PASSWORT.

path/to/data/
Pfad zu den Daten, die kopiert wereden sollen.

10.0.0.XXX:/path/to/remote/directory/
IP-Adresse zur Zielmaschine und Pfad, wo die Daten hin kopiert werden sollen.

nohup process > logfile 2>&1 & (optional!)
Mit nohup startet man Prozesse, die im Hintergund laufen. Man kann nach der Ausführung die Verbindung zur VM schließen und der Prozess läuft weiter. Der Fortschritt wird in die Log-File geschrieben, die mit tail -f /path/to/logfile.log überwacht werden kann.

/path/for/logfile/log_file_name.log
Pfad, wo die Logfile abgespeichert werden soll


2. NFS zur langfristigen Bereitstellung von Daten auf anderen Maschinen

Mit NFS kann ein Ordner von einer Maschine (host) auf einer anderen direkt in die Ordnerstruktur einer anderen Maschine (client) eingebunden werden.

Hier eine Kurzanleitung, wie die NFS-Verbindung aufgebaut wird:

host side

(Die Maschine, wo die Daten liegen.)

  • benötigte Software-Produkte: sudo apt-get update && sudo apt-get install nfs-kernel-server nfs-common
  • sudo nano /etc/exports add lines like the following to define the permissions in the network
    read/write permissions to specific client: /path/to/folder/host_folder 10.0.0.XXX(rw,async,no_subtree_check,no_root_squash)
    only read permissions to specific client: /path/to/folder/host_folder 10.0.0.XXX(ro,async,no_subtree_check,no_root_squash)
  • sudo exportfs -arvf
  • sudo systemctl start nfs-kernel-server
  • sudo systemctl enable nfs-kernel-server
  • sudo systemctl status nfs-kernel-server

client side

(Die Maschine, wo die Daten verwendet werden sollen.)

  • benötigte Software-Produkte: sudo apt-get update && sudo apt-get install nfs-common
  • create new folder sudo mkdir /path/to/your/folder/client_folder
  • in sudo nano /etc/fstab add following line to the bottom
    10.0.0.XXX:/path/to/the/host_folder /path/to/the/client_folder nfs defaults,_netdev 0 0
  • sudo reboot

3. S3 buckets zur langfristigen Bereitstellung von Daten auf CODE-DE und darüber hinaus

CODE-DE stellt auch sogenannten object store zur Verfügung. Das charmante an den objects storages ist, dass man sehr einfach einen öffenlichen Link zur Verfügung stellen kann, ohne eine seiner Virtuellen Maschinen im Internet sichtbar machen zu müssen. Die S3-Buckets sind daher das ideale Mittel große Mengen an Daten mit Partnern zu teilen.

In diesem Speicher können Container (Ordner) erstellt werden. In der CODE-DE Hilfe kann man beides finden, wie ein Container erstellt wird und wie man diesen in seine Maschine einbindet:

Create S3 bucket on CODE-DE
SOURCE here

Mount S3 bucket as folder in your Virtual machine
SOURCE here

Das Einbinden des S3-Buckets in die Ordnerstuktur, sowie das Kopieren und Lesen erwies sich jedoch bei unseren Tests als sehr fehleranfällig. Daher nutzen wir eine Python API für das Verwalten und die Nutzung der Buckets. Das Python-Paket hierfür heißt boto3.

 Last edited by: Forum user on Nov. 10, 2022, 10:45 a.m., edited 23 times in total.