Navigation and service panel


Content

This text is fallbacked from the German Version. If you need use Google Translate


Index Konfiguration für mehrere Delivery Server

By Tobias Studer on 14. February 2013, No comments

In einer Umgebung mit mehreren Delivery-Servern, die beispielsweise hinter einem Load-Balancer stehen, kann eine falsche Konfiguration dazu führen, dass nach dem Publizieren der Suchindex nicht korrekt nachgeführt wird. Um dies zu verhindern, müssen einige Dinge beachtet werden.

  1. Sicherstellen, dass der ApplicationPool-Account Lese- und Schreibrechte auf den /data/indexes Ordner oder den Ordner, in dem der Index abgespeichert wird, hat.

  2. Die HistoryEngine auf der Web-Datenbank aktiveren

    Die HistoryEngine ist die Schnittstelle zwischen den Änderungen in Sitecore und des Indexierungsprozesses. Diese muss für alle Datenbanken konfiguriert werden, aus welcher die Delivery Server Daten beziehen.

    <database id="web">
    	<Engines.HistoryEngine.Storage>
    	  <obj type="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.Kernel">
    		<param connectionStringName="$(id)" />
    		<EntryLifeTime>30.00:00:00</EntryLifeTime>
    	  </obj>
    	</Engines.HistoryEngine.Storage>
    	...
    </database>
    
  3. Das Update-Intervall darf nicht auf "00:00:00" gesetzt sein, weil dies den Indexierungsprozess deaktiviert.

    <setting name="Indexing.UpdateInterval" value="00:05:00"/>
    

    Der Indexierungsprozess wird auch über Events angestossen. In einer Delivery-Umgebung kann es jedoch vorkommen, dass diese deaktiviert sind. Das Update-Intervall überprüft nach Ablaufen des Intervalls, ob neue Daten indexiert werden müssen. Natürlich kann das Intervall auch verkürzt werden. Das perfekte Timing hängt von der Umgebung, der Häufigkeit von Inhaltsänderungen usw. ab. Als Richtwert sollte des Intervalls nicht kleiner als 30 Sekunden sein.

  4. Aktivieren des "Indexing.ServerSpecificProperties" in der web.config

    <setting name="Indexing.ServerSpecificProperties" value="true" />
    

    Sobald mehrere Server auf eine Datenbank zeigen, muss diese Einstellung aktiviert werden. Ansonsten kann es vorkommen, dass die Delivery-Systeme von den Änderungen der Daten nichts mitbekommen und ihren Index nicht entsprechend aktualisieren.

    Nach jeder Index-Update-Operation schreibt Sitecore einen Zeitstempel in die Properties-Tabelle der aktuellen Datenbank. Dies hilft dem IndexingProvider, welcher für den Update-Prozess zuständig ist, zu verstehen, welche Einträge aus der History-Tabelle beim nächsten Durchgang verarbeitet werden sollen. Ist "Indexing.ServerSpecificProperties" auf "false" gesetzt, ist der Zeitstempel nicht eindeutig einer Umgebung zugeordnet und die Delivery-Systeme können nicht mehr entscheiden, welche Einträge als nächstes verarbeitet werden sollen.

    Properties-Tabelle 

    Der "Instance Name" kann explizit in der web.config gesetzt oder als Kombination aus Maschinenname und Site-Name generiert werden. Dies garantiert die Eindeutigkeit in einer Umgebung.

  5. Index-Konfiguration überprüfen

    • Die Index-Konfiguration der Delivery-Server sollte auf die Datenbank zeigen, für welche die HistoryEngine konfiguriert wurde.
    • Der Root, auf welchen der Index zeigt, sollte in dieser Datenbank auch tatsächlich vorhanden sein.
    <search>
    	<configuration>
    		<indexes>
    			<index id="test"  type="Sitecore.Search.Index, Sitecore.Kernel">
    				<param desc="name">$(id)</param>
    				<param desc="folder">$(id)</param>
    				<Analyzer ref="search/analyzer" />
    				<locations hint="list:AddCrawler">
    					<Content type="scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler, scSearchContrib.Crawler">
    						<Database>web</Database>
    						<Root>/sitecore/content/test</Root>
    

Werden diese Punkte beachtet, wird der Index auf allen Delivery-Servern immer schön automatisch aktualisiert.

No comments

Add your comment

Your email address will not be published. Required fields are marked *

*