Magent搭建Memcached集群

 

一、编译安装libevent

 下载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 ../

 

二、编译安装Memcached

 下载memcached-1.4.0.tar.gz安装包

 tar zxvf memcached-1.4.0.tar.gz 

 cd memcached-1.4.0/ 

 ./configure --with-libevent=/usr 

 make && make install 

 cd ../ 

 

三、编译安装magent

 1、mkdir magent  cd magent/ 

    下载magent-0.6.tar.gz安装包 

    tar zxvf magent-0.6.tar.gz

 

 2、在ketama.h文件开头添加  

   #ifndef SSIZE_MAX  

   #define SSIZE_MAX 32767  

   #endif

 

 3、ln -s /usr/lib64/libm.so /usr/lib64/libm.a

 

 4、vim Makefile

   1)LIBS = /usr/lib64/libevent.a /usr/lib64/libm.a  

      修改为:   

      LIBS = /usr/lib/libevent.a/usr/lib64/libm.a

 

   2)CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)

修改为:

      CFLAGS = -lrt -Wall -g -O2-I/usr/local/include $(M64)

 

 5、/sbin/ldconfig

 

 6、sed -i "s#LIBS = -levent#LIBS = -levent -lm#g"Makefile 

  

 7、make 

   

 8、cp magent /usr/bin/magent 

    cd ../   

 

四、启动memcached和magent实例

   1、memcached启动:memcached -u root -d -l192.168.0.59 -p 11211 

参数说明:

-d选项是启动一个守护进程

-m是分配给Memcache使用的内存数量,单位是MB,默认64MB

-u是运行Memcache的用户

-l是监听的服务器IP地址

-p是设置Memcache监听的端口,最好是1024以上的端口

-c选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定

-P是设置保存Memcache的pid文件

   2、magent启动:magent -u root -n 51200 -l192.168.0.59 -p 12000 -s 192.168.0.90:11211 -s 192.168.0.91:11211 -b192.168.0.59:11211

参数说明:

· -h this message  

· -u uid  

· -g gid  

· -p port, default is 11211. (0 to disable tcp support)  

· -s ip:port, set memcached server ip and port  

· -b ip:port, set backup memcached server ip and port  

· -l ip, local bind ip address, default is 0.0.0.0  

· -n number, set max connections, default is 4096  

· -D do not go to background  

· -k use ketama key allocation algorithm  

· -f file, unix socket path to listen on. default is off  

· -i number, max keep alive connections for one memcached server, default is 20  

·  -v verbose 

 

五、magent测试流程

现有测试服务器:192.168.0.59/90/91

先在三台服务器上安装好libevent和memcached,启动memcached实例;

然后在59上安装好magent,启动magent实例

1、登录59上的magent,存储key1到key5:

sykdeMacBook-Pro:~syk$ telnet 192.168.0.59 12000

Trying192.168.0.59...

Connected to192.168.0.59.

Escapecharacter is '^]'.

stats

memcached agentv0.6

matrix 1 ->192.168.0.90:11211, pool size 0

matrix 2 ->192.168.0.91:11211, pool size 0

END

set key1 0 0 1

1

STORED

set key2 0 0 2

22

STORED

set key3 0 0 3

333

STORED

set key4 0 0 4

4444

STORED

set key5 0 0 5

55555

STORED

get key1

VALUE key1 0 1

1

END

get key2

VALUE key2 0 2

22

END

get key3

VALUE key3 0 3

333

END

get key4

VALUE key4 0 4

4444

END

get key5

VALUE key5 0 5

55555

END

quit

Connectionclosed by foreign host.

 

2、登录59上的memcached,取值key1到key5:

sykdeMacBook-Pro:~syk$ telnet 192.168.0.59 11211

Trying192.168.0.59...

Connected to192.168.0.59.

Escapecharacter is '^]'.

 

stats

STAT pid 1479   memcached服务器的进程ID

STAT uptime1079  服务器已经运行的秒数

STAT time1457675550 服务器当前的unix时间戳

STAT version1.4.0 memcached版本号

STATpointer_size 64 当前操作系统的指针大小

STATrusage_user 0.013997

STATrusage_system 0.057991

STATcurr_connections 7 当前打开的连接数

STATtotal_connections 12 服务器打开以后打开的总连接数

STATconnection_structures 8 服务器分配的连接构造数

STAT cmd_get 0        get命令总请求次数

STAT cmd_set 62   set命令总请求次数       

STAT cmd_flush0  flush命令总请求次数

STAT get_hits 0   总命中次数

STAT get_misses0 总未命中次数

STATdelete_misses 0

STATdelete_hits 0

STATincr_misses 0

STAT incr_hits0

STATdecr_misses 0

STAT decr_hits0

STAT cas_misses0

STAT cas_hits 0

STAT cas_badval0

STAT bytes_read5407 总读取字节数(请求字节数)

STATbytes_written 4184 总发送字节数(结果字节数)

STATlimit_maxbytes 67108864 分配给memcached的内存大小(字节)

STATaccepting_conns 1

STATlisten_disabled_num 0

STAT threads 5    当前线程数

STATconn_yields 0

STAT bytes 8308   当前服务器存储items占用的字节数

STAT curr_items62 服务器当前存储的items数量

STATtotal_items 62  服务器总存储的items数量

STAT evictions0  为获取空闲内存而删除的items数(分配给memcached的空间用满后需要删除旧的         items来得到空间分配给新的items)

END

 

get key1

VALUE key1 0 1

1

END

get key2

VALUE key2 0 2

22

END

get key3

VALUE key3 0 3

333

END

get key4

VALUE key4 0 4

4444

END

get key5

VALUE key5 0 5

55555

END

quit

Connectionclosed by foreign host.

 

3、登录90上的memcached,取值key1到key5:

sykdeMacBook-Pro:~syk$ telnet 192.168.0.90 11211

Trying192.168.0.90...

Connected to192.168.0.90.

Escapecharacter is '^]'.

get key1

END

get key2

VALUE key2 0 2

22

END

get key3

END

get key4

VALUE key4 0 4

4444

END

get key5

END

quit

Connectionclosed by foreign host.

 

4、登录91上的memcached,取值key1到key5:

sykdeMacBook-Pro:~syk$ telnet 192.168.0.91 11211

Trying192.168.0.91...

Connected to192.168.0.91.

Escapecharacter is '^]'.

get key1

VALUE key1 0 1

1

END

get key2

END

get key3

VALUE key3 0 3

333

END

get key4

END

get key5

VALUE key5 0 5

55555

END

quit

Connectionclosed by foreign host.

 

还可以模拟一台memcached挂掉进行测试

 

通过以上测试可以得出结论:

1. 通过magent的连接池存放的值会分别存在magent代理的所有memcached上去。

2. 如果有一个memcached宕机通过magent代理方式还能取到值。

3. memcached修复重启后通过magent代理方式取到的值就会为Null,这是由于memcache重启后里边的值随着memcache服务的停止就消失了(因为在内存中),但是magent是通过key进行哈希计算分配到某台机器上的,memcache重启后会还从这台机器上取值,所以取到的值就为空。

 

解决办法:

1. 在每次memcache宕机修复后可以写一个程序把集群中的其他memcache的所有信息全给拷贝到当前宕机修复后的memcache中。

2. 自己写代理,当从一个memcached服务上取到的值为Null时再去其他memcached上取值。

 

缓存与DB的同步

 

比较保险的做法是:查询的时候从缓存中取,add、updae、delete的时候同时操作缓存与DB。

当然你也可以定时同步缓存与DB的数据,不同的业务应该有不同的选择。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值