1、编译安装libevent:
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../
2、编译安装Memcached:
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../
3、编译安装magent:
cd magent/
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../
前面的3步就跳过了,接着测试magent +memcached的强大功能
环境说明: centeros 5.4(虚拟机) IP:192.168.128.133
测试客户端:xp
先在133上面开5个memcached端口
依次执行
memcached -m 1 -u root -d -l 192.168.128.133 -p 10001
memcached -m 1 -u root -d -l 192.168.128.133 -p 10002
memcached -m 1 -u root -d -l 192.168.128.133 -p 10003
memcached -m 1 -u root -d -l 192.168.128.133 -p 10004
memcached -m 1 -u root -d -l 192.168.128.133 -p 10005
先看看是否启动监听端口成功
ps -ef | grep memcached
发现结果6行,最后一行是执行这个查看命令的 说明成功
接着启动magent 设置启动参数 -u当然是启动账号 -n是最大连接数,-l是magent监听的IP -p是magent监听的端口
后面的格式依次是 -s IP:端口 代表是主服务器 然后指定IP:端口的格式
-b IP:端口的意思是 备用服务器,
这里我设置了10001,10002,10003 为主Memcached服务器
10004,10005 为memcached备份服务器
magent -u root -n 51200 -l 192.168.128.133 -p 12000 -s 192.168.128.133:10001 -s 192.168.128.133:10002 -s 192.168.128.133:10003 -b 192.168.128.133:10004 -b 192.168.128.133:10005
执行命令后 可以先查看是否启动成功
ps -ef | grep magent
出现2行 OK,继续
在XP客户端上测试
直接连接magent 端口 12000
telnet 192.168.128.133 12000
执行stats
说明magent 里面已经负载了3个memcached 端口
接着我们继续set
set key1 0 0 1
1
STORED
set key2 0 0 1
2
STORED
set key3 0 0 1
3
STORED
好了 依次设置了3个key ,这里说明下参数 <command name> <key> <flags> <exptime> <bytes>\r\
详细的解释大家请看:http://blog.zol.com.cn/737/article_736087.html
既然设置了3个key,我们来读取看
执行命令get key1 get key2 get key3
依次返回了
到此,一个缓存写入已经存取的过程就完成了,但是我们要了解其中的过程呀,哈哈
然后我们直接登陆memcached的端口get数据看 它是怎么样保存的
先telnet 192.168.128.133 10001
执行stats
STAT pid 7496
STAT uptime 894
STAT time 1319202978
STAT version 1.2.6
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.001999
STAT curr_items 1
STAT total_items 1
STAT bytes 54
STAT curr_connections 3
STAT total_connections 4
STAT connection_structures 4
STAT cmd_get 1
STAT cmd_set 1
STAT get_hits 1
STAT get_misses 0
STAT evictions 0
STAT bytes_read 36
STAT bytes_written 32
STAT limit_maxbytes 1048576
STAT threads 1\STAT threads 1\
说明10001只缓存了1个key
我们看是存的哪一个
get key1
VALUE key1 0 1
1
END
OK存的key1
再telnet 192.168.128.133 10002
直接
get key1
END
get key2
VALUE key2 0 1
2
END
get key3
END
get key4
END
get key5
END
说明10002上缓存的key2啊,
这样不难看出10003上应该是缓存的key3了
试试
telnet 192.168.128.133 10003
然后
get key1
END
get key2
END
get key3
VALUE key3 0 1
3
END
get key4
END
get key5
END
到此 知道了magent是根据自己的算法 把要缓存的内容依次分发到后端的memcached的,至于具体的算法就不知道了,我个人认为应该是依次分发的吧,当然此memcached存活的前提下,
知道了主服务器是分发负载的,不知道备用服务器是不是这样,
进telnet 192.168.128.133 10004
依次
get key1
END
get key2
VALUE key2 0 1
2
END
get key3
END
get key4
END
get key5
END
发现 备用服务10004 并没有全部缓存3个key,就是之前的key1 key2 key3
再进 telnet 192.168.128.133 10005
get key1
VALUE key1 0 1
1
END
get key2
END
get key3
VALUE key3 0 1
3
END
get key4
END
get key5
END
看来备用服务器也是实现了负载啊,哈哈,估计算法还是跟主服务器的一样吧,
然后我把主服务器的10001 10002 10003的进程全部kill了
root 7496 1 0 21:01 ? 00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10001
root 7498 1 0 21:01 ? 00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10002
root 7500 1 0 21:01 ? 00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10003
kill 7496 7498 7500
再在magent的端口上get key1
VALUE key1 0 1
1
END
get key2
VALUE key2 0 1
2
END
get key3
VALUE key3 0 1
3
END
并不影响取值。
不过如果备用服务器也死了的话,就无力了,
到此测试结束咯