Migrationservice - Einrichtung/Verwendung

Migrationservice - Einrichtung/Verwendung

Um Volltext-Daten zu migrieren, kann man den Migrationservice verwenden. Er ist ab 10.10 verfügbar und Bestandteil des Servicemanagers. 

Bitte beachten: Das Tool ist nur nötig bei Volltextmigration von enaio 8.50 oder eanio 9.00 auf enaio ab 10.10. Ab enaio 9.10 ist dies nicht mehr nötig, siehe Artikel zur Volltextmigration. Grund: Ab enaio 9.10 wird ElasticSearch 7 verwendet. Dieser ist updatefähig. Nur ElasticSearch 6 oder älter muss migriert werden.  

 

nachfolgend beschrieben:


Die Voraussetzungen sind:

  • Die neue Serverlandschaft ist installiert (Minimum: 1 Applikationsserver, Documentviewer, Servicemanager, ElasticSearch; besser: alle Basis-Kerndienste, also auch Gateway ...).

  • Die produktive Datenbank und das WORK-Verzeichnis müssen nicht geklont werden. Es findet "nur" eine Übertragung der Daten von ElasticSearch alt zu ElasticSearch neu statt. Das Schreiben übernimmt der Indexservice.

  • Je nach Größe des Volltextes kann es sinnvoll sein, die Replication vor der Migration zu aktivieren. 

  • Unbedingt die aktuellste migration-app.jar verwenden, bei enaio mind. 10.10.10 (ab 01.06.2023) verwenden.

 

Infos zum Ablauf der Migration:

  • Der Migrationservice ermittelt Daten aus dem alten ElasticSearch und übergibt sie dem Indexservice zum Schreiben.

  • Aktuell verarbeitet das Tool die Daten nach Indizierungsdatum. Ordner zuerst, dann Register und zuletzt Dokumente.

  • Es werden der Reihe nach 3 bzw. 4 Jobs ausgeführt: Reindex, Autocomplete (2 Jobs - einer zum Anlegen und einer zum Füllen) und Check-Job.

  • Es gibt eine GUI bei der man prüfen kann, wie weit die Migration ist. Der Service schreibt seinen Stand in die ElasticSearch-Datenbank (neues System). Sollte ein Neustart Servicemanager, ElasticSearch oder Server nötig sein, setzt das Tool an der Stelle auf, bei der es zuletzt war. 

  • im Migrationservice gibt es eine GUI über die man verfolgen kann, wie der Stand ist.

  • Sollte der Check-Job fertig sein und Daten sollen noch einmal verarbeitet werden müssen, kann man dies über die GUI aktivieren. 

  • Empfehlung: Wenn alle Jobs fertig sind, unbedingt das Datum prüfen und die Anzahl bzw. Vollständigkeit. 

 

 

Problembehandlung:

 Was tun, wenn es Probleme bei der Volltextmigration gibt - Migrationservice?

 

Wichtige Empfehlung:

  • Bei beiden ElasticSearch-Server (alt und neu) prüfen, ob es Alias-Namen für enaioblue und autocomplete gibt. Falls nicht, bitte anlegen, siehe ElasticSearch: Wie kann man den Alias-Namen setzen/erstellen/löschen?
    Ziel: enaioblue und autocomplete sind vorhanden, Beispiel:

  • Bitte unbedingt die aktuelle Migrations-JAR-Datei (ab 10.10.10 - JAR vom 01.06.2023) verwenden. 
    Bitte beachten: der default-Scroll-Wert ist 100 und nicht 1000. Welcher Wert es ist, sieht man im Log des Servicemanagers. Suche nach "scroll" für service "migration.8048". Beispiel: Vor der Änderung war es 100, nach der Änderung 1000.

 

Einrichtung Migrationservice ab enaio 10.10 (Kurzform und ausführlich)

