magent与memcached集群的实现

在以日常的使用当中,提升DB性能,使用memcached这样的db缓存是必不可少的。在日常的使用中,由于单点的memcached的容量有限,而且当出现问题时,容易造成数据丢失,所以有了magent这样的一个memcached代理,可以将memcache进行集群化、负载均衡等功能;
magent的有点和缺点介绍:在使用过程中,由于magent承担了代理的角色,会将所有的负载平均的分配在后端的两个或者几个memcahched中,这样可以实现了负载均衡,同时呢,由于有备用的memcached(集群化),并不需要担心缓存的数据丢失。但是这种使用中也是有缺点的,当主节点挂掉之后,备用节点会继续提供服务,保证数据的完整性,但是当主节点再次启动之后,数据无法自动同步至主几点当中,这样就会出现写入或者需要缓存在主节点的数据,仍会从DB读取,所以当主节点挂掉之后,建议在压力较小的情况下,启动主memcache节点,这样形成数据同步,并减轻DB的压力;
环境介绍:
OS:        CentOs 6.5
memcached: memcached-1.4.02
magent   : magent-0.5
memcache1:   port 11211
memcache2:   port 11222
memcache3:   port 11233

1、首先安装memcached ,由于机器资源有限,所以本次演示将在一台机器上进行,使用不同端口来完成集群操作;下文介绍当中所有所需软件包自行下载即可,尽量保持版本相同,避免出现版本不同不可预知的BUG:
安装libevent

shell> tar zxf libevent-2.0.10-stable.tar.gz 
shell> cd libevent-2.0.10-stable
shell> ./configure --prefix=/usr/local/libevent
shell> make && make install 

2、安装memcached:

shell> tar zxf memcached-1.4.20.tar.gz
shell> cd memcached-1.4.20
shell>./configure --prefix=/usr/local/memcached1 --with-libevent=/usr/local/libevent
shell> make && make install

重复第二步操作,安装三个memcached ,条件允许也可以部署在三台不同的机器上;
3、启动三个memcached:

shell> /usr/local/memcached/bin/memcached -d -m 128 -u root -p 11211 -c 1024
shell> /usr/local/memcached2/bin/memcached -d -m 128 -u root -p 11222 -c 1024
shell> /usr/local/memcached3/bin/memcached -d -m 128 -u root -p 11233 -c 1024

4、启动完成后,开始安装magent。

shell> mkdir /usr/local/magent
shell> tar zxf magent-0.5.tar.gz -C /usr/local/magent/
shell> cd /usr/local/magent
shell> sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile 
shell> make

执行make出现如下错误:

gcc -Wall -O2 -g  -c -o magent.o magent.c
magent.c:65:19: 错误:event.h:没有那个文件或目录
magent.c:124: 错误:字段‘ev’的类型不完全
magent.c:154: 错误:字段‘ev’的类型不完全
magent.c: 在函数‘server_free’中:
magent.c:468: 警告:隐式声明函数‘event_del’
magent.c: 在函数‘put_server_into_pool’中:
magent.c:522: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c: 在函数‘out_string’中:
magent.c:696: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:696: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
magent.c:696: 错误:所在的函数内也只报告一次。)
magent.c:699: 警告:隐式声明函数‘event_set’
magent.c:699: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:700: 警告:隐式声明函数‘event_add’
magent.c: 在函数‘do_transcation’中:
magent.c:816: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:818: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:818: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c: 在函数‘start_backup_transcation’中:
magent.c:902: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:904: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:904: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c: 在函数‘try_backup_server’中:
magent.c:994: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:996: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:996: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c: 在函数‘drive_memcached_server’中:
magent.c:1014: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1060: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:1062: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘process_get_response’中:
magent.c: 在函数‘process_get_response’中:
magent.c:1236: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1238: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘process_update_response’中:
magent.c:1283: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1285: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘drive_backup_server’中:
magent.c:1305: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1343: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:1343: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c: 在函数‘drive_client’中:
magent.c:1618: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:1669: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1682: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘server_accept’中:
magent.c:1734: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:1735: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:1735: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘main’中:
magent.c:2106: 警告:隐式声明函数‘event_init’
magent.c:2111: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:2111: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:2121: 警告:隐式声明函数‘event_loop’
make: *** [magent.o] 错误 1

处理方法:编辑MakeFile,以下内容:

LIBS = -levent -lm -L/usr/local/libevent/lib
INCLUDE=-I/usr/local/libevent/include

再次执行make 出现如下错误:

gcc -Wall -O2 -g  -c -o magent.o magent.c
magent.c: 在函数‘writev_list’中:
magent.c:623: 错误:‘SSIZE_MAX’未声明(在此函数内第一次使用)
magent.c:623: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
magent.c:623: 错误:所在的函数内也只报告一次。)
make: *** [magent.o] 错误 1

处理1:
编辑vim ./ketama.h 此文件,在开头出加上:

vim ./ketama.h 

#ifndef SSIZE_MAX  
#define SSIZE_MAX      32767  
#endif

继续make,出现如下信息表示成功:

gcc -Wall -O2 -g -o magent magent.o ketama.o -levent -lm

5、启动magent

magent -u root -n 1024000 -l 192.168.1.30 -p 88997 -s 192.168.1.30:11211 -s 192.168.1.30:11222 -b 192.168.1.30:11233

在使用过程中,-b参数为指定为备用,接下来可以进行测试,具体参数可以使用–help进行查看,或者方便启动,把magent命令加入到/usr/sbin/目录下;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值