Get your server issues fixed by our experts for a price starting at just 25 USD/Hour. Click here to register and open a ticket with us now!

Author Topic: Install memcache in cPanel  (Read 5386 times)

0 Members and 1 Guest are viewing this topic.

vinodt

  • Guest
Install memcache in cPanel
« on: October 29, 2013, 04:54:17 am »
How to install memcache&memcached in cPanel:

Run easyapache and in exhaustive option list select memcache.

Compile and restart apache.

Memcache requires LibEvent

wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
 tar xvfz libevent-1.4.14b-stable.tar.gz
 cd libevent-1.4.14b-stable
 ./configure; make; make install

Register LibEvent

nano /etc/ld.so.conf.d/libevent-i386.conf

Add the following text inside:

/usr/local/lib/

Run ldconfig

=======================================
Compile and install Memcached

wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
 tar xvfz memcached-1.4.5.tar.gz
 cd memcached-1.4.5
 ./configure; make; make install

 Install PHP extension for Memcache

wget http://pecl.php.net/get/memcache-3.0.3.tgz
 tar xvfz memcache-3.0.3.tgz
 cd memcache-3.0.3
 phpize
 ./configure
 make
 make install

Edit /usr/local/lib/php.ini:

 nano /usr/local/lib/php.ini

extension=memcache.so
 
service httpd restart

Run Memcache as a deamon on the startup files
=====================================
nano /etc/memcached.conf and add the below lines

#Memory a usar
 -m 16
 # 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

touch /etc/init.d/memcached
 chmod +x /etc/init.d/memcached

nano /etc/init.d/memcached
==========================
#!/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
===============================

Run
touch /usr/local/bin/start-memcached
chmod +x /usr/local/bin/start-memcached

nano /usr/local/bin/start-memcached

Add the below text:
===========================
#!/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";
}
========================================

/etc/init.d/memcached restart

ps aux | grep memcached

add memcached as autostart deamon

/sbin/chkconfig memcached on
 /sbin/chkconfig --list | grep memcached

Output will be like:

 memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off

To test memcached:

Create memcache.php in document root and add the text
=================================
<?php
error_reporting(E_ALL);
$memcache = memcache_connect('localhost', 11211);

if ($memcache) {
        $memcache->set("str_key", "String to store in memcached");
        $memcache->set("num_key", 123);

        $object = new StdClass;
        $object->attribute = 'test';
        $memcache->set("obj_key", $object);

        $array = Array('assoc'=>123, 345, 567);
        $memcache->set("arr_key", $array);

        var_dump($memcache->get('str_key'));
        var_dump($memcache->get('num_key'));
        var_dump($memcache->get('obj_key'));
}
else {
        echo "Connection to memcached failed";
}
?>
================================
Browser will display " String to store in memcached."

Regards,

Vinod T K