Diese Schritte sollten ausgeführt werden bei Update auf enaio ab 10.10 von enaio Versionen kleiner 9.10. Im nachfolgenden Beispiel: IP 10.253.65.209 = alter Server, IP 10.253.65.67 = neuer Server 

  1. neuen ElasticSearch installieren
    Neuen ElasticSearch installieren wie gewohnt und die neue/leere Datenbank anlegen und mit Passwort versehen, am besten schon mit der gewünschten neuen Shard-Anzahl. Wenn der Indexservice einmal korrekt läuft, empfiehlt es sich, den ElasticSearch zu beenden und einmal die ElasticSearch-Datenbank zu sichern. Am besten das ganze ElasticSearch-Verzeichnis einmal kopieren oder in ein ZIP packen. Sollte bei der Migration etwas schief laufen oder sollte bei Produktivsetzung ein Reset der ElasticSearch-Datenbank gewünscht sein (inkl. erneute komplette Übertragung der Volltextdaten), kann man einfach den ElasticSearch beenden und die Sicherung der leeren Datenbank wieder einspielen. 

  2. Servicemanager + Migrationservice installieren
    Servicemanager 10.10 installieren (sofern noch nicht geschehen) mit Migration-Service, am besten auf dem Server, auf dem der Indexservice läuft (und idealerweise auch der ElasticSearch). Bitte die Version migration.jar ab 12.09.2022 (besser die Version ab 13.01.2023) verwenden, siehe DB-6625. In Kürze gibt es auch eine verbesserte Version als Versionsfix. 
    Empfehlung: ElasticSearch auf dem gleichen Server installieren mit Servicemanager mit Migrationservice

  3. Zugriffe prüfen
    Portfreigabe für das Migration-Service prüfen und ggfls. anpassen. Port = 8048. Außerdem sollte der Port 8041 erreichbar sein für den alten und neuen ElasticSearch-Server

  4. alten ElasticSearch anpassen

    1. elasticsearch.yml sichern 

    2. elasticsearch.yml anpassen
      network.host: von local oder 127.0.0.1 auf IP-Adresse, Bsp.:

      network.host: 10.253.65.209 
    3. intrafind.security.subnet anpassen:
      erweitern um die IP-Adresse des neuen ElasticSearch-Servers
      Bei einigen ElasticSearch-Versionen ist dieser Parameter in der config-Datei intrafind.yml. Bsp.:

      intrafind.security.subnet: '127.0.0.1,0:0:0:0:0:0:0:1,10.253.65.209, ...,10.253.65.67'
    4. elasticsearch.yml anpassen
      reindex.remote.whitelist hinzufügen oder falls der Parameter vorhanden sein sollte, erweitern um die IP-Adresse des neuen ElasticSearch. Bsp.:

      reindex.remote.whitelist: 10.253.65.67:8041
    5. den alten ElasticSearch stoppen und starten 

    6. testen, ob die URL des alten ElasticSearch erreichbar ist vom alten und neuen Server, Bsp.: http://10.253.65.209:8041/_cat/shards?v

  5. auf dem neuen Server die Konfiguration für das Migrations-Service anpassen:
    migration-prod.yml

    1. Wenn Indexservice und neue ElasticSearch auf dem gleichen Server sind, wie der Migrations-Service, dann genügen diese Einträge:

      source:   elasticsearch:     hosts: 10.253.65.209:8041

      Empfehlung: Gleich den Timeout setzen und Scrollsize, das genügt z. Bsp.: 

    2. sollte der neue ElasticSearch auf einem anderen Server liegen als der Migrationservice, müssen zusätzlich noch nachfolgende Punkte hinzugefügt werden. Ansonsten diese Punkte weglassen (der Migrationservice findet den Indexservice und ElasticSearch selbst über die Konfiguration des Servicemanager in dem er läuft): 

      elasticsearch:   hosts: 10.253.65.67:8041   user: elastic   pwd: Co7hySEyhBCLJaWYLXiV

      Weitere Parameter sind hier aufgelistet: Migration service 10.10.x

  6. Migrationservive neu laden oder Servicemanager neu starten.

  7. Service-Manager-Logs prüfen auf Fehler. Wenn alles gut läuft, dann steht im Log, dass es sich verbindet mit dem alten ElasticSearch. Es liest die Version aus etc. 

    Um herauszufinden, ob der Migration läuft, entweder die GUI des Services aufrufen: http://10.253.65.67:8048 siehe nachfolgend "GUI des Migrationservice"

    oder auf dem neuen ElasticSearch diese URL aufrufen: http://10.253.65.67:8041/systeminfo/_search

    Hier wird angezeigt, ob der Migrations-Job noch läuft und die aktuelle Object-Id + Typ.
    Beispiel: 

    {"took":794,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":5,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"systeminfo","_type":"_doc","_id":"j52yGIMBmXdYK6XBoGod","_score":1.0,"_source":{"id":"j52yGIMBmXdYK6XBoGod","reason":"hotfix","result":"parent data update job is never done","begin":"2022-09-12T21:02:35Z","fromversion":"10.10.6","toversion":"10.10.6","laststate":0,"action":"parent data update"}},{"_index":"systeminfo","_type":"_doc","_id":"aMENGIMBrGyWLddeVT4O","_score":1.0,"_source":{"reason":"update","begin":"2022-09-07T13:04:30Z","fromversion":"\u003e\u003d 8.50.14","toversion":"10.0.14","laststate":0,"lastindexedid":"null;0","lastcheckedid":"null;0","action":"index delta"}},{"_index":"systeminfo","_type":"_doc","_id":"objdef","_score":1.0,"_source":{"hashvalue":"53C94AE915BD0AF446FA55399545FE51"}},{"_index":"systeminfo","_type":"_doc","_id":"idxinfo","_score":1.0,"_source":{"version":0}},{"_index":"systeminfo","_type":"_doc","_id":"zcqbNYMBrfwk3VwCxE4S","_score":1.0,"_source":{"reason":"update","begin":"2022-09-13T06:49:04Z","fromversion":"< 8.50.14","toversion":"10.10.7","laststate":0,"action":"migration reindex job processing","lastindexedid":"2022-09-13T06:49:04Z;folder;22;105340665"}}]}}

    Wenn man die ID des Jobs kopiert und in diese URL einträgt, bekommt man nur die Job-Infos. Bitte nicht irritieren lassen, der Job heißt "migration reindex job processing" auch wenn er beendet ist. Reason beinhaltet den Status:
    http://10.253.65.67:8041/systeminfo/_doc/zcqbNYMBrfwk3VwCxE4S
    Beispiel:

    {"_index":"systeminfo","_type":"_doc","_id":"zcqbNYMBrfwk3VwCxE4S","_version":5652,"_seq_no":6110,"_primary_term":4,"found":true,"_source":{"reason":"update","begin":"2022-09-13T06:49:04Z","fromversion":"< 8.50.14","toversion":"10.10.7","laststate":0,"action":"migration reindex job processing","lastindexedid":"2022-09-13T06:49:04Z;folder;3;10594035"}}

    Aktuell verarbeitet das Tool die Daten nach Indizierungsdatum. Ordner zuerst, dann Register und zuletzt Dokumente. Im Log des Servicemanagers wird die query ausgegeben und ein Zähler, wie viele verarbeitet bzw. offen sind. Damit weiß man, in welchem Zeitraum die Migration gerade arbeitet. Beispiel:
    Die Migration ist hier bei Dokumenten im Zeitraum bis 09.05.2020 und ID größer 0.

    POST http://<ElasticSearch-Server-Source>:8041/enaioblue/_search

    Body:  {"size": 5000, "_source": false, "sort": ["indexed", "objid"],  "query": {"bool": {"filter": [{"exists": {"field": "fulltextwanted"}},           {"exists": {"field": "inactivevariant"}},           {"exists": {"field": "recycled"}},           {"term": {"category": "document"}},           {"range": {"indexed": {"gte": "1970-01-01T00:00:00Z","lt": "2020-05-09T21:48:06.177Z"}}},           {"range": {"objid": {"gt": "0"}}}          ]      }   }}
  8. Nun heißt es abwarten, bis das Tool fertig ist. Es werden der Reihe nach 3 Jobs ausgeführt: Reindex, Autocomplete und Check-Job
    Wichtig: Da der Indexservice die Daten schreibt, das Servicemanager-Log auf Einträge von Migration- und Indexservice prüfen. 

  9. Bei Fehlern bitte hier weiterlesen Was tun, wenn es Probleme bei der Volltextmigration gibt - Migrationservice?

 

  1. neue Serverlandschaft installieren

  2. alten ElasticSearch anpassen:

    1. elasticsearch.yml sichern 

    2. elasticsearch.yml anpassen

      network.host: <von local oder 127.0.0.1 auf IP-Adresse> reindex.remote.whitelist: 10.253.65.67:8041
    3. intrafind.yml oder elasticsearch.yml (je nach ElasticSearchversion)

      intrafind.security.subnet: <erweitern um die IP-Adresse des neuen ElasticSearch-Servers>
    4. den alten ElasticSearch stoppen und starten 

  3. Migrationservice Anpassung:
    a) im Servicemanager unter config die migration-prod.yml suchen
    b) Diese Einträge hinzufügen: timeout und httpScrollsize, empfohlene Werte: 

    source:   elasticsearch:     hosts: 10.253.65.209:8041     timeout: 150000 osfts:   httpScrollSize: 500

    c) Migrationservice neu laden.
    d) Servicemanager-Log öffnen und prüfen, ob der Service läuft und arbeitet

  4. nach Fertigstellung der Migration, den Stand prüfen und die Anzahl der Daten.

 

 

