**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.** # Howto Memcached Memcached est un serveur noSQL clé-valeur non persistent (il stocke tout en mémoire, et toutes les données sont donc perdues après un redémarrage). Son utilisation typique est de mettre en cache des résultats issus de base de données, des réponses d'API, des rendus de pages, etc. [[BR]] ## Installation Sous Debian Squeeze, on a Memcached 1.4.5 : ~~~ # aptitude install memcached ~~~ Pour gérer du Memcached avec PHP : ~~~ # aptitude install php5-memcache php5-memcached ~~~ ## Configuration La configuration se passe dans le fichier _memcached.conf_ : ~~~ -d # Mode verbose (pour du debug) logfile /var/log/memcached.log -v # -vv # Taille mémoire (en Mo) -m 64 # Adresses d'écoute (à supprimer pour ouvrir de partout) -l 127.0.0.1 -p 11211 -u nobody # Nombre max de connexions -c 1024 ~~~ ## Exemple de script en PHP ~~~ get('my_value'); if ($myValue == FALSE) { echo 'Tha value is not in memcache!'; // Adding the value in memcache for 60s $memcache->add('my_value', "Hello World!", false, 60); } else { echo 'The value is in memcache and is: ' . $myValue . ''; } ?> ~~~ ## Test en telnet ~~~ $ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. get foo VALUE foo 0 2 hi END stats STAT pid 8861 (etc) ~~~ ## Sessions PHP avec Memcached Memcached peut notamment être utilisé pour stocker les sessions PHP. Par exemple : ~~~ session.save_handler = memcached session.save_path = "127.0.0.1:11211/" ~~~ ...mais les développeurs de Memcached le déconseillent ! En effet, Memcached est fait pour du cache et non du stockage. Voir ## Instances Si besoin, plusieurs instances de memcached peuvent être lancées sur le serveur, sur des ports TCP différents. Il est nécessaire de dupliquer le fichier de configuration _/etc/memcached.conf_ (en prenant soin d'adapter les options _logfile_ et _-p_), le script d'init _/etc/init.d/memcached_ (en prenant soin d'adapter les variables _NAME_ et _DAEMONBOOTSTRAP_), et enfin le script _/usr/share/memcached/scripts/start-memcached_ qui démarre réellement Memcached après avoir parsé son fichier de configuration (en prenant soin d'adapter la variable _$etcfile_, indiquant son fichier de configuration). ### Instances Jessie Sous Debian Jessie, si on utilise systemd, pour pouvoir bénéficier des instances jessie, il faut créer un template _/etc/systemd/system/memcached@.service_ : ~~~{.ini} [Unit] Description=memcached daemon After=network.target [Service] ExecStart=/usr/share/memcached/scripts/systemd-memcached-wrapper /etc/%p_%i.conf [Install] WantedBy=multi-user.target ~~~ Ne plus démarrer le service memcached par defaut dans le target multi-user (~ runlevel 3) : ~~~ # rm /etc/systemd/system/multi-user.target.wants/memcached.service ~~~ Ensuite pour chaque instance avec un fichier de configuration _/etc/memcached_$nominstance.conf_, créer un lien symbolique vers le template dans le target multi-user : ~~~ # cd /etc/systemd/system/multi-user.target.wants/ # ln -s /etc/systemd/system/memcached@.service memcached@$nominstance.service ~~~ Puis ~~~ # systemctl daemon-reload ~~~ On peut ensuite manipuler chaque instance avec systemctl, par exemple : ~~~ # systemctl memcached@$nominstance ~~~ ## Réplication Repcached est un patch pour avoir une réplication master-master entre serveurs memcached. Cependant la dernière modification date du 13/12/2011 pour la version 1.2.8 de memcached. Elle n'est visiblement plus maintenu. En squeeze on est en 1.4.5. Il n'est pas conseillé de l'utiliser en production. ## Monitoring ~~~ $ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. stats STAT pid 11575 STAT uptime 417529 STAT time 1339577389 STAT version 1.2.2 STAT pointer_size 64 STAT rusage_user 246.070000 STAT rusage_system 849.540000 STAT curr_items 91905 STAT total_items 15555673 STAT bytes 360080271 STAT curr_connections 33 STAT total_connections 7626105 STAT connection_structures 376 STAT cmd_get 8342525 STAT cmd_set 16858359 STAT get_hits 1700473 STAT get_misses 6642052 STAT evictions 412025 STAT bytes_read 39016879520 STAT bytes_written 3810238557 STAT limit_maxbytes 402653184 STAT threads 1 ~~~ ### Nagios TODO ### Munin Voilà comment activer le plugin munin memcached : ~~~ # cd /etc/munin/plugins # ln -snf /usr/share/munin/plugins/memcached_ memcached_bytes # ln -snf /usr/share/munin/plugins/memcached_ memcached_counters # ln -snf /usr/share/munin/plugins/memcached_ memcached_rates # aptitude install libcache-memcached-perl # /etc/init.d/munin-node restart ~~~ On peut ensuite tester le plugin : ~~~ # munin-run memcached_bytes # munin-run memcached_counters # munin-run memcached_rates ~~~ Des plugins pour Munin existent pour relever diverses informations sur l'utilisation de memcache, comme la mémoire utilisée, le nombre et type de requêtes faites, le nombre de clés dans la base, etc… Un plugin intéressant et assez complet :