InfluxDB Update Version 1.x auf 2.x

Aus Laub-Home Wiki

Wer bereits eine lauffähige InfluxDB Version 1 hat und dies auf Version 2 Updaten möchte, der muss einiges beachten. Ich habe hier ein Docker Setup in der die InfluxDB in Version 1.8 Daten von openHAB 3 bekommt und Grafana diese ebenfalls verwendet um Dashboards mit diversen Grafiken anzuzeigen. Voraussetzung für das Update ist, dass ihr auf einem von InfluxDB v2.x unterstützen System unterwegs seid. Ich nutze einen Raspberry Pi 4 mit einer Raspberry Pi OS 64bit Installation.

Vorbereitung

Bevor ihr mit irgendetwas anfangt, macht bitte ein Backup eurer InfluxDB und sichert diese im besten Fall außerhalb des Systems.

Was sicherlich auch hilft, ist das ihr einmal eine InfluxDB v2 Installation macht um euch ein wenig vertraut damit zu machen.

Das ursprüngliche Setup der InfluxDB v1 (hier 1.8) sieht wie folgt aus:

docker-compose.yml

...
  influxdb:
    image: influxdb:1.8
    restart: always
    ports:
      - ${INFLUXDB_HTTP_PORT}:8086
    environment:
      - INFLUXDB_DATA_ENGINE=tsm1
      - INFLUXDB_REPORTING_DISABLED=false
      - INFLUXDB_ADMIN_USER=${INFLUXDB_ADMIN_USER}
      - INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_ADMIN_PASSWORD}
      - INFLUXDB_USER=${INFLUXDB_USER}
      - INFLUXDB_USER_PASSWORD=${INFLUXDB_USER_PASSWORD}
      - INFLUXDB_READ_USER=${INFLUXDB_READ_USER}
      - INFLUXDB_READ_USER_PASSWORD=${INFLUXDB_READ_USER_PASSWORD}
      - INFLUXDB_DB=${INFLUXDB_DB}
      - INFLUXDB_HTTP_LOG_ENABLED=false
      - INFLUXDB_META_LOGGING_ENABLED=false
      - INFLUXDB_DATA_QUERY_LOG_ENABLED=false
      - INFLUXDB_LOGGING_LEVEL=warn
      - TZ=${TZ}
    labels:
        com.centurylinklabs.watchtower.enable: "true"
    volumes:
      - data_influxdb:/var/lib/influxdb
    networks:
      backend-nw:
        aliases:
          - influxdb
...

...
volumes:
  data_influxdb:
...

Die Konfiguration hierzu im .env file sieht wie folgt aus: .env

# InfluxDB Configuration
INFLUXDB_HTTP_PORT=8086
INFLUXDB_ADMIN_USER=admin
INFLUXDB_ADMIN_PASSWORD=bijpagPakurrapni
INFLUXDB_DB=openhab_db
INFLUXDB_USER=openhab
INFLUXDB_USER_PASSWORD=havpijpexCofpit9
INFLUXDB_READ_USER=openhab_ro
INFLUXDB_READ_USER_PASSWORD=keHattOjElGhidaw

Update

Um nun das Update auszuführen, stoppen wir zunächst den Container:

docker-compose stop influxdb

dann editieren wir zunächst die .env Konfigurationsdatei wie folgt:

.env

# InfluxDB Configuration
INFLUXDB_HTTP_PORT=8086
#INFLUXDB_ADMIN_USER=admin
#INFLUXDB_ADMIN_PASSWORD=bijpagPakurrapni
#INFLUXDB_DB=openhab_db
#INFLUXDB_USER=openhab
#INFLUXDB_USER_PASSWORD=havpijpexCofpit9
#INFLUXDB_READ_USER=openhab_ro
#INFLUXDB_READ_USER_PASSWORD=keHattOjElGhidaw
INFLUXDB_INIT_MODE=upgrade
INFLUXDB_INIT_USERNAME=admin
INFLUXDB_INIT_PASSWORD=password
INFLUXDB_INIT_ORG=myorg
INFLUXDB_INIT_BUCKET=openhab_db
INFLUXDB_INIT_ADMIN_TOKEN=hadsfererfrvd3452356vpijpexCofpit9
INFLUXD_LOG_LEVEL=info

Ändert das Passwort, die Organisation und den Token ab. Der Bucket Name entspricht dem Datenbanknamen von der alten Installation.

