03déc.2009
Compilation Installation et Configuration de Memcached
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.
Commentaires
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).
+
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).
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...
mardi, décembre 8 2009 | 10:04
déconseillé par qui ?
intégriste de la sécurité va !
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