Memcached安装及配置

准备

从http://memcached.org/下载最新版的memcached(memcached-1.4.15.tar.gz)
wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz

从http://libevent.org/下载最新版的libevent(libevent-2.0.21-stable.tar.gz)
wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

从http://ftp.free.org/mirrors/ftp.freebsd.org/ports/local-distfiles/swills/
下载memcached-replication(实现主备同步)
wget http://ftp.free.org/mirrors/ftp.freebsd.org/ports/local-distfiles/swills/repcached-2.3.1-1.4.15.patch.gz

将下载好的memcached、libevent、memcached-replication传到linux服务器上

安装

安装libevent

wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xzf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr
make
make install
ldconfig
cd ..

测试libevent是否安装成功:

ls -al /usr/lib | grep libevent

libevent 安装完毕

安装memcached

wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
tar xzf  memcached-1.4.13.tar.gz
cd memcached-1.4.13
./configure --with-libevent=/usr
make
make install
cd ..

测试是否成功安装memcached:

ls -al /usr/local/bin/mem*

memcache安装完毕

安装memcached-replication

wget http://ftp.free.org/mirrors/ftp.freebsd.org/ports/local-distfiles/swills/repcached-2.3.1-1.4.13.patch.gz
 
cd memcached-1.4.13
gzip -cd ../repcached-2.3.1-1.4.13.patch.gz | patch -p1 
#(注意这一步要在已有的memcached根目录下进行,repcached-2.3.1-1.4.13.patch.gz的位置在memcached根目录的上一层)
# 注:如果提示(bash: patch: command not found)执行命令(centos/redhat: yum install patch)
./configure --enable-replication --with-libevent=/usr
make
make install

注:该版本的replication有个BUG,builder.setCommandFactory(new BinaryCommandFactory());时无法同步,所以还是使用默认的

卸载方法

make uninstall

