从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服务器上
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 安装完毕
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安装完毕
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 中的键值对的标准修改命令。它们都非常简单易用,且都使用以下语法:
command
参数 | 用法 |
---|---|
key | key 用于查找缓存值 |
flags | 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 |
expiration time | 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远) |
bytes | 在缓存中存储的字节点 |
value | 存储的值(始终位于第二行) |
https://www.ibm.com/developerworks/cn/java/j-memcached1
http://blog.163.com/lgh_2002/blog/static/44017526201282410131261/
以上介绍的两种java客户端是目前较为优秀的,具体使用哪种根据自己喜好。我在本次集成中使用的是xmemcached
从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(简称msm)是结合memcached实现的Tomcat session共享解决方案,目前只支持Tomcat6、Tomcat7,是通过Tomcat容器的Manager实现多台tomcat的session共享,解决了在集群环境下session复制问题。
另外还有人制作了jboss6的版本,可从http://vdisk.weibo.com/s/295xp下载
注意:不同的tomcat版本(tomcat6,tomcat7)所需的包不一样,需要针对tomcat版本下载对应的包.
建议采用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
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配置成功。
修改配置文件nginx\conf\nginx.conf
在它的上面加入如下内容:
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;
}
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秒转发到另外一台服务器)
}
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配置成功。