System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Compilation Installation et Configuration de Memcached

memcached png

Pour de meilleurs performance sur vos sites web

Memcache est un serveur de cache qui utilise la mémoire vive du serveur pour stocker ses données. Ce mode de stockage garantit des temps de lecture très inférieurs au système traditionnel cd cache de fichiers.

Memcached et eAccelerator peuvent fonctionner ensemble sans aucun problème.

  • Memcached met en cache les résultats et diverses variables de php.
  • eAccelerator optimise le code PHP.

Url du site officiel : http://memcached.org/

Pré-requis :

  • libevent
  • libevent-dev

Téléchargement :

Vous le trouverez ici : http://memcached.org/ Les versions plus ancienne ici : http://code.google.com/p/memcached/downloads/list

cd /opt/SOURCES/
curl -0 http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
tar xvzf memcached-1.4.5.tar.gz 
cd memcached-1.4.5

Installation :

J'ai rencontré un souci avec le make qui me faisait des erreurs du type :

[...]
/usr/include/netinet/in.h:136:2: error: invalid preprocessing directive #typedef
/usr/include/netinet/in.h:137:2: error: invalid preprocessing directive #struct
/usr/include/netinet/in.h:138:4: error: invalid preprocessing directive #{
[...]
/usr/include/arpa/inet.h:78: error: expected ‘)’ before ‘__net’
make[2]: *** [memcached-memcached.o] Error 1
make[2]: Leaving directory `/opt/SOURCES/memcached-1.4.4'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/opt/SOURCES/memcached-1.4.4'
make: *** [all] Error 2

J'ai donc du faire :

rpm -qf /usr/include/netinet/in.h
rpm -e --nodeps glibc-headers
yum install glibc-headers

Car le fichier : /usr/include/netinet/in.h avait été modifié et embêtait notre ami Memcached.

mkdir /opt/memcached145
./configure --prefix=/opt/memcached145
make
make install

Lancement de Memcached :

Procédez comme ceci :

cd /opt/memcached145/bin
./memcached -d -m 16 -u nobody -l 127.0.0.1 -p 11211

Vérification :

netstat -ntlp | grep memcached
tcp        0      0 127.0.0.1:11211             0.0.0.0:*                   LISTEN      17701/memcached

Il est bien lancé, poursuivons...

Intégration à PHP :

Vous pouvez le faire avec :

pecl install memcache

Ou manuellement :

cd /usr/local/src
curl -O http://pecl.php.net/get/memcache
tar zxvf memcache*
cd memcache-*
phpize
./configure
make
make test 
make install

Compilez avec cette ligne si vous avez comme moi un php compilé à la main :

./configure --enable-memcache --enable-debug --with-php-config=/opt/php5212/bin/phpize --with-php-config=/opt/php5212/bin/php-config --disable-docs --enable-64bit

Arrivez la vous devez modifier votre fichier php.ini:

Pour y intégrer ceci :

extension=memcache.so

moi j'ai du mettre :

extension=/opt/php5210/lib/php/extensions/no-debug-non-zts-20060613/memcache.so

Redémarrez votre apache :

service httpd stop
service httpd start

et vérifiez avec un phpinfo que Memcache focntionne bien.

ou plus simple :

php -r "phpinfo();" | grep memcache

Vous devriez avoir quelque chose comme ça :

memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 8192 => 8192
memcache.default_port => 11211 => 11211
memcache.default_timeout_ms => 1000 => 1000
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => standard => standard
memcache.max_failover_attempts => 20 => 20
Registered save handlers => files user sqlite memcache

Voila votre premier rencontre avec Memcached est finie :)

Autre test pour vérifier que memcache fonctionne bien :

Créer un fichier test-memcache.php avec le contenu suivant mettez le dans votre /var/www d'apache et afficher le dans votre navigateur :

?php
// nouvelle objet Memcache
$objMem = new Memcache;
$objMem->connect('localhost', 11211) or die ('Connexion impossible!');

// retour la version du serveur Memcached
$strVersion = $objMem->getVersion();
echo 'Version du serveur: '.$strVersion.'';
echo "<br />";

$arrValue = array('val_str' => 'ma variable', 'val_int' =>587439);

$objMem->set('montableau', $arrValue, false, 60) or die ('Impossible de sauvegarder les données');
echo 'Stockage des donnees dans le cache (expire dans 60 seconds)';
echo "<br />";

$arrResult = $objMem->get('montableau');
echo 'Donnees venant du cache:';
echo "<br />";

// affichage de la variable
var_dump($arrResult);
?>

Dans les sources, plus précisément dans le repertoire scripts vous trouverez un script d'init et un script perl memcached-tool qui permet de monitorer memcached.

Si vous voyez des différences de performances sur vos sites après installation de la chose faites nous signe, merci.

Par GanGan | le jeudi, décembre 3 2009 07:00

Commentaires

1. Remi

jeudi, décembre 3 2009 | 07:30

Je pense que la plupart des distributions fournissent le serveur memcache dans leur dépôt.

=> yum install memcached.

Concernant l'extension PHP il y a 3 possibilités :

memcache v2 => ancienne, robuste et éprouvée
memcache v3 => en phase de développement (beta) mais offrant plus de performance et de souplesse (redondance, protocol binaire..)
memcached => plus récente, utilisant la bibliothèque cliente libmemcached, très active.

Idem, Cf les dépôts de la distribution.

Un des gros intérêt de memcache AMHA est son utilisation comme gestionnaire de sessions PHP (idéal lorsqu'on a plusieurs frontaux).

+

2. GanGan

jeudi, décembre 3 2009 | 13:50

oui mais si comme moi tu préfère compiler apache et php c'est plus facile de l'integrer en le compilant, en compilant soit même on apprend plus (fonctionnement des softs) et on gagne un peu en perf et en sécurité (uniquement les options utilisées).

3. hydraze

dimanche, décembre 6 2009 | 10:51

C'est quand même *très* déconseillé d'avoir un compilateur sur un serveur en prod...

4. gangan

mardi, décembre 8 2009 | 10:04

déconseillé par qui ?
intégriste de la sécurité va !

5. NightAngel

mercredi, décembre 23 2009 | 20:17

"C'est quand même *très* déconseillé d'avoir un compilateur sur un serveur en prod..." -> Faut arrêter de prendre de la drogue ! Partant de ce principe on peut aussi bruler la prise écran du serveur, ses ports USB, arracher le lecteur CD, etc...
Très sympa ce tuto sur Memcached quoiqu'il en soit ;)