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…)

Das könnte dich auch interessieren …

5 Antworten

  1. schwarzmode sagt:

    Dom,
    php-memcache ist nicht php-memcached. Das sind unterschiedliche PECL extensions. Wie eine funktionierende php-memcache extension installiert werden kann, steht im Text 😉 Ich habe dort gerade die Version von 3.0.1 auf die aktuelle 3.0.6 geandert.

    Um Steffens Einwand, das cacheConfigurations Array nicht komplett zu ueberschreiben, gerecht zu werden, habe ich den Beitrag noch um ein Konfigurationsbeispiel dazu ergaenzt.

  2. Dom sagt:

    Hmm komischer weise bekomm ich mit mit den Settings die Exception das “Memcache” nicht installiert sei. Ich dachte es sei “MemcacheD” im spiel ?

    oder muss ich da noch was umstellen weil “memcacheD” bei mir definitiv installiert ist.

    zur info im core steht : class.t3lib_cache_backend_memcachedbackend

    public function __construct(array $options = array()) {
    if (!extension_loaded(‘memcache’)) {
    throw new t3lib_cache_Exception(
    ‘The PHP extension “memcache” must be installed and loaded in ‘ .
    ‘order to use the Memcached backend.’,
    1213987706
    );
    }

  3. Alex sagt:

    Hi,

    schöner Beitrag!
    Ist die Konfiguration inzwischen auf dem neuen Stand?

  4. Sorry, ich muss leider sagen, dass das so eine schlechte Idee ist.
    $TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘] sollte keinesfalls komplett überschrieben werden, denn das wird mit TYPO3 4.6 definitiv (nach momentanem Stand) krachen, weil der neue cache_runtime dann plötzlich nicht existiert.

    Folglich einfach
    $TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_XXX‘]
    umschreiben, dann ist’s auch zukunftssicher!

    Siehe
    http://forge.typo3.org/issues/27208
    http://wiki.typo3.org/Caching_framework

    Gruß
    Steffen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert