Thursday, November 1, 2012

Memcache + CentOS

Install Memcached from Source
Download the latest source from http://www.memcached.org website.
  • # cd /usr/src
  • # wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
  • # tar zxvf memcached-1.4.13.tar.gz
  • # cd memcached-1.4.13
  • # ./configure –with-libevent
  • # make all && make install
Install the libmemcached
libMemcached is an open source C/C++ client library and tools for the memcached server (http://danga.com/memcached). It has been designed to be light on memory usage, thread safe, and provide full access to server side methods. You can download the latest version from http://libmemcached.org/libMemcached.html
  • # wget https://launchpad.net/libmemcached/1.0/1.0.4/+download/libmemcached-1.0.4.tar.gz
  • # tar zxvf libmemcached-1.0.4.tar.gz
  • # cd libmemcached-1.0.4
  • # ./configure
  • # make && make install
It is advisable to run/start the memcached process as non-root user. We need to create  a daemon starter scripts for memcached.
  • # touch /etc/memcached.conf
in /etc/memcached.conf place the following code.
#Memory size  (adjust this according to your settings)
-m 64
# default port
-p 11211
# user to run daemon nobody/apache/www-data
-u nobody
# only listen locally
-l 127.0.0.1
 
Create the startup files.
Using SSH Terminal, execute the following command
  • # touch /etc/init.d/memcached
  • # chmod +x /etc/init.d/memcached
in /etc/init.d/memcached place the follwing code.
#!/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
 Using SSH Terminal, execute the following command
  • # touch /usr/local/bin/start-memcached
  • # chmod +x  /usr/local/bin/start-memcached
in /usr/local/bin/start-memcached place the following code.
#!/usr/bin/perl -w
# start-memcached
# 2003/2004 – Jay Bonci
# 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 = ;
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”;
}

Test the startup script. This command will start memcached server.
  • # /etc/init.d/memcached restart
Add memcached as autostart daemon. This command will make sure that memcached will start automatically on when your server restart.
  • # /sbin/chkconfig memcached on

Install the Memcache PECL Extension for PHP
Even though memcached is happily running on the server, it’s not accessible from PHP without the PECL extension. Fortunately this is a very easy process, just use the pecl command.
  • # pecl install memcache
Make sure that extension=memcache.so is in your php.ini (it should be added in there automatically if not, add it).
Restart Apache

No comments:

Post a Comment