Nun passen wir noch das docker-compose.yml an:

docker-compose.yml

...
  influxdb:
    image: influxdb:latest
    restart: always
    ports:
      - ${INFLUXDB_HTTP_PORT}:8086
    environment:
      #- INFLUXDB_DATA_ENGINE=tsm1
      #- INFLUXDB_REPORTING_DISABLED=false
      #- INFLUXDB_ADMIN_USER=${INFLUXDB_ADMIN_USER}
      #- INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_ADMIN_PASSWORD}
      #- INFLUXDB_USER=${INFLUXDB_USER}
      #- INFLUXDB_USER_PASSWORD=${INFLUXDB_USER_PASSWORD}
      #- INFLUXDB_READ_USER=${INFLUXDB_READ_USER}
      #- INFLUXDB_READ_USER_PASSWORD=${INFLUXDB_READ_USER_PASSWORD}
      #- INFLUXDB_DB=${INFLUXDB_DB}
      #- INFLUXDB_HTTP_LOG_ENABLED=false
      #- INFLUXDB_META_LOGGING_ENABLED=false
      #- INFLUXDB_DATA_QUERY_LOG_ENABLED=false
      #- INFLUXDB_LOGGING_LEVEL=warn
      - DOCKER_INFLUXDB_INIT_MODE=${INFLUXDB_INIT_MODE}
      - DOCKER_INFLUXDB_INIT_USERNAME=${INFLUXDB_INIT_USERNAME}
      - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_INIT_PASSWORD}
      - DOCKER_INFLUXDB_INIT_ORG=${INFLUXDB_INIT_ORG}
      - DOCKER_INFLUXDB_INIT_BUCKET=${INFLUXDB_INIT_BUCKET}
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_INIT_ADMIN_TOKEN}
      - INFLUXD_LOG_LEVEL=${INFLUXD_LOG_LEVEL}
      - TZ=${TZ}
    labels:
        com.centurylinklabs.watchtower.enable: "true"
    volumes:
      - data_influxdb:/var/lib/influxdb
      - "./data/influxdb2/conf:/etc/influxdb2"
      - data_influxdb2:/var/lib/influxdb2
...
...
volumes:
  data_influxdb:
  data_influxdb2:
...

Wir kommentieren erst einmal alle alten Konfigurationsoptionen aus. Dann ändern wir das Docker Image von Version 1.8 auf latest (oder gerne auch direkt eine 2.x Version pinnen). Zum Schluss fügen wir noch zwei neue Volume mountpoints hinzu, einen für den Config Ordner und eine für das Datenvolume selbst. Das Volume fügen wir ebenfalls bei der Volume liste ein.

Dann erstellen wir den Config Ordner:

mkdir -p data/influxdb2/conf

und fahren den Container hoch:

docker-compose up -d

Ihr könnt nun den Status im upgrade.log einsehen:

data/influxdb2/conf/upgrade.log

wenn dort die Zeile auftaucht, das das Update complete ist, dann könnt ihr den InfluxDB Container final umbauen:

{"level":"info","ts":1651425245.1665611,"caller":"upgrade/upgrade.go:489","msg":"Upgrade successfully completed. Start the influxd service now, then log in","login_url":"http://localhost:8086"}

Dafür editieren wir wieder das config file:

.env

INFLUXDB_INIT_MODE=setup
...
INFLUXD_LOG_LEVEL=warn

und schmeißen noch das alte Volume raus:

docker-compose.yml

...
    volumes:
      #- data_influxdb_influxdb:/var/lib/influxdb
...
...
volumes:
  #data_influxdb_influxdb:
...

und lassen mit den Änderungen den Container wieder starten:

docker-compose up -d

Wenn alles geklappt hat solltet ihr mit den im .env file vergebenen credentials euch am Webinterface einloggen können:

  • http://YOURSERVERNAME:8086

Aufräumen

Wenn alles wie gewünscht läuft könnt ihr noch das alte Docker Volume löschen und alle auskommentieten Zeilen aus dem docker-compose.yml und dem .env File schmeißen.

Im Webinterface könnt ihr dann auch noch die Buckets umbenennen, falls euch die neuen Namen nicht gefallen. (Data --> Buckets)

Falls ihr Grafana im Einsatz habt und wollt das wieder die InfluxQL funktioniert, schaut hier weiter:

Quellen