Umstieg auf Influx 3.x Enterprise ohne Datenverlsut - hier mit Docker

PDF Dokumente für Informationen im Detail, sowie Bauanleitungen. Alles, was man wissen sollte. Bei Fragen, bitte erst einmal hier vorbeischauen.

Moderator: Ulrich

Paul1984
Beiträge: 53
Registriert: Mo 6. Mär 2023, 21:00
Danksagung erhalten: 2 Mal

Umstieg auf Influx 3.x Enterprise ohne Datenverlsut - hier mit Docker

Beitrag von Paul1984 »

Guten Morgen,

ich möchte hier ein kurzes How-To geben für alle, die mit ihrer externen Datenbank auf Influx 3 umsteigen wollen. Ich habe das gerade erfolgreich gemacht. Der Vorteil - dadurch das Influx 3 mit InfluxQl kompatibel ist, muss weder an der Solaranzeige noch in Grafana groß was geändert werden.

Ich nutze hierfür Influxdb 3.9.2 - Enterprise - mit Home Licence. Da müst ihr euch keine Gedanken machen was Kosten angeht und es ist immer noch schneller und platzsparender als Influx 1.

So bin ich vorgegangen:

Zunächst habe ich mit Docker einen schnellen Container für Influx 3.9 gemacht und gestartet um die Lizenz zu holen - dies hat bei mir mit Portainer nicht funktioniert - vor allem da ich das über ein NAS und Synology mache. Hier muss man kurz starten und dann auswählen, ob man eine Trial Lizenz nutzen möchte oder die Home-Version. Diese ist von der Leistung beschnitten, aber man hat eine Lifetime Lizenz. Die Lizenz kann man sich dann aus dem Influx Odner den man gemountet hat einfach raus kopieren und am besten auch den Schlüssel sichern.

Anschließend habe ich das ganze als Stack bei Portainer erstellt, weil es einfacher in Zukunft ist.

Code: Alles auswählen

services:
  influxdb3-enterprise:
    image: influxdb:3.9.2-enterprise
    ports:
      - 8181:8181 
    command:
      - influxdb3
      - serve
      - --node-id=node0
      - --cluster-id=cluster0
      - --object-store=file
      - --data-dir=/var/lib/influxdb3/data
      - --plugin-dir=/var/lib/influxdb3/plugins  # Optional: only needed for processing engine plugins
    environment:
     - INFLUXDB3_ENTERPRISE_LICENSE_TYPE=home
     - INFLUXDB3_ENTERPRISE_LICENSE_EMAIL=deine@email
    networks:
      macvlan:
        ipv4_address: 192.168.xxx.xxx
    volumes:
      - type: bind
        # Path to store data on your host system
        source: /xxx/docker/influxdb3/data
        # Path to store data in the container
        target: /var/lib/influxdb3/data
      - type: bind
        # Path to store plugins on your host system
        source: /xxx/docker/influxdb3/plugins
        # Path to store plugins in the container
        target: /var/lib/influxdb3/plugins

networks:
  macvlan:
    external: true
Wenn das ganze dann gestartet ist, muss man sich ein Admin-Token in der Influxdb erstellen und ganz wichtig SPEICHERN!! - ohne geht nix mehr in Influx 3.

Code: Alles auswählen

influxdb3 create token --admin
Hier die Doku: https://docs.influxdata.com/influxdb3/e ... ted/setup/

Dann sollte Influx schon laufen wenn alles passt. Bei der Solaranzeige und Grafana müsst ihr dann die Datenquelle nur auf die IP+Port der Influx 3 ändern - oder neu erstellen - und bei Username und Passwort eure Token Daten angeben. Das wird in der Regel admin und das Token sein. Aber ihr könnt natürlich auch andere Token erstellen.

Datenübertragung:
Bisher hatte mich der Datenverlust davon abgehalten, aber letztes Wochenende habe ich mich dran gesetzt und tatsächlich alle Daten aus der Influx 1.x in die neue DB übertragen. Hier kann euch KI gut helfen!
Kleine Vorbemerkung - da ich Linux nutze, beschreibe ich wie ich es mit Linux gemacht habe. Wenn ihr Windows nutzt könnt ihr KI zum adapten nutzen.

