废话: 可跳过
由于项目需要,需要搭建memcached集群环境,遂开始调研相关技术
网络上有不少linux下安装memcached的教程,对于我这个linux零基础的来说,想立马在linux下安装memcached,似乎还是有点阻碍。参照了不少网络教程,安装过程中总是会出错,特别是在安装magent的时候,总是会报错,而相关教程中,很少提及如何解决报错问题,经过两天的折腾,终于摸索并解决了所有的报错问题,遂整理了一套“傻瓜”式的安装过程,避免安装过程中的报错
----------------------------------------------------------------------------------------------------------------------------------------
什么是Memcached
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。
Memcached基于一个存储键/值对的HashMap,它并不提供冗余(复制其HashMap条目),当某个服务器停止运行或崩溃了,所有存放在服务器上的键/值对都将丢失。但目前Memcached的客户端和代理程序可以提供多服务器的并联方式,可以提供一定的处理能力。
Memcached与其他分布式缓存的区别
Memcached与其它常用的分布式缓存(例如EhCache、OSCache、JBoss Cache)最主要的区别在于Memcached采用集中式缓存方式(即一台或多台缓存服务器为所有应用系统提供缓存能力),自身不提供集群能力,不提供缓存复制功能;而其他分布式缓存系统采用分布式缓存方式,各个应用系统内部提供数据缓存的能力,多个缓存间采用组播或点对点的方式进行缓存同步。
在性能上来看,Memcached比其它分布式缓存系统低一半以上(未考虑大量数据在其它缓存系统进行复制的影响);但从管理方面来看,Memcached的缓存采用集中管理的模式,应用系统可以水平扩展,而其它分布式缓存在水平扩展的同时,必须同时调整缓存复制策略,一旦应用服务器节点大量扩展,对于缓存服务器间的数据复制将成几何数增加。
----------------------------------------------------------------------------------------------------------------------------------------
环境:CentOS release 6.3
搭建memcached集群环境,先要安装gcc
# yum -y install gcc
在root目录下创建soft_hhf目录
# cd /root/
# mkdir soft_hhf
1.编译安装libevent
# cd /root/soft_hhf/
# wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
# tar -xvf libevent-2.0.21-stable.tar.gz
# cd libevent-2.0.21-stable
# ./configure --prefix=/usr
# make&&make install
# cd ../
2.编译安装Memcached
# cd /root/soft_hhf/
# wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
# tar -xvf memcached-1.4.15.tar.gz
# cd memcached-1.4.15/
# ./configure --with-libevent=/usr
# make&&make install
# cd ../
安装完成后会把memcached放到 /usr/local/bin/memcached
3.编译安装magent-0.6到/usr/local/下(推荐安装magent-0.5稳定版本,下面有说明 日期:2013.01.04)
# cd /usr/local
# mkdir magent
# cd magent/
# wget http://memagent.googlecode.com/files/magent-0.6.tar.gz
# tar zxvf magent-0.6.tar.gz
# vi ketama.h
在开头加入
#ifndef SSIZE_MAX
# define SSIZE_MAX 32767
#endif
# vim Makefile (magent-0.6版本)
LIBS = /usr/lib64/libevent.a /usr/lib64/libm.a 改为 LIBS = -lrt /usr/lib64/libevent.a /usr/lib64/libm.a
CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64) 改为 CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)
# vim Makefile (magent-0.5版本)
CFLAGS = -Wall -O2 -g 改为 CFLAGS = -lrt -Wall -O2 -g
# cp /usr/lib/libevent.a /usr/lib64
# ln -s /usr/lib64/libm.so /usr/lib64/libm.a
# /sbin/ldconfig
# sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
# make
# cp magent /usr/bin/magent
# cd ../
测试memcached是否安装成功:
1.启动一个memcached进程
# memcached -m 1 -u root -d -l 192.168.1.151 -p 11211
2.查看是否启动成功了
# ps aux|grep memcached
显示两行 root,则说明安装成功了,如下所示:
root 11952 0.0 0.0 331112 1104 ? Ssl 15:09 0:00 memcached -m 1 -u root -d -l 192.168.1.151 -p 11211
root 11959 0.0 0.0 103240 796 pts/1 S+ 15:09 0:00 grep memcached
测试magent是否安装成功:
1.启动一个magent进程
# magent -u root -n 51200 -l 192.168.1.151 -p 12000 -s 192.168.1.151:11211
2.查看是否启动成功了
# ps aux|grep magent
显示两行 root,则说明安装成功了,如下所示:
root 11720 0.0 0.0 10972 588 ? Ss 13:51 0:00 magent -u root -n 51200 -l 192.168.1.151 -p 12000 -s 192.168.1.151:11211 -s 192.168.1.151:11212 -b 192.168.1.151:11213
root 11974 0.0 0.0 103240 792 pts/1 R+ 15:12 0:00 grep magent
注: 之前的安装过程中,我总是只显示一行:root 11974 0.0 0.0 103240 792 pts/1 R+ 15:12 0:00 grep magent,但是执行magent命令又不报错,可是查看magent进程,老是没有,老是启动不起来,其实还是magent没有安装成功,所以这边必须要看到两行,才能说明启动成功。
好了,如果你顺利安装成功,那就恭喜你了,可以继续深入学习memached的相关知识了
对于安装过程中的报错问题,我会在下一篇文章中整理出来,供自己以后查阅
接着就是进行测试学习了,首先确保telnet服务安装了
查看telnet是否安装
查看telnet客户端是否安装:
# rpm -q telnet
若无安装,则执行:
# yum -y install telnet
查看telnet服务端是否安装:
# rpm -q telnet-server
若无安装,则执行:
# yum -y install telnet-server
注:刚测试发现magent-0.6虽是最新版本,但是还存在问题,不稳定,第二次访问magent始终会堵塞在那里,只能set一个值。测试了magent-0.5是稳定版本,没有出现只能set一个值的现象,遂推荐安装magent-0.5版本
----------------------------------------------------------------------------------------------------------------------------------------
magent是一款开源的Memcached代理服务器软件,其项目网址为:http://code.google.com/p/memagent/
magent is a simple but useful proxy program for memcached servers.
It features:
keeps connections to memcached servers
supports following memcached commands
get gets
delete
incr decr
add set replace prepend append
cas
event-driven by using libevent library
supports ketama algorithm
backup servers farm
unix domain socket
Usage:
-h this message
-u uid
-g gid
-p port, default is 11211. (0 to disable tcp support)
-s ip:port, set memcached server ip and port
-b ip:port, set backup memcached server ip and port
-l ip, local bind ip address, default is 0.0.0.0
-n number, set max connections, default is 4096
-D do not go to background
-k use ketama key allocation algorithm
-f file, unix socket path to listen on. default is off
-i number, max keep alive connections for one memcached server, default is 20
-v verbose
Changelog:
2010/4/14: memcached agent 0.6
add connection keepalive handler
bug fix, more robust, more debug messages
Examples:
magent -s 10.1.2.1 -s 10.1.2.2:11211 -b 10.1.2.3:14000 -v
Notes:
current magent's speed is about 80% of memcached's. finding way to speed it up(not good)
adding backup server does no harm to magent's performance. (good)
magent's cpu usage is less than memcached's and has very little memory usage. (good)