Handbuch

Producer Consumer

Copyright ©

Mindbreeze GmbH, A-4020 Linz, .

Alle Rechte vorbehalten. Alle verwendeten Hard- und Softwarenamen sind Handelsnamen und/oder Marken der jeweiligen Hersteller.

Diese Unterlagen sind streng vertraulich. Durch die Übermittlung und Präsentation dieser Unterlagen alleine werden keine Rechte an unserer Software, an unseren Dienstleistungen und Dienstleistungsresultaten oder sonstigen geschützten Rechten begründet. Die Weitergabe, Veröffentlichung oder Vervielfältigung ist nicht gestattet.

Aus Gründen der einfacheren Lesbarkeit wird auf die geschlechtsspezifische Differenzierung, z.B. Benutzer/-innen, verzichtet. Entsprechende Begriffe gelten im Sinne der Gleichbehandlung grundsätzlich für beide Geschlechter.

EinführungPermanenter Link zu dieser Überschrift

Mindbreeze InSpire kann mit dedizierten Producer und Consumer Knoten betrieben werden.

Ein oder mehrere Server dienen dabei als Producer. Auf diesen Knoten werden entsprechend der jeweils gültigen Konfiguration Erstindizierungen und Deltaindizierungen durchgeführt.

Weiters betreiben diese Server alle Mindbreeze Indizes sowie jeweils ein Mindbreeze Filter Service. Auf diesen Servern werden die Indizes produziert (indiziert) und sie führen auch die Delta-Indizierung durch. Die Producer Knoten sind also reine Produzenten von Indizes.

Die so erzeugten oder erneuerten Indizes werden automatisch durch Kopieren auf die Consumer Knoten verteilt.

Auf den Consumer Knoten laufen (auch verteilt auf mehrere Produzenten)

  • alle Mindbreeze Indizes im Lesemodus,
  • die dazugehörigen Sandbox-Prozesse für Kontextualisierung und Autorisierung sowie
  • Client Services.

Diese Consumer-Server sind für die Beantwortung der Suchanfragen sowie der Bereitstellung der Client Services verantwortlich. Um eine effiziente Verteilung der neu erzeugten bzw. aktualisierten Indizes zu gewährleisten, ist die Verwendung eines Elastic Index nötig. Dieses Feature ermöglicht ein automatisches Sizing der Indizes und ermöglicht, dass nur die tatsächlichen Änderungen des Index vom Producer zum Consumer übertragen werden müssen.

Ein Elastic Index skaliert mit der Menge der indizierten Objekte automatisch mit. So gibt es als Limitierung für einen Index nur die Hardware, auf der der Index läuft.

Verwendet man einen Elastic Index, so werden bei einer Deltaindizierung nur jene Files des Index angepasst, in der die Daten liegen. So ist es möglich, bei der Verteilung der aktualisierten Indizes nur jene Files zu kopieren, die sich geändert haben. Die Übertragungsmenge und die Zeit für die Aktualisierung der Daten zwischen Producer und Consumer werden so auf ein Minimum reduziert.

Jede Konfiguration wird auf dem oder den Producer-Server(n) für alle beteiligten Knoten generiert. Die generierte Konfiguration wird dann auf alle anderen Server (Consumer) verteilt. Dieses Konzept ermöglicht darüber hinaus Mindbreeze InSpire ausfallssicher auszulegen. Dafür werden auch Lastverteiler benötigt/vorausgesetzt.

Wesentliche VorteilePermanenter Link zu dieser Überschrift

  • Indizierung inkl. Delta-Crawl Läufe beeinträchtigen die Suchperformance nicht negativ
  • Keine Beeinflussung der Suchperformance durch
  • Erstindizierung während dem laufenden Betrieb
  • Deltaindizierung während dem laufenden Betrieb
  • Hochfrequente Deltaindizierung (e.g. 15 Minuten Aktualität)
  • kein Ausfall der Datenquellen während der Neuindizierung (Suchen auf den Consumern mit den bestehenden Indizes, Neu-Indizierung auf den Producern)
  • Einfache Migration auf neue Produktversionen selbst wenn Neuindizierung empfohlen/nötig ist.
  • Regelmäßige Neuindizierung ist durchführbar ohne Einfluss auf den Betrieb
  • Flexibilität z.B. bei Änderungen von Konfigurationen

VoraussetzungPermanenter Link zu dieser Überschrift

  • Zusätzliche Hardware für Producer und Consumer Knoten
  • Für zusätzliche Ausfallsicherheit werden auch Lastverteiler benötigt/vorausgesetzt

