How-to: Multi-Instanzen in TYPO3 erstellen

How-to: Multi-Instanzen in TYPO3 erstellen

Das Content Management System TYPO3 ist nach eigenen Aussagen ein Enterprise-CMS, allerdings fehlt dem CMS ein entscheidendes Enterprise-Feature: die Multi-Instanz-FÀhigkeit. Wie TYPO3 trotzdem auf mehreren Instanzen aufgesetzt werden kann, stellen Roman Schenk, Martin Peranic und Markus Sternberg in einer How-to Anleitung vor.

Enterprise Content Management Systeme mĂŒssen die Anforderungen an ein breites Funktionsspektrum genauso erfĂŒllen, wie die der Ausfallsicherheit und einer hohen Performance – so die wiederkehrende Erwartungshaltung von Kunden der Neofonie. GewĂ€hrleistet wird dies in der Regel durch redundante Systeme und eine Lastverteilung auf mehreren Instanzen. Das CMS TYPO3, welches bei vielen Webprojekten zum Einsatz kommt, lĂ€sst sich allerdings in der Standard-Installation nicht in einer Load-Balanced-Environment betreiben. Dadurch ist u.a. keine Ausfallsicherheit gewĂ€hrleistet, ebenso drohen Performance-Probleme bei hohen Zugriffszahlen. DarĂŒber hinaus besteht bei einer solchen Installation keine Trennung zwischen Redaktions- und Auslieferungs-Server: Eine Instanz ist immer fĂŒr beides zustĂ€ndig, was ein Risiko fĂŒr IntegritĂ€t des Contents darstellt.

Im Folgenden soll eine Möglichkeit aufgezeigt werden, wie multiple TYPO3 Instanzen aufgesetzt werden können. Alle verwendeten Technologien sind bewĂ€hrt und Open Source und stehen auf gĂ€ngigen Systemen zur VerfĂŒgung.

1. Datenbank-Replikation

Nach alter Manier aktivieren wir das MySQL Binlog fĂŒr die Master/Slave Replikation.

Dump der MasterDB

Zum initialen Start benötigen wir den aktuellen Stand vom Backend. Die Slaves setzen bei zukĂŒnftigen Deployments auf diesen Stand auf. Wir verwenden Mysqldump mit der Option –single-transaction (StorageEngine InnoDB), um die MasterDB nicht zu blockieren.

mysqldump -h$DB_MASTER_HOST -P$DB_MASTER_PORT -u$DB_REPL_USER 
-p$DB_REPL_PASS 
--single-transaction
 -B $DB_NAME | mysql

Löschen lokaler Chaches

Da spĂ€ter unter anderem die Cache-Tabellen nicht repliziert werden (duplicate entries), mĂŒssen wir diese fĂŒr einen konsistenten Stand der Slaves beim Deployment löschen:

mysql -Nse 'show tables like "cf_%"' typo3db | while read table; do mysql -e 
"truncate table $table" typo3db

Binlog Information

Wir benötigen “file” und “position” des Masters:

MASTER_LOG_FILE=$(mysql -h$DB_MASTER_HOST -P$DB_MASTER_PORT 
-u$DB_REPL_USER -p$DB_REPL_PASS -e 
"show master status\G" 
|grep File |awk '{ print $2 }')
MASTER_LOG_POS=$(mysql -h$DB_MASTER_HOST -P$DB_MASTER_PORT  
-u$DB_REPL_USER -p$DB_REPL_PASS -e 
"show master status\G" 
|grep      
Position |awk '{ print $2 }')

Excluden bestimmter Tabellen

Um ‘duplicate entries’ zu vermeiden, replizieren wir alles außer den folgenden Tabellen:

 replicate_wild_ignore_table = 'typo3db.cf_%, typo3db.fe_session%, 
 typo3db.sys_log, typo3db.tx_realurl_urldata, typo3db.tx_realurl_pathdata, 
 typo3db.sys_file_processedfile'

Replikation erneut starten

mysql -e "stop slave;"
mysql -e "CHANGE MASTER TO MASTER_LOG_FILE='$MASTER_LOG_FILE',   
MASTER_LOG_POS=$MASTER_LOG_POS, MASTER_HOST='$DB_MASTER_HOST',
MASTER_PORT=$DB_MASTER_PORT, MASTER_USER='$DB_REPL_USER',   
MASTER_PASSWORD='$DB_REPL_PASS';"
mysql -e "set global replicate_wild_ignore_table = 'typo3db.cf_%, typo3db.fe_session%,
typo3db.sys_log, typo3db.tx_realurl_urldata, 
typo3db.tx_realurl_pathdata, 
typo3db.sys_file_processedfile'"
mysql -e "start slave;"