Beispiel-Konfigurations-Dateien:

Volltextmigration.zip

 

URLs:

 

Anzahl ermitteln.

Bisher haben wir http://127.0.0.1:8041/_cat/indices?v verwendet, um die Anzahl zu ermitteln. Das beinhaltet auch andere Daten und alle gelöschten Einträge. Besser wäre die nachfolgende Methode für die Ermittlung der Anzahl. Nur diese Daten werden bei der Migration übertragen, nicht alles, was bei Indices steht. Die nachfolgenden Abfragen bei Quell- und Ziel-ElasticSearch ausführen. 

allgemeine Anzahl:
http://127.0.0.1:8041/enaioblue_0/_count (das geht auch bei enaio 8.50)

Ergebnis-Beispiel:
{"count":59991711,"_shards":{"total":4,"successful":4,"failed":0}}

 

detaillierte Anzahl (empfohlen):
POST http://127.0.0.1:8041/enaioblue/_search

{"_source": false, "size": 0,"query": {"bool": {"filter": [{"exists": { "field": "fulltextwanted" } },  {"exists": { "field": "inactivevariant" } },  {"exists": { "field": "recycled" } }  ]}}, "aggs": {"types": {"terms": {"field": "category" }}} }

Rückgabe ist eine Übersicht mit der Anzahl der vorhandenen Ordner, Register und Dokumente.
Beispiel: Auszug aus der Rückgabedatei: 

