DevOps / onPremis Themen

Wiederherstellung nach Datenbankmanagement System Fehlern

Hintergrund

Das durch rocklog Edge genutzte Datenbankmanagement System wird durch einen oder mehrere Docker Container bereitgestellt. Durch Konfigurationsfehler oder den nicht-konsistenten Zustand der Datenbank kann der Aufstart des entsprechenden Containers verunmöglicht werden. Die Laufzeitumgebung (docker compose) versucht in diesem Fall den oder die Docker Container neu zu starten. Eine manuelle Verbindung mit dem Docker Container ist in diesem Falle nicht möglich und somit auch keine Korrektur der fehlerhaften Konfiguration oder der inkonsistenten Datenbank.


Das docker-compose.yaml im repository werner-docker enthält zum Recovery aus solchen Situationen ein profil-abhängigen service

postgres-recovery

Dieser kann manuell gestartet werden und nutzt dasselbe Image wie der Docker Container, welche die Datenbank und die DBMS Konfiguration umfasst.

Innerhalb dieses Containers stehen die Editoren nano,vim sowie emacs zur Verfügung.

Durchführen einer Recovery

Der nicht durchführbare Aufstart des DBMS Containers äussert sich wie folgt:

WARN[0000] /home/gix/develop/werner/werner-docker/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
WARN[0000] volume "test_postgres-data" already exists but was not created by Docker Compose. Use `external: true` to use an existing volume 
WARN[0000] volume "test_postinstall-done" already exists but was not created by Docker Compose. Use `external: true` to use an existing volume 
[+] Running 4/0
 ✔ Container test-postgres-1     Created                                                                                                                                                                                                                                                                                 0.0s 
 ✔ Container test-postinstall-1  Created                                                                                                                                                                                                                                                                                 0.0s 
 ✔ Container test-testdata-1     Created                                                                                                                                                                                                                                                                                 0.0s 
 ✔ Container test-keycloak-1     Created                                                                                                                                                                                                                                                                                 0.0s 
Attaching to keycloak-1, postgres-1, postinstall-1, testdata-1
postgres-1     | 
postgres-1     | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres-1     | 
postgres-1     | 2024-08-07 08:35:23.147 GMT [1] LOG:  invalid value for parameter "wal_level": "replica_foo"
postgres-1     | 2024-08-07 08:35:23.147 GMT [1] HINT:  Available values: minimal, replica, logical.
postgres-1     | 2024-08-07 08:35:23.147 UTC [1] FATAL:  configuration file "/var/lib/postgresql/data/pgdata/postgresql.conf" contains errors
postgres-1 exited with code 1
postgres-1     | 
postgres-1     | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres-1     | 
postgres-1     | 2024-08-07 08:35:23.648 GMT [1] LOG:  invalid value for parameter "wal_level": "replica_foo"
postgres-1     | 2024-08-07 08:35:23.648 GMT [1] HINT:  Available values: minimal, replica, logical.
postgres-1     | 2024-08-07 08:35:23.648 UTC [1] FATAL:  configuration file "/var/lib/postgresql/data/pgdata/postgresql.conf" contains errors
postgres-1     | 
postgres-1     | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres-1     | 
postgres-1     | 2024-08-07 08:35:24.279 GMT [1] LOG:  invalid value for parameter "wal_level": "replica_foo"
postgres-1     | 2024-08-07 08:35:24.279 GMT [1] HINT:  Available values: minimal, replica, logical.
postgres-1     | 2024-08-07 08:35:24.280 UTC [1] FATAL:  configuration file "/var/lib/postgresql/data/pgdata/postgresql.conf" contains errors

Beenden der Docker Container

Vor der Bearbeitung des Volumes mit den Konfigurationen und Daten des DBMS müssen die beteiligten Container zwingend heruntergefahren werden

docker compose -p <project> down

Start des recovery containers

docker compose -p <project> --profile recovery up postgres-recovery

Verbindung zum recovery container herstellen

❯ docker exec -it test-postgres-recovery-1 bash
root@565d0b143c25:/#

Die Konfigurationsdaten befinden sich in /var/lib/postgresql/data/pgdata/

Nach der Durchführung der Anpassungen muss der Container beendet werden.

Start der Anwendung im normalen Modus

anschliessend erfolgt der Start der Anwendung im normalen Modus durch die Ausführung des scripts im übergeordneten Verzeichnis

./start.sh <project> .env.<project> run

oder den manuellen Start mittels

docker compose --env-file ../.env.<project> -p <project> --profile additional_services up -d
Previous
Endgerätesynchronisation