VorbereitungPermanenter Link zu dieser Überschrift

SSH&SCP-Konfiguration (nur Linux)Permanenter Link zu dieser Überschrift

Zunächst ermittelt man den unter /etc/mindbreeze/runtime.conf konfigurierten Service-User (normalerweise mes).

Dann ist sicherzustellen, dass vom Producer aus interaktionslos via SCP auf den Consumer kopiert werden kann.

Beispiel:

Dazu muss ein SSH-PubKey ohne Passphrase auf dem Producer vorhanden sein, und dieser muss im $HOME/.ssh/authorized_keys des Consumers eingetragen sein. (ssh-keygen ssh-copy-id)

Ebenfalls sind die knownhosts-Verbindungen herzustellen, indem man manuell z.B. via ssh vom Producer aus Verbindungen herstellt:

Beispiel:

Known Hosts:

su mes (auf Consumer und Producer ausführen)

ssh –vt mes@Producer (auf Consumer ausführen)

ssh –vt mes@Consumer (auf Producer ausführen)

RSA Key erstellen:

Muss für Consumer und Producer gemacht werden.

ssh-keygen -t rsa:

Generating public/private rsa key pair.

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/demo/.ssh/id_rsa.

Your public key has been saved in /home/demo/.ssh/id_rsa.pub.

The key fingerprint is:

4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a

The key's randomart image is:

+--[ RSA 2048]----+

|          .oo.   |

|         .  o.E  |

|        + .  o   |

|     . = = .     |

|      = S = .    |

|     o + = +     |

|      . o + o .  |

|           . o   |

|                 |

+-----------------+

Der public key wird unter /home/mes/.ssh/id_rsa.pub abgelegt. Der private key (identification) ist unter /home/mes/.ssh/id_rsa zu finden.

su mes (auf Consumer und Producer ausüfhren)
ssh-copy-id mes@consumervm (wird auf Producer ausgeführt)
ssh-copy-id mes@producervm (wird auf Consumer ausgeführt)

  • Test der Konfiguration
  • ssh mes@localhost
  • ssh mes@examplehost  (nicht voll qualifiziert)
  • ssh mes@examplehost.exampledomain  (voll qualifiziert!)

Incoming-VerzeichnisPermanenter Link zu dieser Überschrift

Es ist auf den Consumer-Knoten ein Verzeichnis einzurichten, das genügend Platz für einen Index aufweist, und in das der Producer-Knoten die Indizierungs-Deltas hineinkopieren kann.

Default unter Linux ist hier /data/incoming, der Serviceuser sollte hier Besitzer und Gruppe sein:

  • mkdir /data/incoming
  • chown mes:mes /data/incoming

KonfigurationPermanenter Link zu dieser Überschrift

Service-Konfiguration im Manager UIPermanenter Link zu dieser Überschrift

Im Manager UI richtet man einen Producer-Index ein, wobei folgende Einstellungen vorzunehmen sind (unter „Advanced Settings“):

  • Am Consumer muss der mesmasteruri vom Server selbst auf den Producer umgestellt werden
  • Port 23000, Port des Index und Port 5432 am Producer für den Consumer und vice-versa öffnen (Firewall-Freischaltung)
  • Danach Services am Producer und Consumer neu starten
  • Mit einem SCP-Client auf den Producer verbinden und den Index vom Producer am Consumer kopieren
  • Danach folgendes am Producer einstellten
  • Elastic Index: Ist bereits standardmäßig aktiv
  • External URL am Producer auf https://localhost:Queryport setzen
  • Unter „Query Services“ hakt man den gewünschten Consumer-Knoten an, und aktiviert die „Sync“-Einstellung. Dabei sind folgende Einstellungen nötig:
    • Ein „Incoming“-Verzeichnis erstellen, das auf dem Consumer-Host erreichbar ist, in das die neu produzierten Indexteile hin kopiert werden können:
  • Falls das Consumer Query Service auf derselben Node laufen soll, wie der Produzent, sind aufgrund von Ressourcenkonflikten zusätzliche Einstellungen erforderlich:
    • Consumer Index-Verzeichnis
    • Consumer Index-Port (darf auf dieser Node noch nicht verwendet werden)
    • Consumer Data-Port (darf auf dieser Node noch nicht verwendet werden)
    • Disable Producer Query Service (nur Consumer stellt Query Service zur Verfügung)

  • Beispiel:

/etc/mindbreeze/mesmasteruri.conf:

