sdtf08 发表于 2015-9-1 07:21:44

magent + memcached 集群测试

  1、编译安装libevent:

wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../  
  2、编译安装Memcached:

wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../  
  3、编译安装magent:

mkdir 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\n
  详细的解释大家请看: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   10 21:01 ?      00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10001
root      7498   10 21:01 ?      00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10002
root      7500   10 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
  
  并不影响取值。
  不过如果备用服务器也死了的话,就无力了,
  到此测试结束咯
  
页: [1]
查看完整版本: magent + memcached 集群测试