2. Datei-Replikation

Neben einer fehlerfreien Datenbank Replikation, muss auch ein zuverlÀssiger Datei-Austausch stattfinden.

Nach der offiziellen TYPO3 Dokumentation sind dabei folgende Verzeichnisse und Dateien fĂŒr uns relevant:

/typo3temp/        

typo3conf/PackageStates.php

typo3conf/ext/

typo3conf/l10n/

/fileadmin/

/uploads/

Richtet man sich nach dem klassischen Backend/Frontend-Modell, in der das Frontend read-only ist, reicht es aus, die Datei-Replikation nur in eine Richtung stattfinden zu lassen und zwar vom Backend zum Frontend. Dies kann exemplarisch mit einem als cronjob laufenden rsync implementiert werden. Bei dieser Art Setup ist unbedingt darauf zu achten, dass die oben erwĂ€hnte Ordner/Dateiliste eingehalten wird. Das Frontend fĂ€hrt sonst nicht richtig hoch. Interessant dabei ist das typo3temp Verzeichnis. Offenbar ist es fĂŒr TYPO3 nicht weiter schĂ€dlich, wenn sich dort zur Laufzeit Dateien verĂ€ndern.

Nachteile eines rsync basierenden Systems ist eine Verzögerung zwischen der Darstellung auf dem Backend und dem Frontend. Dies ist dem periodisch laufenden cronjob geschuldet. Als Grenzfall können dadurch auch tote DatenbankeintrÀge auf den Frontends entstehen, z.B. wenn der Kopierbefehl fehlschlÀgt, nachdem die Datenbank bereits repliziert ist.

Möchte man solche Szenarien verhindern, muss auf einen cronjob verzichtet werden. Ein NFS kommt auch nicht infrage, da auf dem Frontend generierte Daten unter keinerlei UmstĂ€nden auf das Backend gelangen dĂŒrfen. Vorstellbar wĂ€re also eine Kombination aus rsyncd und inotify. In diesem Fall werden Dateien direkt beim Erstellen mit rsync auf das Zielsystem kopiert.

3. Relurl Extension

Die von TYPO3 generierten URLs sind weder fĂŒr den Menschen noch fĂŒr die Suchmaschinen sonderlich schön. Diese werden daher ĂŒblicherweise mit der realurl Extension, dem defacto-Standard fĂŒr dieses Problem, „hĂŒbsch“ gemacht. Dabei erfolgt ein Mapping von /page/tree/path/to/page auf /index.php?id=42 , und vice versa. Damit der Page-Tree nicht bei jedem Request und jedem Rendering eines Links erneut traversiert werden muss, werden die bereits erfolgreich durchgefĂŒhrten Mappings – nach dem ersten Request auf eine bestimmte URL bzw. nach dem ersten Rendering eines bestimmten Links – in Cache-Tabellen abgelegt. Diese sind:

  • cf_cache_rootline
  • cf_rootline_tags
  • Tx_realurl_pathdata
  • tx_realurl_urldata

Wie oben beschrieben mĂŒssen die Cache-Tabellen von der Datenbank-Replikation ausgenommen werden, da es ansonsten zu Duplicate-Entries kommt. Von Zeit zu Zeit mĂŒssen jedoch einzelne EintrĂ€ge in diesen Tabellen entfernt werden: wenn sich der Page-Tree oder der Page-Titel, und damit die URL-Struktur, Ă€ndert. Diese werden dann beim nĂ€chsten Request / bei der nĂ€chsten Link-Generierung durch die Extension neu erzeugt. Das Invalidieren (löschen) der Cache-EintrĂ€ge auf dem Backend wird durch die Extension vorgenommen, durch die deaktivierte DB-Replikation kommen diese Änderungen jedoch nicht auf den Frontends an – die URLs haben weiterhin die alte Struktur.

Voraussetzung: Backend vs. Frontend

Auf der jeweiligen Umgebung (Server) muss TYPO3 die Information zur VerfĂŒgung gestellt werden, ob es Deliver-Frontend oder Redaktions-Backend ist.

Das Problem lÀsst sich mit Bordmitteln (T3 + DB-Replikation) so lösen:

  1. es wird eine Transfer-Tabelle erstellt
  2. es wird ein TCE-Hook fĂŒr das Cache-Postprocessing gebaut (dieser befĂŒllt auf dem Backend die Transfer-Tabelle)
  3. es wird ein TSFE-Hook fĂŒr connectToDB gebaut (dieser liest auf den Frontends die Tabelle und löscht die Caches)

