Probleme bei der Suche und Indexierung
Die Suchleiste bietet nicht die Option, alle Ordner zu durchsuchen.
Für alle Nutzer
Wenn dies bei allen Nutzern der Fall ist, ist dies wahrscheinlich auf eine Migration der E-Mails auf Dateisystemebene zurückzuführen. Das bedeutet, dass der Elasticsearch-Suchindex nicht vorhanden ist: Sie können den ConsolidateMailSpoolIndexJob
-Task ausführen, um den Index zu erstellen und alle E-Mails des Servers zu indizieren:
-
Entweder indem Sie zum Admin-Bereich > Systemverwaltung > Zeitplanung gehen > den
ConsolidateMailSpoolIndexJob
-Task ausführen -
Oder per Befehlszeilenwerkzeug den Wartungsvorgang consolidateIndex ausführen:
bm-cli maintenance consolidateIndex domain.net
Da diese Operation sehr ressourcenintensiv ist, können Sie sie mit der Option --match in Benutzergruppen ausführen:
bm-cli maintenance consolidateIndex --match "a.\*" domain.net
bm-cli maintenance consolidateIndex --match "[b-c].\*" domain.net
Für einige Nutzer
Wenn das Problem nur einen oder wenige Nutzer betrifft, bedeutet dies, dass der ElasticSearch-Index für diese Nutzer nicht existiert oder beschädigt ist und neu erstellt werden muss:
-
Oder indem Sie zum Admin-Bereich jedes Benutzers gehen, den Wartungstab öffnen und auf "Bestätigen und reparieren" und dann auf "Index konsolidieren" klicken
-
Oder per Befehlszeilenwerkzeug :
bm-cli maintenance repair user@domain.net
bm-cli maintenance consolidateIndex user@domain.net
In einigen Fällen reicht "Index konsolidieren" nicht aus und es ist dann notwendig, eine vollständige Indizierung über das Argument --reset erneut zu starten:
bm-cli maintenance consolidateIndex --reset user@domain.tld
Es fehlen Ergebnisse in der Suche
Bei vorübergehenden Problemen mit dem Indizierungsdienst kann es sein, dass einige während dieser Zeit gesendeten und empfangenen Nachrichten nicht indiziert wurden. In diesem Fall genügt es, den Task ConsolidateMailSpoolIndexJob
auszuführen, der den Unterschied zwischen den Nachrichten auf IMAP-Ebene und im Index berechnet und nur die fehlenden Nachrichten indiziert.
Bei der Suche wird ein Fehler angezeigt.
Dies kann auf eine Inkonsistenz zwischen der Liste der Ordner auf IMAP-Ebene und in der Datenbank zurückzuführen sein. Die Wartungsaktion "Bestätigen und reparieren" (Operation* check&repair*) im Wartungstab des Benutzerprofils ermöglicht es, diese Liste neu zu erstellen, eine Neuindizierung des Postfachs sollte dann das Problem beheben (im selben Tab "Postfachindex neu erstellen").
Wenn dies nicht der Fall ist, können die Protokolle /var/log/bm-webmail/errors
die Ursache des Problems anzeigen.
Beim Zugriff auf eine Nachricht, die durch eine Suche gefunden wurde, wird ein Fehler angezeigt.
Es handelt sich wahrscheinlich um einen Indexierungsfehler, wenn eine Nachricht verschoben wurde. Die Wartungsaktion "Mailbox konsolidieren", die über die Registerkarte Wartung der Benutzerdaten zugänglich ist, aktualisiert den Suchindex.
ElasticSearch wechselt in den "read only"-Modus
Problem : Elasticsearch setzt sich selbst in den Modus "nur lesbar", der Cluster ist grün, aber ein Neustart behebt das Problem nicht.
Festgestellte Symptome : Im Allgemeinen scheint BlueMind nicht mehr zu funktionieren, neben Problemen mit Suche und Anzeige ist es unmöglich, Ereignisse zu erstellen, auf E-Mails zu antworten usw.
Warnungen mit bm-elasticsearch
werden auf der Seite Überwachungskonsole->Allgemeiner Zustand der Installation
des Admin-Portals sowie in TICK angezeigt.
Sie können Fehler mit ClusterBlockException
in /var/log/bm/core.log
feststellen. Zum Beispiel :
... class java.util.concurrent.ExecutionException: ClusterBlockException[index [mailspool_pending] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];]
oder
... class net.bluemind.core.api.fault.ServerFault: java.util.concurrent.ExecutionException: ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]
Bestätigung : Der folgende Befehl gibt ERROR: At least one index is read-only
zurück (auf dem Elasticsearch-Server ausführen)
curl -s 'http://localhost:9200/_all/_settings' | jq -r '
if any(.[]; .settings.index.blocks.read_only_allow_delete == "true")
then
"ERROR: At least one index is read-only"
else
"INFO: All indexes are read-write"
end'
Ursache : Das Dateisystem, das die ElasticSearch-Indexdaten enthält, ist zu mehr als 80% gefüllt.
Lösung :
- Erhöhen Sie die Größe des Dateisystems, das die Daten der ElasticSearch-Indizes enthält (erweitern Sie die Partition oder ändern Sie die Festplatte und ändern Sie dann die Größe des Dateisystems)
- Überprüfe, ob der Prozentsatz der Nutzung der Datenpartitionen der ElasticSearch-Indizes wieder unter 80% gefallen ist (auf dem Elasticsearch-Server ausführen):
df /var/spool/bm-elasticsearch/{data,repo} -h
- Spielt den folgenden Befehl ab:
curl -X PUT "localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'{ "index.blocks.read_only_allow_delete" : false } }'
- Starten Sie den Befehl des Bestätigungs-Schritts erneut, er sollte
INFO: Alle Indizes sind schreibgeschützt
zurückgeben. - Starte die Indizierung der Boxen, die sie benötigen (auf dem Core-Server ausführen):
bm-cli index coherency --workers=4 --run-consolidate all
Die Logs zeigen Fehler in Bezug auf die Quoten esQuota und imapQuota an.
Meldungen wie diese finden sich in der Datei /var/log/bm-webmail/errors
:
10-Nov-2019 17:37:38 UTC] [jdoe@bluemind.loc] esQuota < (imapQuota \* 0.8). disable es search. esQuota: 4199171, imapQuota: 6123568
Dies bedeutet, dass für das angegebene Konto weniger als 80% der Box indiziert ist (esQuota = elasticsearch-Quote), die elasticsearch-Suche (== die erweiterte Suchmaschine) ist daher deaktiviert, da sie ineffizient ist.
Um dies zu beheben, muss eine Konsolidierung oder Neuindizierung des Kontos vorgenommen werden.
Für einige identifizierte Nutzer
Wenn das Problem nur einen oder wenige Nutzer betrifft, bedeutet dies, dass der ElasticSearch-Index für diese Nutzer nicht existiert oder beschädigt ist und neu erstellt werden muss:
-
entweder indem Sie zur Administrationsseite jedes Benutzers gehen und auf "Bestätigen und Reparieren" und dann auf "Index konsolidieren" klicken und falls keine Verbesserung vorliegt, auf "Index neu aufbauen"
-
Oder per Befehlszeilenwerkzeug :
bm-cli maintenance repair user@domain.net
bm-cli maintenance consolidateIndex user@domain.net
Für alle betroffenen Nutzer
Um alle betroffenen Konten zu reparieren, können Sie folgendermaßen vorgehen:
- die Konten mit einem Grep auf die Logdatei finden:
grep "disable es search. esQuota:" /var/log/bm-webmail/errors
- kopieren Sie die gefundenen Logins in eine Textdatei (z. B.
/tmp/accountWithoutEsSearch.txt
) - Verwende die folgende Kombination von Befehlen, um die Indexkonsolidierung für jeden Login in der Datei :
while read account; do bm-cli maintenance consolidateIndex $account;done < /tmp/accountWithoutEsSearch.txt
Globale Fehlfunktion
Analyse
Wenn Sie ein Suchproblem in BlueMind feststellen, können Sie den Zustand des ElasticSearch-Clusters mit dem Befehl überprüfen:
$ curl -XGET --silent 'http://localhost:9200/_cluster/health'
Wenn der Status 'grün' ist, ist alles in Ordnung, wenn er 'rot' ist, bedeutet dies, dass es ein Problem mit Elasticsearch gibt. Diese Information wird auch im Überwachungskonsole angezeigt.
Mit dem Befehlszeilenverwaltungs-Tool können Sie den Zustand des Index eines bestimmten Benutzers überprüfen :
$ bm-cli index info admin@local.lan
{"email":"jdoe@domain.loc","ESQuota":3056,"IMAPQuota":3058,"ratio":95}
Auflösung
Es gibt mehrere Bedingungen, die den Betrieb von ElasticSearch verhindern können:
-
unzureichend indexierter Posteingang : Wenn bei der Überprüfung des Indexes (siehe oben) ein Verhältnis unter 80% festgestellt wird, bedeutet dies, dass weniger als 80% der E-Mails des Benutzers indexiert sind => führen Sie eine Neuindizierung des Posteingangs durch :
- Gehen Sie zur Verwaltungskonsole von BlueMind.
- gehen Sie zur Administrationsseite des Benutzers > Tab Wartung
- Führen Sie die Operation "Posteingangsindex neu erstellen" aus
-
Indexbeschädigung : hauptsächlich aufgrund von nicht ausreichendem Festplattenspeicher, es sollten mindestens 10% freier Festplattenspeicher vorhanden sein. Wenn die Festplatte mit den ES-Daten (
/var/spool/bm-elasticsearch
) knapp wurde, können die Suchindizes beschädigt sein. In den ES-Logs äußert sich dies in einem Fehler beim Start des Dienstes :[2017-01-26 20:06:54,764][WARN ][cluster.action.shard] [Bill Foster] [mailspool][0] received shard failed for [mailspool][0], node[PcC6eICxRAajmWioK1mhDA], [P], s[INITIALIZING], indexUUID
[IEJHQkOnTtOcdY0bMMIFRA], reason [master [Bill Foster][PcC6eICxRAajmWioK1mhDA][bluemind.exa.net.uk][inet[/82.219.13.101:9300]] marked shard as initializing, but shard is marked as failed, resend shard failure]
[2016-01-26 20:06:55,828][WARN ][indices.cluster] [Bill Foster] [mailspool][0] failed to start shard
org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [mailspool][0] failed to recover shard
at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:287)
at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)Dann muss man :
- die Indexdateien löschen und ElasticSearch neu starten :
service bm-elasticsearch stop
rm -rf /var/spool/bm-elasticsearch/data/nodes/0/indices/\*
service bm-elasticsearch start- Indizes zurücksetzen :
bm-cli index reset mailspool
bm-cli index reset mailspool_pending
bm-cli index reset event
bm-cli index reset contact
bm-cli index reset todo
bm-cli index reset im
bm-cli index reset note- Starten Sie dann eine neue Indizierung von der geplanten Aufgabenverwaltung aus: Administrationskonsole > Systemverwaltung > Planung > wählen Sie die Domain "global.virt" aus und starten Sie die Aufgaben *IndexJob :
-
CalendarIndexJob
-
KontaktIndexJob
-
ConsolidateMailSpoolIndexJob
❗ Beachten Sie jedoch, dass die Indizierung von E-Mails eine IO-intensive Operation ist, es ist also ratsam, diese Aufgabe am Abend oder am Wochenende zu starten. Beachte, dass es möglich ist, die Indexierung im Batch mit bm-cli zu starten.
-
TodoListIndexJob
-
HSMIndexJob
-
Translog-Beschädigung : dies kann bei einem Serverabsturz oder Speichermangel auftreten. In diesem Fall wird der allgemeine Index nicht beschädigt und nur die Indizierung der letzten Dokumente, die noch nicht auf die Festplatte geschrieben wurden, geht verloren. In den ES-Logs wird dies durch den Fehler beim Start des Dienstes :
[2017-09-04 19:24:38,340][WARN ][indices.cluster ] [Hebe] [mailspool][1] failed to start shard
org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [mailspool][1] failed to recover shard
at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:287)
at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.index.translog.TranslogCorruptedException: translog corruption while reading from stream
at org.elasticsearch.index.translog.ChecksummedTranslogStream.read(ChecksummedTranslogStream.java:70)
at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:257)
... 4 more
Um beschädigte Translogs zu löschen :
service bm-elasticsearch stop
rm -rf /var/spool/bm-elasticsearch/data/nodes/0/indices/mailspool/\*/translog
service bm-elasticsearch start
Durch Ausführen der Aufgabe ConsolidateMailSpoolIndexJob
werden die fehlenden E-Mails neu indiziert