CentOS 6.5 安装 libevent、Memcached、magent 及测试集群环境

一、安装 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

猜你喜欢

转载自512105256.iteye.com/blog/2285985