Transfer-Tabelle

Die Struktur ist sehr simpel:

CREATE TABLE tx_foo_invalid_cache_on_delivery (
id INT NOT NULL AUTO_INCREMENT,
table_name varchar(255) DEFAULT '' NOT NULL,
inserted TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);

Darin werden alle Cache-Tabellen gespeichert, die auf den Frontends geleert werden sollen, dies sind hier die 4 oben genannten. Die Tabelle muss mit in die DB-Replikation aufgenommen werden.

TCE-Hook auf dem Backend

Es muss ein Hook fĂŒr das ClearCache-Postprocessing registriert werden:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']
['clearCachePostProc'][] = 'Foo\\Hook\\T3libTcemainHook->clearCachePostProc';

Der Hook darf nur auf dem Backend-System die oben genannte Tabelle befĂŒllen.

if($isDelivery){
return;
}

In die Tabelle werden, Komma-separiert, die Namen der vier Cache-Tabellen eingefĂŒgt:

$cacheTablesToInvalidate = 
'cf_cache_rootline,cf_rootline_tags,tx_realurl_pathdata,tx_realurl_urldata';
$databaseConnection->exec_INSERTquery(
'tx_crefoportal_invalid_cache_on_delivery',
[
     'table_name' => $cacheTablesToInvalidate
]
);

Fertig. Nach dem INSERT wird der neue Eintrag zu den Frontends repliziert.

TSFE-Hook auf den Frontends

Dieser wird als Hook fĂŒr connectToDB registriert:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['connectToDB'][] = 
'Foo\\Hook\\IndexTsHook->preprocessRequest';

Dieser darf nur auf dem Frontend-System die oben genannte Tabelle auslesen:

if(!$isDelivery){
return;
}
$rows = $databaseConnection->exec_SELECTgetRows(
'table_name',
'tx_crefoportal_invalid_cache_on_delivery',
''
);

Die ausgelesenen Tabellen-Namen werden gesplittet und anschließend die jeweiligen Tabellen geleert:


foreach($rows as $row){
$tables = $row['table_name'];
$tables = explode(',',$tables);
foreach($tables as $table){
     $databaseConnection->exec_TRUNCATEquery($table);
}
}

Abschließend wird die Transfer-Tabelle geleert, damit diese nicht zu groß wird:

$databaseConnection->exec_TRUNCATEquery('tx_crefoportal_invalid_cache_on_delivery');

Beim nÀchsten Request / Linkgenerierung werden nun die entsprechenden EintrÀge generiert und in die Tabellen geschrieben.

Die transfer-Tabelle auf dem Backend-System sollte regelmĂ€ĂŸig durch einen Job geleert werden.

Von Markus Sternberg, Roman Schenk, Martin Peranic

Der Beitrag ist auch im Entwickler-Magazin erschienen.
Multi-Instanz: TYPO3 in drei Schritten redundant aufsetzen

Veröffentlicht am 10. April 2018, aktualisiert am 10. Oktober 2020

Teilen auf
Macbook, auf dem vielen Zeilen Code in einem Editor aufgelistet stehen

Markus Sternberg, Roman Schenk, Martin Peranic

Markus Sternberg ist System Operator bei der Neofonie und beschĂ€ftigt sich mit allen Themen der HochverfĂŒgbarkeit im 24×7 Umfeld. Roman Schenk ist seit 6 Jahren System Engineer und seit 3 Jahren bei Neofonie tĂ€tig. Er entwickelt auf Linux basierende Serverlösungen. Martin Peranic ist Senior-Softwareentwickler bei Neofonie und hat mehr als 10 Jahre mit Java und Enterprise Content Management Systemen.

Illustration von CRM-Systemen

Neofonie hilft mit CRM-Beratung zur 360° Kundensicht

Neofonie unterstĂŒtzt Sie beim Aufbau eines erfolgreichen Customer Relation Managements.

SEO in bunten Buchstaben

Webinar: Relaunch und SEO – So machen Sie es richtig

Am 25.08. zeigt SEO-Experte Anton Littau, wie die richtige Strategie zum richtigen Zeitpunkt hilft.

SAP Silver Partner Logo

Neofonie ist SAP Silver Partner mit TXTWerk

Als SAP Silver Partner stellt Neofonie das Text Mining Framework TXTWerk im SAP App Center ab sofort bereit.

Ibexa-Logo

Neofonie und Ibexa sind Partner

Neofonie und Ibexa vereinbaren Partnerschaft, um Content und Commerce stÀrker miteinander zu verbinden.

