Installation de Memcache & Memcached sur serveur CentOs CPanel
Memcache est un gestionnaire de cache assez différent d’APC. Ce n’est pas un cache opcode mais un serveur de cache qui ne gérera que les infos spécifiquement envoyée en cache au serveur memcache afin de les garder en mémoire et pouvoir les appeler rapidemment.
Cela permet de stocker objets et données afin notamment de moins solliciter la BDD ou lecture disque sur des serveurs qui subissent un lourd trafic.
Memcache est donc un très bon complément d’APC (vu dans un billet précédent), utilisant APC pour le cache opcode et memcache pour les fonctions script de mise en cache, le tout afin de diminuer le temps de chargement et de fiabiliser la résistance au fort trafic.
L’un des avantages de Memcache par rapport à d’autres services de cache s’est qu’il s’execute comme un service externe et est accessible en IP. Cela permet ainsi dans des configurations à très gros trafic de dédier un serveur à memcache, voire plusieurs pour de la redondance et de s’y connecter. Tous les gros sites comme Youtube, Twitter, Facebook et d’autres utilisent memcache.
Pour installer memcache sur votre serveur Centos & Cpanel le plus simple reste encore d’installer le module mod_cache en cochant memcache dans easyapache et de lancer la compilation de php avec ce module.
Puis de vous logger en ssh en root :
mkdir
~/memcache
Puis d’installer Libevent
cd ~/memcache
wget https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz
tar xvfz libevent-2.0.16-stable.tar.gz
cd libevent-2.0.16-stable
./configure; make; make install
Puis d’installer memcached
cd ~/memcache
wget http://www.memcached.org/files/memcached-1.4.25.tar.gz
tar xvfz memcached-1.4.25.tar.gz
cd memcached-1.4.25
./configure --with-lib-event=/usr/local/; make; make install
De là, testez memcached :
memcached
Si vous obtenez une erreur :
error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
Alors :
pico /etc/ld.so.conf.d/libevent-i386.conf
--
[collez]–
/usr/local/lib/
–[/collez]
—
ldconfig
puis installez memcache pour php :
cd ~/memcache
wget http://pecl.php.net/get/memcache-3.0.8.tgz
tar xvfz memcache-3.0.8.tgz
cd memcache-3.0.8
phpize
./configure
make
make install
pico /usr/local/lib/php.ini
--
[coller]–
extension=memcache.so
–[/coller]
—
service httpd restart
Creez maintenant le fichier de config du daemon memcached et les startup files :
touch /etc/memcached.conf
nano /etc/memcached.conf
--
[coller]–
#Memory for user of 2gb
-m 2048
# default port
-p 11211
# user to run daemon nobody/apache/www-data
-u nobody
# only listen locally
-l 127.0.0.1
--[/coller]
--
touch /etc/init.d/memcached
chmod +x /etc/init.d/memcached
nano/etc/init.d/memcached--
[coller]--
#!/bin/bash
#
# memcached This shell script takes care of starting and stopping
# standalone memcached.
#
# chkconfig: - 80 12
# description: memcached is a high-performance, distributed memory
# object caching system, generic in nature, but
# intended for use in speeding up dynamic web
# applications by alleviating database load.
# processname: memcached
# config: /etc/memcached.conf
# Source function library.
. /etc/rc.d/init.d/functions
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/memcached
DAEMONBOOTSTRAP=/usr/local/bin/start-memcached
DAEMONCONF=/etc/memcached.conf
NAME=memcached
DESC=memcached
PIDFILE=/var/run/$NAME.pid
[ -x $DAEMON ] || exit 0
[ -x $DAEMONBOOTSTRAP ] || exit 0
RETVAL=0
start() {
echo -n $"Starting $DESC: "
daemon $DAEMONBOOTSTRAP $DAEMONCONF
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $PIDFILE
echo
return $RETVAL
}
stop() {
echo -n $"Shutting down $DESC: "
killproc $NAME
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $PIDFILE
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
--[/coller]
--
touch /usr/local/bin/start-memcached
chmod +x /usr/local/bin/start-memcached
nano /usr/local/bin/start-memcached
--
[coller]--
#!/usr/bin/perl -w # start-memcached # 2003/2004 - Jay Bonci <jaybonci@debian.org> # This script handles the parsing of the /etc/memcached.conf file # and was originally created for the Debian distribution. # Anyone may use this little script under the same terms as # memcached itself. use strict; if ($> != 0 and $< != 0) { print STDERR "Only root wants to run start-memcached.\n"; exit; } my $etcfile = shift || "/etc/memcached.conf"; my $params = []; my $etchandle; # This script assumes that memcached is located at /usr/bin/memcached, and # that the pidfile is writable at /var/run/memcached.pid my $memcached = "/usr/local/bin/memcached"; my $pidfile = "/var/run/memcached.pid"; # If we don't get a valid logfile parameter in the /etc/memcached.conf file, # we'll just throw away all of our in-daemon output. We need to re-tie it so # that non-bash shells will not hang on logout. Thanks to Michael Renner for # the tip my $fd_reopened = "/dev/null"; sub handle_logfile { my ($logfile) = @_; $fd_reopened = $logfile; } sub reopen_logfile { my ($logfile) = @_; open *STDERR, ">>$logfile"; open *STDOUT, ">>$logfile"; open *STDIN, ">>/dev/null"; $fd_reopened = $logfile; } # This is set up in place here to support other non -[a-z] directives my $conf_directives = { "logfile" => \&handle_logfile }; if (open $etchandle, $etcfile) { foreach my $line (<$etchandle>) { $line =~ s/\#.*//go; $line = join ' ', split ' ', $line; next unless $line; next if $line =~ /^\-[dh]/o; if ($line =~ /^[^\-]/o) { my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/; $conf_directives->{$directive}->($arg); next; } push @$params, $line; } } unshift @$params, "-u root" unless (grep $_ eq '-u', @$params); $params = join " ", @$params; if (-e $pidfile) { open PIDHANDLE, "$pidfile"; my $localpid = <PIDHANDLE>; close PIDHANDLE; chomp $localpid; if (-d "/proc/$localpid") { print STDERR "memcached is already running.\n"; exit; } else { `rm -f $localpid`; } } my $pid = fork(); if ($pid == 0) { reopen_logfile($fd_reopened); exec "$memcached $params"; exit(0); } elsif (open PIDHANDLE,">$pidfile") { print PIDHANDLE $pid; close PIDHANDLE; } else { print STDERR "Can't write pidfile to $pidfile.\n"; }
--[/coller]
--
Puis testez que cela fonctionne :
/etc/init.d/memcached restart
Shutting down memcached: [ OK ]
Starting memcached: [ OK ]
ps aux | grep memcached
nobody 5966 0.5 0.3 18248 16444 pts/0 S 13:55 0:00 /usr/local/bin/memcached -u root -m 16 -p 11211 -u nobody -l 127.0.0.1
(cette deuxième commande doit vous renvoyer les infos de votre fichier de config memcached)
Puis ajoutez le daemon memcached au démarage de votre serveur :
/sbin/chkconfig memcached on
/sbin/chkconfig --list | grep memcached
memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Voila votre serveur memcache est opérationnel ! il ne vous reste plus qu'à paramétrer vos script php pour qu'ils se connectent au serveur memcache à l'ip et sur le port que vous avez configuré dans votre memcached.conf.
Merci pour cette petite fiche, très bien faite et surtout très utile !
Merci beaucoup pour ce tuto !