您的位置:首页 > 数据库 > Memcache

Memcached+magent集群安装及错误处理

2017-03-15 17:26 351 查看

准备

资料准备:

libevent下载:http://download.csdn.net/detail/webben/9782162

memcached下载:http://memcached.org/files/memcached-1.4.35.tar.gz

magent官网:http://code.google.com/p/memagent/

Google下载(墙):http://memagent.googlecode.com/files/magent-0.6.tar.gz

magent下载:http://download.csdn.net/detail/webben/9782076

(0.6 在2017年03月已经是最新版本)

安装

cd /usr/local/src
tar -zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable

./configure --prefix=/usr/local/libevent
make && make install


wget http://memcached.org/files/memcached-1.4.35.tar.gz tar zxvf memcached-1.4.35.tar.gz
cd memcached-1.4.35
./configure --prefix /usr/local/memcached --with-libevent=/usr/local/libevent/
make && make install


mkdir -p /usr/local/magent
tar -zxvf magent-0.6.tar.gz


vim Makefile
#找到 LIBS = /usr/lib64/libevent.a /usr/lib64/libm.a
#替换为libevent安装目录lib
LIBS = /usr/local/libevent/lib/libevent.a /usr/lib64/libm.a

#找到 CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)
#替换为libevent安装目录include
CFLAGS = -lrt -Wall -g -O2 -I/usr/local/libevent/include $(M64)

vim ketama.h
#在开头加入
#ifndef SSIZE_MAX
#define SSIZE_MAX      32767
#endif


#报错
gcc -Wall -g -O2 -I/usr/local/libevent/include/ -m64 -o magent magent.o ketama.o /usr/local/libevent/lib/libevent.a /usr/lib64/libm.a
/usr/local/libevent/lib/libevent.a(evutil_time.o): In function `evutil_gettime_monotonic_':
/usr/local/src/libevent-2.1.8-stable/evutil_time.c:315: undefined reference to `clock_gettime'
/usr/local/libevent/lib/libevent.a(evutil_time.o): In function `evutil_configure_monotonic_time_':
/usr/local/src/libevent-2.1.8-stable/evutil_time.c:289: undefined reference to `clock_gettime'
/usr/local/src/libevent-2.1.8-stable/evutil_time.c:283: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [magent] Error 1
#解决
vim Makefile
#找到 LIBS = /usr/lib64/libevent.a /usr/lib64/libm.a
#替换为libevent安装目录lib
LIBS = /usr/local/libevent/lib/libevent.a /usr/lib64/libm.a

#找到 CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)
#替换为libevent安装目录include
CFLAGS = -lrt -Wall -g -O2 -I/usr/local/libevent/include $(M64)


#报错
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

vim ketama.h
#在开头加入
#ifndef SSIZE_MAX
#define SSIZE_MAX      32767
#endif


#最后就成功了
make
export PATH=$PATH:/usr/local/memcached/bin/
#加入环境变量
echo 'export PATH=$PATH:/usr/local/memcached/bin/' >> /etc/profile
echo 'export PATH=$PATH:/usr/local/magent' >> /etc/profile
source /etc/profile


启动

#开启多个memcached
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
#代理memcached
magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213


分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序;

11211、11212端口为主Memcached,11213端口为备份Memcached;

连接上12000的magent,set key1和set key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11212和11213端口的Memcached;

当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出;

当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数据(此问题尚待改进)。

PHP Memcached拓展安装

#安装memcached客户端
cd /usr/local/src
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
#配置
./configure --prefix=/usr/local/libmemcached
#编译安装
make && make install

#安装php memcached拓展
cd /usr/local/src
wget http://pecl.php.net/get/memcached-2.2.0.tgz tar -zxvf memcached-2.2.0.tgz
cd memcached-2.2.0
#phpize
/usr/local/php/bin/phpize
#配置
./configure --with-php-config=/usr/local/php/bin/php-config -with-libmemcached-dir=/usr/local/libmemcached/
#编译安装
make && make install

vim /usr/local/php/etc/php.ini
#添加
extension=memcached.so
#重启web服务或者php-fpm
service php-fpm restart
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  memcached magent