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.

ontolux bei der Buzzwords 2022

Qi Wu von der KI-Agentur ontolux stellt Methoden zur Ressourceneinsparung von KI-Modellen mittels Knowledge Destillation in ihrem Vortrag bei der Buzzwords 2022 in Berlin vor. Die Buzzwords Berlin konzentriert sich auf Themen wie Open-Source-Softwareprojekte, Suche, Speicherung, Streaming und Verarbeitung von großen Datenmengen.

Header_Vortrag_Qi Wu_ontolux_pietro Jeng-n6B49lTx7NM-unsplash_06_21

ontolux bei der Mind Mastering Machines 2022

Die Minds Mastering Machines (M3) Konferenz wendet sich an Softwareentwickler, Data Scientists und Forschende, die Machine Learning und KI-Anwendungen entwickeln. Qi Wu von der KI-Agentur ontolux stellt Methoden zur Ressourceneinsparung von KI-Modellen mittels Knowledge Destillation in einem Vortrag vor.

KIFE_042022

KI und Forschung 04-2022

Die nächste Runde der großen Machine Learning-Modelle ist eingeleitet und GPT-3 und T5 sollen in Rente geschickt werden. In der ontolux „KI und Forschung“- Reihe gibt Dr. Till Plumbaum wieder Einblicke in aktuelle KI-Themen.

Rennfahrer

Wie es B2B Webseiten gelingt, mehr Service zu bieten

Ein durchdachtes UX-Design verwandelt B2B-Websites in ein effizientes Service-Instrument. In der Marconomy gibt UX-Experte Axel Hillebrand Tipps, worauf B2B-Marketer achten sollten.

Kind und Karriere – Vereinbarkeit von Familie und Beruf bei Neofonie

Vereinbarkeit von Familie und Beruf ist für viele Eltern eine Herausforderung und erfordert familienfreundliche Unternehmenskulturen. Wie familienfreundlich ist Neofonie ? Wir haben Khayrat Glende, Head of Quality Management dazu befragt.

Entity Linking mit Doccano und TXTWerk

Zum Labeling von Entitäten hat ontolux das Open Source-Annotationstool Doccano mit der Anbindung an das hauseigene Textanalyse-Framework TXTWerk in einem Fork eingebunden, um eigene Entity Linking Annotationen zu erstellen.

Mit UX-Design die Candidate Experience optimieren

Erfahren Sie die zehn Must-Knows für ein optimales Karriereportal oder lassen Sie unsere Experten von ION ONE einen Blick auf Ihre Karriereseite werfen, um Optimierungspotenziale zu identifizieren für mehr Bewerber.

KIFE_3_2022

KI & Forschung 03-2022

Google bekommt Konkurrenz, doch bringen neue KI-gestützte Suchmaschinen wirklich eine Besserung für Nutzer? In unserer „KI und Forschung“- Reihe gibt Dr. Till Plumbaum wieder Einblick in aktuelle KI-Themen.

Viele Generationen – ein Team – Neofonie

Wir haben Joachim Schneider und Philip Kramwinkel befragt: Was eint und unterscheidet ihre Generationen und wie bereichern sie sich aus ihrer Sicht in der Zusammenarbeit bei Neofonie?

Neofonie gibt Praxistipps beim IHK Digitalisierungsforum

Um die regionale Wirtschaft bei Digitalisierungsfragen zielgerichtet unterstützen zu können, treffen sich die 79 bundesweit vertretenen Industrie und Handelskammern holen beim IHK Digitalisierungsforum in Dortmund. Neofonie ist als Partner der IHK Digital vor Ort und gibt Einblicke in die Praxis.

Neofonie ist neuer Contentful Partner

Contentful hat sich zu einem wichtigen Akteur für digital orientierte Unternehmen entwickelt, die ihre Inhalte optimal nutzen wollen, um ihren Kunden das beste digitale Erlebnis zu bieten. Neofonie nimmt Contentful in sein Partnerportfolio auf und unterstützt Unternehmen bei der Entwicklung und Implementierung.

Natural Language Processing mit dem Wikidata Knowledge Graph

Im Rahmen der Wikidata Data Reuse Days 2022 stellen Bertram Sändig und Patricia Helmich von ontolux ihre Erfahrungen vor, die sie beim Natural Language Processing mit dem Wikidata Knowledge Graph machen.

Header_KI_Forschung_ontolux_christopher-burns-Kj2SaNHG-hg-unsplash_06_21

KI & Forschung 02-2022

Wenn über künstliche Intelligenz gesprochen wird, kommen schnell auch ethische Überlegungen ins Spiel. In unserer aktuellen „KI und Forschung“- Reihe stellt Dr. Till Plumbaum die neuesten Entwicklungen zu den Themen Ethik und Bias vor.

Agile Führung – Bedeutung und Herausforderungen für Führungskräfte

Was agile Führung konkret ausmacht und welche Anforderungen an eine agile Führungskraft gestellt werden, klären wir im Interview mit Holger Paetsch – Head of Project Management bei der Digitalagentur Neofonie.

Neofonie-Mitarbeiter schauen sich Design-Entwürfe an

Wie eine Webseite zum Verkaufsinstrument wird

Erst mit einem durchdachten UX-Design verwandelt sich eine Webseite zu einem effizienten Verkaufsinstrument. Axel Hillebrand gibt fünf wesentliche Tipps.

IntelligenteSuche_Staubsauger_News

Fun: Was intelligente Suche und Staubsauger gemein haben

Angeblich stehen beutellose Staubsauger und das Thema Intelligente Suche nicht unbedingt in einem klaren inhaltlichen Zusammenhang. Warum eigentlich nicht?

TOP Arbeitgeber für IT-Jobs

Neofonie ist Top Arbeitgeber für IT-Jobs 2022

Die Zeitschrift CHIP hat zum zweiten Mal die „Top Arbeitgeber für IT-Jobs“ gekürt. Von mehr als 2.500 untersuchten Arbeitgebern konnte Neofonie überzeugen und zählt in der Softwarebranche zu den attraktivsten Arbeitgebern.

Header_KI_Forschung_ontolux_christopher-burns-Kj2SaNHG-hg-unsplash_01_22

KI & Forschung 01-2022

Dr. Till Plumbaum stellt auch 2022 die neuesten Forschungsergebnisse rund um die Themen NLP und Künstliche Intelligenz vor. In der aktuellen Januar-Ausgabe von „KI und Forschung“ geht es um Datenqualität und um die neueste Version von Lucene.

Newsbox_WomeninTech

Women in Tech bei Neofonie

Der Frauenanteil in der Neofonie liegt derzeit bei 31 Prozent, davon sind rund 25 Prozent direkt im Projektgeschäft aktiv. Diana Neufeld haben wir zum Thema Women in Tech bei Neofonie befragt.

newsbox-GWA_Win

Neofonie zählt zu den besten Web- und Online Agenturen 2022

Neofonie ist offizieller Preisträger der German Web Awards. Der Award kürt die besten Web- und Online Agenturen und zählt zu einer der wichtigsten Auszeichnungen in der DACH-Region.

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