"buckets": [ { "key": "register", "doc_count": 10626775 }, { "key": "document", "doc_count": 4885632 }, { "key": "folder", "doc_count": 2759736 } ...

 

 

GUI des Migrationservice:

Einfach Port 8048 aufrufen. Hier gibt es Informationen zu den laufenden Jobs, ElasticSearch-Infos und den Reforce-Eintrag (= Reset des Check-Jobs). 

Beispiel: Reindex-Job läuft gerade 

 

Beispiel: Check-Job läuft gerade:


oder hier:

 

Beispiel: Force-Job
Format bei "start" und "end": Jahr-Monat-Tag 
Ungültige Einträge werden rot markiert. 

 

Beispiel: ElasticSearch-Info

 

Wichtig: Immer den Stand der Jobs prüfen, ob auch wirklich der komplette Indizierungs-Zeitraum verarbeitet wurde. Bei Fehlern kann es vorkommen, dass ein Job als fertig/erledigt markiert wird, obwohl noch nicht alle Daten migriert wurden. Am besten agiert man  mit dem Check-Jobs. Diesen kann man über die GUI zurücksetzen auf bestimmte Bereiche. 
D.h. nach erfolgreicher Migration muss bei Reindex und Check-Job das korrekte Datum bei "LastIndexed id" und "LastChecked id". 

Verwandte Artikel