http://producervm:23000

  • Port 23000, Index-Port des Producer-Index + Port 5432 am Consumer und am Producer freischalten
  • Öffnen sie /etc/sysconfig/iptables mit einem Editor ihrer Wahl und füngen sie die folgenden 3 Zeilen hinzu und speichern sie die Datei:

    /etc/sysconfig/iptables:

    -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 8443 -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 8444 -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 23000 –s <producervm/consumervm> -j ACCEPT

    -A INPUT -p tcp -m tcp –dport <INDEXPORT> –s <producervm/consumervm>  -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 5432 –s <producervm/consumervm>  -j ACCEPT

    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    -A INPUT -p icmp -j ACCEPT

    -A INPUT -i lo -j ACCEPT

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

    -A INPUT -j REJECT --reject-with icmp-host-prohibited

    -A FORWARD -j REJECT --reject-with icmp-host-prohibited

    COMMIT

    • Neustarten der Services am Producer und Consumer durch absetzen folgender Kommandos:
    • /etc/init.d/iptables restart
    • /etc/init.d/mesmaster restart
    • /etc/init.d/mesnode restart
    • Wenn alles korrekt Consumer registriert sich bei Producer:

    • Aktivieren der Suche für den Consumer ermöglicht Suche direkt am Consumer (optional)

    Die angehakten Consumer-Knoten werden dadurch automatisch als Query Service konfiguriert, und mit dem Producer als Synchronisations-Ziele gekoppelt.

    Wird eine Synchronisation manuell oder per Skript ausgelöst, so verteilt der produzierende Index an alle Consumer Query Services, für die „Sync“ ausgewählt ist.

    Unter „Client Services“ ist im Abschnitt „Query Engines“ sicherzustellen, dass die oben konfigurierten Consumer-„Query Services“ angehakt sind.

    Starten sie die Services am Consumer-Node neu:

    • /etc/init.d/mesmaster restart
    • /etc/init.d/mesnode restart

    Falls dem vollständigen Starten der Services der konfigurierte Index nicht im gewünschten Verzeichnis aufscheint (z.B.: /data/indices/producer) muss wie folgt vorgegangen werden:

    • Kopieren des Index mittels SCP vom Producer zum Consumer und berechtigen sie mes für das Verzeichnis (Pfade müssen gleich sein):
    • [root@producervm ~]# scp -r /data/indices/producer root@consumervm:/data/indices
    • [root@producervm ~]# chown -R mes:mes /data/indices/producer

    Manuelle Synchronisation per mescontrolPermanenter Link zu dieser Überschrift

    Ist das Crawling abgeschlossen, so kann manuell via mescontrol synchronisiert werden

    mescontrol >:> syncdelta

    • Funktioniert dies beim ersten Mal nicht mit folgender Fehlermeldung muss die Synchronisation erneut angestoßen werden:

    Wenn alles richtig funktioniert hat wird kein Fehler ausgegeben.

    Weiterführende ThemenPermanenter Link zu dieser Überschrift

    Änderung von Filter-baren Eigenschaften (DocInfo-Reinvertion)Permanenter Link zu dieser Überschrift

    Filter-bare Eigenschaften, bzw. Regex-matchbare Eigenschaften können über

    • CategoryDescriptor (regexmatchable, aggregatable)
    • Nachträglich hinzugefügte Metadaten (Entity Recognition, CSV Transformation, Precomputed Synthesized Metadata)
    • Manuell am Index konfigurierte “Aggregated Metadata Keys”

    bestimmt werden. Hierbei ist es notwendig diese Eigenschaften neu aufzubauen. Der Producer führt dies nach Konfigurationänderung automatisch einmal durch. Am Consumer fürht dies zu folgender Fehlermeldung:

    Failed to start IndexQueryService: Readonly index: Failed to convert index (needsCompleteReinvertion=0,needsDocInfoReinvertion=1).  Please convert in readwrite mode

    Um dies zu vermeiden sollten anstelle des automatischen Ändern durch Speichern und Anwenden der Konfiguration:

    • Die Mindbreeze Services (via dem mesnode Service) auf allen Knoten gestoppt werden
    • Die Consumer Indizes verschoben (oder entfernt) werden
    • Die Änderungen nochmals überprüft und bei Bedarf gespeichert werden
    • Die Services wieder gestartet werden
    • Nachdem der Producer Index die Änderungen angewendet hat ein syncdelta durchgeführt werden um den gesamten Index neu zu verteilen