digital-ratgeber.de auf einen Macbook

Wort und Bild Verlag stellt Digital Ratgeber vor

Mit Neofonie als Partner bringt der Wort & Bild Verlag mit dem „Digital Ratgeber“ eine neue Informationsplattform fĂŒr Apotheken und deren Kunden auf den Markt.

Stadtwerke Oranienburg News

Storytelling-Beratung fĂŒr Stadtwerke Oranienburg

Neofonie unterstĂŒtzt die Stadtwerke Oranienburg in einem kreativen Kommunikationsworkshop, um ihr Online-Ableseportal mit einem Kino-Werbespot zu promoten.

Mutter hÀlt Àngstliches Kind in den HÀnden

Spende fĂŒr ein Berliner Kinderhospiz

Mitarbeiter der Neofonie und Neofonie Mobile spenden 1.500 EUR fĂŒr das Berliner Kinderhospiz „Berliner Herz“.

Niedlicher Roboter

Chatbot erstellen in 5 Schritten

Wie ein Chatbot in wenigen Schritten entwickelt werden kann, stellen Bertram SĂ€ndig und Cornelia Werk vor.

Schwarzes Mikrofon

Neofonie Blogcast jetzt auf Google Podcast anhören

Mit der EinfĂŒhrung von Google Podcast in Deutschland, ist jetzt auch der Neofonie Blogcast auf allen Google-GerĂ€ten verfĂŒgbar.

Wann Big Data im Forderungsmanagement sinnvoll ist

Ob Analyseverfahren fĂŒr ein Unternehmen sinnvolle Ergebnisse bringen, kann nicht pauschal beantwortet werden.

Rot-beleuchtete Treppen

FlexibilitÀt als Erfolgsfaktor bei der Shopsystem Auswahl

Welche Punkte Sie bei einer neuen Shoplösung beachten sollten, stellt Michael Vax, VP Product bei Spryker vor.

Jovo Logo

Neofonie Mobile baut Alexa Skills and Google Actions mit Jovo

Neofonie Mobile ist neuer Partner des Entwicklungs-Framework Jovo und erstellt damit Sprachanwendungen fĂŒr Google und Alexa.

Illustration von digitalen Versicherungen

Versicherungen im Vergleich: Apps sind Pflicht

Die aktuelle Marktanalyse des App-Spezialisten Neofonie Mobile belegt Nachholbedarf in der digitalen Transformation unter Versicherern und Krankenkassen.

Text Mining Consulting KI E-Commerce

Wie Onlineshops von KĂŒnstlicher Intelligenz profitieren

Welche Punkte Sie bei einer neuen Shoplösung beachten sollten, stellt Michael Vax, VP Product bei Spryker, vor.

Was eine moderne Suchlösung leisten muss

Eine Suche auf Websites hilft Nutzern, schneller Informationen zu finden. Suchlösungen haben dabei nicht mehr lĂ€nger nur den Anspruch einzelne Begriffe zu finden, sondern relevante Inhalte gezielt auf die BedĂŒrfnisse des Nutzers auszuspielen.

Individual-Commerce: Wie Produktkonfiguratoren Onlineshopper glĂŒcklich machen

Auch Onlineshops können den Kunden mittels smarter Produktkonfiguratoren individuell abholen und ihnen ihr ganz persönliches Shoppingerlebnis ermöglichen.

JĂ€germeister Produktkonfigurator

Wie JĂ€germeister mit neuem Onlineshop mehr Umsatz macht

Das Erfolgsrezept stellt Wiljo Krechting, Manager Public Relations von Shopware, genauer vor.

Mit B2B-Storytelling und UX zu mehr Erfolg

B2B Unternehmen mĂŒssen vom B2C-Nutzererlebnis lernen, um ihre Businesskunden nachhaltig zu begeistern. Dabei stehen User Experience (UX) und Storytelling im Mittelpunkt.

Was sich hinter Headless CMS verbirgt

Das Konzept eines Headless CMS ist nicht neu, aber es wird immer wichtiger fĂŒr Unternehmen – vor allem bei Marketeers, Entwicklern und Business Developern.

Magnolia CMS wird auf einem Tablet bedient

How-to: Magnolia CMS und commercetools in 5 Schritten integrieren

Im Rahmen eines Demo-Shops hat Neofonie das Shopsystem commercetools mit Magnolia CMS integriert und dabei die Vorteile beider Systeme vereint.

Unser Newsletter „Neo Report“ vermittelt konkretes Praxiswissen, Trends und Know-how fĂŒr Ihr digitales Business – quartalsweise und kompakt. Jetzt anmelden.