Installeer memcache voor drupal op centos

Posted by: 
Dominique De Cooman

In terminal:

Allereerst installeer libevent:

cd /usr/local/src/
wget <a href="http://monkey.org/~provos/libevent-1.3e.tar.gz
tar">http://monkey.org/~provos/libevent-1.3e.tar.gz
tar</a> zxpfv libevent*
cd libevent*
./configure
make install

Download en installeer memcached:

cd /usr/local/src/
wget <a href="http://www.danga.com/memcached/dist/memcached-1.2.4.tar.gz
tar">http://www.danga.com/memcached/dist/memcached-1.2.4.tar.gz
tar</a> zxpfv memcached*
cd memcached*
./configure
make install

Nu beginnen we met een daemon om te testen

./memcached -u root -d -m 48 -l 10.10.102.6 -p 11211
 
//change the ip in your ip
//change the user root in an appropriate user for memcache
//To test if it is running type memcached -u root -vv
//Now kill it
killall memcached

Wanneer u de error:./memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory krijgt
Probeer:

ln -s /usr/local/lib/libevent-1.3e.so.1 /lib64/

Als u nog steeds dezelfde error krijgt:
Kopieer alle bestanden in /usr/local/lib to /usr/lib

Nu zou u een memcached server operationeel moeten hebben.

We moeten het nog steeds laten werken met php.
Installeer libmemcached:

cd /etc/yum.repos.d/
wget <a href="http://rpms.famillecollet.com/remi-enterprise.repo
wget">http://rpms.famillecollet.com/remi-enterprise.repo
wget</a> <a href="http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
wget">http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarc...</a> <a href="http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm">http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm</a> -Uvh remi-release-5*.rpm epel-release-5*.rpm
 
yum --enablerepo=remi install libmemcached\*

Installeer pecl memcache:

pecl install memcache 

//of u kunt het zelf bouwen
pecl download memcached
tar zxvf memcached-1.0.0.tgz (or whatever version downloads)
cd memcached-1.0.0
phpize
./configure --with-libmemcached-dir=/opt/local
make
make install

Voeg deze regels toe aan het php.ini bestand

extension=memcache.so
memcache.hash_strategy="consistent"

Start de server opnieuw.

/etc/init.d/httpd restart

Om te testen of de php module is ingeschakeld doe een php_info() en controleer of de memcache settings tabel aanwezig is.

In drupal schakel de module en en voer in following in het settings bestand:

$conf = array(
   // The path to wherever memcache.inc is. The easiest is to simply point it
   // to the copy in your module's directory.
   'cache_inc' => './sites/all/modules/memcache/memcache.inc',
   // or
   // 'cache_inc' => './sites/all/modules/memcache/memcache.db.inc',
);

Bewerk :
Meer geschikte caching configuratie voor een drupal site. Ik definieerde zes bins.

$conf['cache_inc'] = 'sites/all/modules/contrib/memcache/memcache.inc';
$conf['memcache_servers'] = array(
    'localhost:11211' => 'default',
    'localhost:11212' => 'page',
    'localhost:11213' => 'filter',
    'localhost:11214' => 'content',
    'localhost:11215' => 'block',
    'localhost:11216' => 'views',
    'localhost:11217' => 'form',//read update below why the form cache needs its own bin
   );
$conf['memcache_bins'] = array(
     'cache'        => 'default',
 
     'cache_menu'   => 'default',
     'cache_apachesolr'   => 'default',
     'cache_form'   => 'form',//read update below why the form cache needs its own bin
     'cache_glue'   => 'default',
     'cache_rules'   => 'default',
     'cache_mollom'   => 'default',
     'cache_update'   => 'default',
     'cache_usermenu'   => 'default',
     'cache_views'   => 'views',
     'cache_views_data'   => 'views',
     'cache_page'   => 'page',
     'cache_filter' => 'filter',
     'cache_content' => 'content',
     'cache_block'   => 'block',
);

Dit heeft een andere initiëring van de bins nodig. Daarnaast is er ook een script nodig om de bins te starten en te stoppen.
Om de memcached daemons te starten gebruiken we dit script. (Wordt gedaan in plaats van de deamon in de command regel hier boven in te voeren)
Dus creëer een bestand in /etc/init.d

cd /etc/init.d/
vi memcached
//type 'i' to edit
//paste this
#!/bin/bash
#source is the path to your memchached installation (if you have another version adapt)
source="/usr/local/src/memcached-1.2.4/memcached"
 
RETVAL=0
prog="memcached"
desc="Distributed memory caching"
 
start() {
        echo -n $"Starting $desc ($prog): "
 
 
        $source -d -u root -m 64  -p 11211
        $source -d -u root -m 320 -p 11212
        $source -d -u root -m 128 -p 11213
        $source -d -u root -m 320 -p 11214
        $source -d -u root -m 128 -p 11215
        $source -d -u root -m 64 -p 11216
        $source -d -u root -m 64 -p 11217
 
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
        return $RETVAL
}
 
stop() {
        echo -n $"Shutting down $desc ($prog): "
        killall $prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        return $RETVAL
}
 
restart() {
        stop
        start
}
 
reload() {
        echo -n $"Reloading $desc ($prog): "
        killproc $prog -HUP
        RETVAL=$?
        echo
        return $RETVAL
}
 
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
 condrestart)
        [ -e /var/lock/subsys/$prog ] && restart
        RETVAL=$?
        ;;
  reload)
        reload
        ;;
  status)
        status $prog
        RETVAL=$?
        ;;
   *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
        RETVAL=1
esac
 
exit $RETVAL
 
 
//press esc type :wq to save and exit
//make the file executable
chmod u+x memcached
 
//to start
service memcache start
 
//to stop
service memcache stop

Ga naar admin/settings/memcache en schakel de show statistics in om het proces te volgen.
Ga naar reports memcached om de statistieken van uw bins te bekijken.
U dient het process te volgen en de bins aan te passen aan uw behoeftes. U kunt het meer of minder geheugen geven. Een evenwichtige grootte geeft de beste prestatie.

UPDATE:
Wanneer u memcached gebruikt heeft u een apparte bin voor uw forms nodig. (http://drupal.org/node/500646)
Ik heb de bovenstaande code aangepast zodat deze werkt.

Een ander probleem waar ik tegenaan liep met memcached, hierachical select werkte niet. Dit kan opgelost worden door deze patch te gebruiken
http://drupal.org/node/538022#comment-3116204

Reactie toevoegen