Server mit memcached, php-memcache und aktiviertem TYPO3 (>4.3.0) Caching Framework
memcached ist perfekt zum cachen eigener Inhalte. Damit der Server damit ausgeruestet ist:
apt-get install memcached |
Ist ein Server mit mehr als 2 Kernen ausgestattet, sollte das threaded Paket installiert.
Der memcached sollte den freien RAM vollstaendig ausnutzen (nicht ueberbuchen, damit’s nicht ins SWAP geht).
Die Speichermenge kann in
/etc/memcached.conf
eingestellt werden.
PHP kann eine API anbieten (die Applikationen muessen sich aber schon selbstaendig um die Verwendung und Organisation des Caches kuemmern: z.B. TYPO3 Extensions koennen vom TYPO3 Core Caching Framework via memcache profitieren )
Um die PHP Erweiterung zu installieren:
apt-get install php5-dev pecl install memcache-3.0.6 |
Ideale PHP Werte in
/etc/php5/conf.d/memcache.ini
sind
[memcache] memcache.dbpath="/var/lib/memcache" memcache.maxreclevel=0 memcache.maxfiles=0 memcache.archivememlim=0 memcache.maxfilesize=0 memcache.maxratio=0 memcache.protocol=ascii
… ergaenzend fuer TYPO3, ausgelagert in
/etc/php5/conf.d/t3memcache.ini
ist folgendes von Vorteil
memcache.allow_failover=1 memcache.chunk_size=32768 memcache.default_port=11211 memcache.hash_function=fnv memcache.hash_strategy=consistent memcache.max_failover_attempts=20
Das „binary“ Protokoll wird von PHP nicht vollstaendig unterstuetzt, daher muss „ascii“ als sehr parser-intensives und langsameres Protokoll verwendet werden.
Damit TYPO3 vom memcache profitiert, folgende Einstellungen in der localconf.php vornehmen:
// ----- Caching with MemCache 4.3 only ---- $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations'] = array ( 'cache_hash' => array( 'frontend' => 't3lib_cache_frontend_VariableFrontend', 'backend' => 't3lib_cache_backend_MemcachedBackend', 'options' => array( 'servers' => array('tcp://localhost:11211'), ) ), 'cache_pages' => array( 'frontend' => 't3lib_cache_frontend_VariableFrontend', 'backend' => 't3lib_cache_backend_MemcachedBackend', 'options' => array( 'servers' => array('tcp://localhost:11211'), ) ), 'cache_pagesection' => array( 'frontend' => 't3lib_cache_frontend_VariableFrontend', 'backend' => 't3lib_cache_backend_MemcachedBackend', 'options' => array( 'servers' => array('tcp://localhost:11211'), ) ), ); $TYPO3_CONF_VARS['SYS']['useCachingFramework'] = '1'; // ----- /Caching with MemCache 4.3 only---- |
hier eine aktualisierte Version, die nicht das komplette cacheConfigurations Array ueberschreibt (danke fuer den Hinweis, Steffen).
// ----- Caching with MemCache - doesn't overwrite cacheConfigurations array completely ----- $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash'] = array( 'frontend' => 't3lib_cache_frontend_VariableFrontend', 'backend' => 't3lib_cache_backend_MemcachedBackend', 'options' => array( 'servers' => array('tcp://localhost:11211') ) ); $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages'] = array( 'frontend' => 't3lib_cache_frontend_VariableFrontend', 'backend' => 't3lib_cache_backend_MemcachedBackend', 'options' => array( 'servers' => array('tcp://localhost:11211') ) ); $TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection'] = array( 'frontend' => 't3lib_cache_frontend_VariableFrontend', 'backend' => 't3lib_cache_backend_MemcachedBackend', 'options' => array( 'servers' => array('tcp://localhost:11211') ) ); $TYPO3_CONF_VARS['SYS']['useCachingFramework'] = '1'; // ----- /Caching with MemCache - doesn't overwrite cacheConfigurations array completely ----- |
Steht ein weiterer, dezidierter memcache Server bereit, sollte der in die ’servers‘ Arrays mit aufgenommen werden. Um split-brain in den Caches zu vermeiden und die Last besser zu koordinieren, ist es aber besser fuer jedes Segment einen eigenen, einzelnen Server zu verwenden (wenn man 3 Server uebrig hat…)