注: 如在安装memcached-replication时出现如下错误,请安如下设置
error: `IOV_MAX’ undeclared (first use in this function)
【原因】 memcache.c 对该系统 red hat enterprise 5 server 的侦测错误,导致宏 IOV_MAX 未定义
【解决方法】 手动修改文件 memcache.c,定义 IOV_MAX
【实施步骤】 用vi打开memcache.c 文件,注释掉57及59行,修改结果如下

57 //#if defined(__FreeBSD__) || defined(__APPLE__)
58 # define IOV_MAX 1024
59 //#endif

启动

master memcached

/usr/local/bin/memcached -d -p 11211 -u nobody -c 256 -m 256 -x 127.0.0.1 -X 11212

slave memcached

/usr/local/bin/memcached -d -p 11213 -u nobody -c 256 -m 256 -x 127.0.0.1 -X 11212

注: repcached只做同步,具体哪个是主,哪个是备,需要在客户端设置

查看帮助:

/usr/local/bin/memcached -h

-d 以守护(daemon)程序方式运行memcached
-l 设置监听的ip地址,如果是本机,通常不设置
-p 设置监听端口,默认为11211 通常不设置
-m 设置内存大小 单位 M
-u 指定用户。当前用户为root时,可以指定用户。(不能以root用户权限启动)
-vv 用very vrebose模式启动,调试信息和错误输出到控制台

还有很多命令可以用 memcached –h 来查看

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

测试

telnet  server  port

基本 memcached 客户机命令

您将使用五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:

  • set
  • add
  • replace
  • get
  • delete

前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令。它们都非常简单易用,且都使用以下语法:

command <key> <flags> <expiration time> <bytes> <value>

memcached 修改命令参数

参数 用法
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节点
value 存储的值(始终位于第二行)

缓存管理命令

  • stats显示了关于当前 memcached 实例的信息
  • flush_all用于清理缓存中的所有名称/值

参考资料

https://www.ibm.com/developerworks/cn/java/j-memcached1
http://blog.163.com/lgh_2002/blog/static/44017526201282410131261/

java客户端

  1. Spymemcached
    下载地址http://code.google.com/p/spymemcached/downloads/list也可以从maven中直接下载
  2. xmemcached
    下载地址http://code.google.com/p/xmemcached/downloads/list也可以从maven中直接下载

以上介绍的两种java客户端是目前较为优秀的,具体使用哪种根据自己喜好。我在本次集成中使用的是xmemcached

与hibernate集成

从http://code.google.com/p/hibernate-memcached/ 下载hibernate-memcached。该项目默认与spymemcahed集成,Xmemcached在它的基础上做了扩展

配置如下属性

hibernate.cache.provider_class com.googlecode.hibernate.memcached.MemcachedCacheProvider
hibernate.cache.use_query_cache true
hibernate.cache.use_second_level_cache true
hibernate.memcached. memcacheClientFactory net.rubyeye.xmemcached.utils.hibernate.XmemcachedClientFactory
hibernate.memcached .servers localhost:11211 localhost:11212
hibernate.memcached.cacheTimeSeconds 300

注:XmemcachedClientFactory默认只支持多节点集群,不支持主备模式。可扩展该类,重写createMemcacheClient方法,采用AddrUtil.getAddressMap(getServerList())获取服务器地址就可以

还有如下可选属性

hibernate.memcached.keyStrategy HashCodeKeyStrategy
hibernate.memcached.readBufferSize DEFAULT_SESSION_READ_BUFF_SIZE
hibernate.memcached.operationTimeout DEFAULT_OP_TIMEOUT
hibernate.memcached.hashAlgorithm NATIVE_HASH,KETAMA_HASH etc.
hibernate.memcached.commandFactory TextCommandFactory , BinaryCommandFactory
hiberante.memcached.sessionLocator ArrayMemcachedSessionLocator,KetamaMemcachedSessionLocator

参考资料

memcached-session-manager介绍

memcached-session-manager(简称msm)是结合memcached实现的Tomcat session共享解决方案,目前只支持Tomcat6、Tomcat7,是通过Tomcat容器的Manager实现多台tomcat的session共享,解决了在集群环境下session复制问题。
另外还有人制作了jboss6的版本,可从http://vdisk.weibo.com/s/295xp下载

环境

  1. Linux 环境
  2. Tomcat7.X (3台),在同一台机器上启动三台Tomcat需要修改conf/server.xml中的三个端口:8080,8005,8009
  3. MemBase (1台),也可采用memcached,使用方法一样,只是在java客户端连接时有不同。
  4. nginx

准备的jar包

注意:不同的tomcat版本(tomcat6,tomcat7)所需的包不一样,需要针对tomcat版本下载对应的包.

  1. 这是采用的最新稳定版1.6.1,序列化方式使用的是kryo,注意版本要求与msm版本基本一致,建议统一采用最新稳定版,如下。其中序列化方式是可选的。
    kryo序列化配置msm

  2. 这是采用的javolution的序列化方式所有需要的包
    javalution序列化配置msm

建议采用kryo序列化方式,效率更高

注:
如果使用de.javakaffee.web.msm.JavaSerializationTranscoderFactory序列化,只需引入以下3个包即可:
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
spymemcached-2.8.12.jar

配置

  1. 将上面所提到的包全部拷贝到tomcat的lib下(三台tomcat都需要)
  2. 修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下任意一段代码:

A:使用默认的sticky session,kryo序列化方式,memcached缓存(建议使用sticky session方式)

<Context>  
  ...  
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"  
    failoverNodes="n1"  
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  
    />  
</Context>  

B:使用non-sticky session

<Context>  
  
  ...  
  
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
 memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"  
    sticky="false"  
    sessionBackupAsync="false"  
    lockingMode="uriPattern:/path1|/path2"  
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  
    />  
  
</Context>  

C:使用membase

<Context>  
  
  ...  
  
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    memcachedNodes="http://host1.yourdomain.com:8091/pools"  
    username="bucket1"  
    password="topsecret"  
    memcachedProtocol="binary"  
    sticky="false"  
    sessionBackupAsync="false"  
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  
    />
 
</Context>

当使用javolution序列化方式时将:

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory”   

替换为:

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"   

配置完成后,分别启动tomcat,正常启动说明msm配置成功。

  1. 最后附上nginx配置:

修改配置文件nginx\conf\nginx.conf

  1. 找到内容server {

在它的上面加入如下内容:

upstream  10.6.53.120 {  
ip_hash;  ----#ip_hash策略将同一IP的所有请求都转发到同一应用服务器  
server   10.6.53.120:8080;---------我的tomcat端口号  
server   10.6.53.120:7080;  
server   10.6.53.120:6080;  
}
  1. 找到
location / {  
root   html;  
index  index.html index.htm;  
}  

把内容更改如下:

location / {  
proxy_pass http://10.6.53.120  
proxy_redirect default;  
proxy_connect_timeout 10; #(跟代理服务器连接的超时时间,必须留意这个time out时间不能超过10秒.当一台服务器当掉时,过10秒转发到另外一台服务器)  
}   
  1. 找到
server {  
listen       80;  
server_name  localhost;  

把内容改成如下:

server {  
listen       80;  
server_name  10.6.53.120;  

(这是监听访问域名绑定那台服务器80端口的请求)
到这里所有的配置已经完成,现在准备一个简单的web工程,并分别部署到三台tomcat下。启动memcached(membase),启动三台tomcat,启动nginx,然后在地址栏输入url地址,看能否成功访问。关闭其中一台tomcat,看是否仍然能够正常访问,能够则说明配置nginx配置成功。

参考资料

猜你喜欢

转载自blog.csdn.net/wlddhj/article/details/84321220