So bin ich vorgegangen:

1. Daten aus Influx 1 exportieren:
Im Container:
influx_inspect export \
-datadir "/var/lib/influxdb/data" \
-waldir "/var/lib/influxdb/wal" \
-out "/var/lib/influxdb/data/EureDatenbank_export.lp" \
-database "EureDatenbank"

Influx erstellt nun eine Datei in eurem Influxdb/data Ordner die EureDatenbank_export.lp ist. Dies habe ich für jede meiner 5 Datenbanken gemacht. Die Dateien waren natürlich mit ein paar GB inzwischen riesig.

2. Daten vorbereiten:
Für eine einzelne Datei sähe die Übertragung dann so aus:

Code: Alles auswählen

curl --request POST "http://192.168.xxx.xxx:8181/api/v2/write?bucket=EureDatenbank&precision=ns" \
  --header "Authorization: Token EUER_TOKEN" \
  --data-binary @EureDatenbank_export.lp
Hier kommt auch das Problem - so große Datenmengen bringen erstmal eine Fehlermeldung und euer NAS dann auch schnell an die Grenzen, daher müsst ihr das aufteilen. Ich habe den Container zunächst nicht begrenzt, was bei mir dann erstmal dazu geführt hat, dass das NAS zwei mal beim Import abgeschmiert ist! Ich habe daher den Container kurz gestoppt und dann in Synology den RAM den der Container nutzen darf auf 75% begrenzt und die CPU-Prorität auf Niedrig gestellt weil die Home-Licence Version eh begrenzt ist.
Dann habe ich die Exporte aufgeteilt - hier habe ich einfach den Influx Ordner auf dem NAS in Linux gemountet und dann per Rechtklick "in Terminal öffnen" ausgewählt und dann folgende Befehle verwendet:

Code: Alles auswählen

split -l 20000 EureDatenbank_export.lp EureDatenbank_chunk_
- Hier teilt er die Datenbank in kleine Stücke mit je 20k einträgen. Es entstehen also (bei mir) ein paar Tausend datenen die dann Alphabetisch sortiert sind - *aa, *ab, *ac....usw.

Dann müsst ihr noch beachten, dass beim export die erste Zeile nicht nur zahlen sind sondern auch für Influx3 unleserliche Werte, daher würde Influx die erste Datei nicht importieren sondern einen Fehler melden. Daher habe ich das aus der ersten Datei jeweils bereinigen müssen:

Code: Alles auswählen

grep -v '^#' EureDatenbank_chunk_aa.lp | grep -v '^CREATE' | grep -v '^$' > EureDatenbank_chunk_aa.lp
- wobei ich nicht sicher bin ob er überschreibt, sonst müsst ihr die hinten dran hängen.

3. Nun ist alles bereit für den Import:

Code: Alles auswählen

for file in EureDatenbank_chunk_*; do
  echo "Sende Datei: $file ..."
  curl --request POST "http://192.168.xxx.xxx:8181/api/v2/write?bucket=EureDatenbank&precision=ns" \
    --header "Authorization: Token EUER_TOKEN" \
    --data-binary @"$file"
    sleep 10 
done
ohne Aufteilung und sleep10 war mein System wie gesagt recht schnell voll und ist abgestürzt.

Das positive: Falls was schiefgeht, könnt ihr einfach nochmal importieren - Influx 3 speichert keine Daten doppelt ab.

Falls ihr beim Export zeitlich begrenzt etwas exportieren wollt aus der Influx1:

Code: Alles auswählen

influx_inspect export \
  -datadir "/var/lib/influxdb/data" \
  -waldir "/var/lib/influxdb/wal" \
  -out "/var/lib/influxdb/data/EureDatenbank.lp" \
  -database "EureDatenbank" \
  -start "2023-12-01T22:00:00Z" \
  -end "2023-12-31T21:59:59Z"
als Beispiel für einen Zeitraum im Dezember 2023....

Zurück zu „Dokumente, Bauanleitungen und How To's“

Wer ist online?

Mitglieder in diesem Forum: HJF und 0 Gäste