一、安装 libevent
1、安装 gcc
yum install gcc
2、设置安装路径
./configure -prefix=/home/wangzh/work/libevent-2.0.22
3、编译
make
4、安装
make install
二、安装 Memcached
1、设置安装路径
./configure --prefix=/home/wangzh/work/memcached-1.4.25 --with-libevent=/home/wangzh/work/libevent-2.0.22
2、编译
make
3、安装
make install
4、建立软连
ln -s /home/wangzh/work/memcached-1.4.25/bin/memcached /usr/bin/memcached
三、安装 magent
1、解压 magent 到指定文件夹下。
2、/sbin/ldconfig
3、sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
4、修改文件 Makefile
LIBS = /home/wangzh/work/libevent-2.0.22/lib/libevent.a /usr/lib64/libm.a
CFLAGS = -Wall -g -O2 -I/home/wangzh/work/libevent-2.0.22/include $(M64)
5、make
6、cp magent /usr/bin/magent
报错1:
gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c
magent.c: In function 'writev_list':
magent.c:729: error: 'SSIZE_MAX' undeclared (first use in this function)
magent.c:729: error: (Each undeclared identifier is reported only once
magent.c:729: error: for each function it appears in.)
make: *** [magent.o] Error 1
解决办法:
[root@centos6 memcached]# vi ketama.h
#在开头加入
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
报错2:
gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c
gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o ketama.o ketama.c
gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a
gcc: /usr/lib64/libevent.a: No such file or directory
gcc: /usr/lib64/libm.a: No such file or directory
解决办法:
[root@centos6 memcached]# ln -s /usr/lib/libevent* /usr/lib64/
[root@centos6 memcached]# make
报错3:
gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a
gcc: /usr/lib64/libm.a: No such file or directory
make: *** [magent] Error 1
解决办法:
yum install glibc glibc-devel
如果是64bit的系统则不会在/usr/lib64/libm.a 生成,如果是32bit即会有。
[root@centos6 memcached]# cp /usr/lib64/libm.so /usr/lib64/libm.a
报错4:
gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a
/usr/lib64/libevent.a(event.o): In function `detect_monotonic':
event.c:(.text+0xc79): undefined reference to `clock_gettime'
/usr/lib64/libevent.a(event.o): In function `gettime':
event.c:(.text+0xd60): undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [magent] Error 1
解决办法:
[root@centos6 memcached]# vi Makefile
CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)
改为:
CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)
四、使用 Java 客户端连接测试集群
1、导入maven 包
mvn install:install-file -Dfile=java_memcached-release_2.6.6.jar -DgroupId=com.danga -DartifactId=memcached -Dversion=2.6.6 -Dpackaging=jar -DgeneratePom=true
<dependency>
<groupId>com.danga</groupId>
<artifactId>memcached</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.19</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
2、启动集群
/usr/bin/memcached -d -m 10 -u root -l 192.168.253.128 -p 1111 -c 256 -P /tmp/memcached1.pid
/usr/bin/memcached -d -m 10 -u root -l 192.168.253.128 -p 2222 -c 256 -P /tmp/memcached2.pid
/usr/bin/memcached -d -m 10 -u root -l 192.168.253.128 -p 3333 -c 256 -P /tmp/memcached3.pid
/usr/bin/magent -u root -n 5120 -l 192.168.253.128 -p 11211 -s 192.168.253.128:1111 -s 192.168.253.128:2222 -b 192.168.253.128:3333
3、Java 客户端代码
public class CachedHelper {
private static MemCachedClient mcc =new MemCachedClient();
private CachedHelper(){}
static {
String[] servers ={"192.168.253.128:11211"};
Integer[] weights ={2};
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(servers);
pool.setWeights(weights);
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaxIdle(1000 * 60 * 60 * 60);
// 禁用 nagle 算法
pool.setNagle(false);
pool.setSocketConnectTO(0);
pool.setSocketTO(3000);
// 设置为一致性 hash算法
// pool.setHashingAlg(3);
pool.initialize();
}
public static MemCachedClient getMemCachedCilent(){
return mcc;
}
public static void main( String[] args ) throws InterruptedException {
MemCachedClient mcc1=CachedHelper.getMemCachedCilent();
// mcc1.add("key1","value1");
// mcc1.add("key2","value2");
//
// System.out.println("key1=" + mcc1.get("key1"));
// System.out.println("key2="+mcc1.get("key2"));
for(int i=0;i<10;i++){
mcc1.set("key"+i,"value"+i);
}
for(int i=0;i<10;i++){
Object obj=mcc1.get("key"+i);
System.out.println( "key"+i+"=="+obj );
}
}
}
注:
启动 Java 主程序总是连接不上 magent,
解决方法:卸载 libevent-2.0.22 ,安装低版本的 libevent-1.4.15,后重新安装 Memcached、magent。
五、安装 libevent-1.4.15
1、安装 libtool
yum install libtool
2、生成 configure 文件
./autogen.sh
3、设置安装路径
./configure -prefix=/home/wangzh/work/libevent-1.4.15
4、编译
make
5、安装
make install