0

0

轻量的Memcached代理Twemproxy的部署

php中文网

php中文网

发布时间:2016-06-07 14:56:06

|

2029人浏览过

|

来源于php中文网

原创

轻量的Memcached 代理Twemproxy 的部署 Twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数。由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补Redis和Memcached对集群(cluster)管理指出的不足

轻量的memcached代理twemproxy的部署



Twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数。由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补Redis和Memcached对集群(cluster)管理指出的不足。

 

Twemproxy是一个快速的单线程代理程序,支持Memcached ASCII协议和更新的Redis协议。

 

Twemproxy最了不起的地方就在于它能在节点失败的时候卸载它,然后可以在一段时间以后重新尝试(随即)连接,又或者可以严格按照配置文件中写的键与服务器之间对应关系进行连接。

 

安装部署



现有测试机:192.168.11.51/52/68

先在51和52测试机上安装好libevent和memcached,分别启动两个memcached实例;

然后在68上安装好twemproxy,配置好参数,启动twemproxy实例。

 

安装和启动memcached实例



详细步骤,请参见之前的博文《Memcached 1.4.22安装和配置》,分别启动如下实例:

/usr/local/bin/memcached -d -m 128 -u memcached -l 192.168.11.51 -p 11211 -c 1024 -P /var/run/memcached/memcached1.pid
/usr/local/bin/memcached -d -m 128 -u memcached -l 192.168.11.51 -p 11212 -c 1024 -P /var/run/memcached/memcached2.pid
/usr/local/bin/memcached -d -m 128 -u memcached -l 192.168.11.52 -p 11211 -c 1024 -P /var/run/memcached/memcached1.pid
/usr/local/bin/memcached -d -m 128 -u memcached -l 192.168.11.52 -p 11212 -c 1024 -P /var/run/memcached/memcached2.pid

 

安装和启动twemproxy实例



1、安装autoconf

cd /tmp
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar zxvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr/
make && make install

 

2、安装twemproxy

cd /tmp
wget https://github.com/twitter/twemproxy/archive/master.zip
unzip master.zip -d /usr/local/
cd /usr/local
mv twemproxy-master twemproxy
cd twemproxy
CFLAGS="-ggdb3 -O0" autoreconf -fvi
./configure --prefix=/usr/local/twemproxy --enable-debug=log
make && make install

 

3、查看帮助

[root@test01 twemproxy]# ./sbin/nutcracker -h
This is nutcracker-0.4.0
Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
[-c conf file] [-s stats port] [-a stats addr]
[-i stats interval] [-p pid file] [-m mbuf size]
Options:
-h, --help : this help
-V, --version : show version and exit
-t, --test-conf : test configuration for syntax errors and exit
-d, --daemonize : run as a daemon
-D, --describe-stats : print stats description and exit
-v, --verbose=N : set logging level (default: 5, min: 0, max: 11)
-o, --output=S : set logging file (default: stderr)
-c, --conf-file=S : set configuration file (default: conf/nutcracker.yml)
-s, --stats-port=N : set stats monitoring port (default: 22222)
-a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0)
-i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
-p, --pid-file=S : set pid file (default: off)
-m, --mbuf-size=N : set size of mbuf chunk in bytes (default: 16384 bytes)

 

4、修改配置文件

mkdir /etc/nutcracker
cp ./conf/nutcracker.yml /etc/nutcracker/
vi /etc/nutcracker/nutcracker.yml
memcached:
listen: 192.168.11.55:22121
hash: fnvla_64
distribution: ketama
timeout: 400
backlog: 1024
preconnect: true
auto_eject_hosts: true
server_retry_timeout: 30000
server_failure_limit: 3
servers:
- 192.168.11.51:11211:1
- 192.168.11.51:11212:1
- 192.168.11.52:11211:1
- 192.168.11.52:11212:1

参数解析:

listen: 启动twemproxy服务的IP和端口

企站帮微商城系统Access版
企站帮微商城系统Access版

OdnShop(原企站帮微商城系统,更名为OdnShop),基于ASP.NET 4.0+Access开发的轻量级微信商城系统,前台简洁美观,后台容易操作。系统容易部署,空间成本低,大部分的几百块一年的虚拟主机均可支持(具体请咨询空间商),适合要求不高,预算不多的小商店,小企业初次尝试微信线上销售产品,目前基本的核心功能,包括微信登陆/支付,产品管理,购物车与订单管理,分享获取积分,积分礼品兑换功能

下载

hash: 指定具体的哈希函数

distribution: 指定具体的哈希算法

preconnect: 一个布尔值,如果该控件的nutcracker前端连接在这个池上的所有服务器进程启动。默认值为假

auto_eject_hosts: 是否在结点无法响应的时候临时摘除结点

server_retry_timeout: 重试的时间(毫秒)

server_failure_limit: 结点故障多少次就算摘除掉

servers: 下面表示所有的memcached节点(IP:端口号:权重)

 

5、配置以服务启动

cp ./scripts/nutcracker.init /etc/init.d/nutcracker
chmod 755 /etc/init.d/nutcracker
vi /etc/init.d/nutcracker

1. 新增定义daemo

daemon="/usr/local/twemproxy/sbin/nutcracker"

2. 替换所有

daemon --user ${USER} ${prog} $OPTIONS

${daemo} $OPTIONS
chkconfig --add nutcracker
chkconfig --level 35 nutcracker on
chkconfig --list nutcracker
vi /etc/profile

在里面加入:

export PATH="$PATH:/usr/local/twemproxy/sbin"
. /etc/profile
echo $PATH

 

6、测试配置并启动服务

nutcracker -t -c /etc/nutcracker/nutcracker.yml
service nutcracker start

 

数据写入测试

[root@test01 init.d]# telnet 192.168.11.55 11211
Trying 192.168.11.55...
Connected to 192.168.11.55.
Escape character is '^]'.
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
quit
Connection closed by foreign host.
[root@test01 ~]# telnet 192.168.11.51 11211
Trying 192.168.11.51...
Connected to 192.168.11.51.
Escape character is '^]'.
get key1
END
get key2
END
get key3
END
get key4
END
get key5
END
quit
Connection closed by foreign host.
[root@test01 ~]# telnet 192.168.11.51 11212
Trying 192.168.11.51...
Connected to 192.168.11.51.
Escape character is '^]'.
get key1
END
get key2
END
get key3
END
get key4
END
get key5
END
quit
Connection closed by foreign host.
[root@test02 ~]# telnet 192.168.11.52 11211
Trying 192.168.11.52...
Connected to 192.168.11.52.
Escape character is '^]'.
get key1
END
get key2
END
get key3
END
get key4
END
get key5
END
quit
Connection closed by foreign host.
[root@test02 ~]# telnet 192.168.11.52 11212
Trying 192.168.11.52...
Connected to 192.168.11.52.
Escape character is '^]'.
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
Connection closed by foreign host.


可以看到数据全部从52的11212端口获取到。

现在停掉52的11212端口服务。

继续往代理写数据。

[root@test03 init.d]# telnet 192.168.11.55 11211
Trying 192.168.11.55...
Connected to 192.168.11.55.
Escape character is '^]'.
set username 0 0 6
ryanxu
STORED
set aa 0 0 2
aa
STORED
quit
Connection closed by foreign host.
[root@test03 init.d]# telnet 192.168.11.55 11211
Trying 192.168.11.55...
Connected to 192.168.11.55.
Escape character is '^]'.
get key1
SERVER_ERROR Connection refused
Connection closed by foreign host.
[root@test03 init.d]# telnet 192.168.11.55 11211
Trying 192.168.11.55...
Connected to 192.168.11.55.
Escape character is '^]'.
get key1
SERVER_ERROR Connection refused
Connection closed by foreign host.
[root@test03 init.d]# telnet 192.168.11.55 11211
Trying 192.168.11.55...
Connected to 192.168.11.55.
Escape character is '^]'.
get key1
END
get key2
END
get key3
END
quit
Connection closed by foreign host.

 

一台memcached 挂掉后,twemproxy 能够自动摘除。恢复后,twemproxy 能够自动识别、恢复并重新加入到 memcached 组中重新使用。


问题总结


1).yml配置文件中每个参数值对分隔符”:”后需要有一个空格。

2)不同层次的参数需要缩进区分,最好使用tab键缩进,否则nutcracker进程不能启动。

3)在auto_eject_hosts: true的时候,关闭一个memcached实例后,写入数据还是提示“(error) ERR Connection refused”。这个与server_retry_timeout参数设置太小有关,30000是一个很好的选择。



相关专题

更多
Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

11

2026.01.12

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

106

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

64

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

139

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

19

2026.01.09

俄罗斯手机浏览器地址汇总
俄罗斯手机浏览器地址汇总

汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

93

2026.01.09

漫蛙稳定版地址大全
漫蛙稳定版地址大全

漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

480

2026.01.09

php学习网站大全
php学习网站大全

精选多个优质PHP入门学习网站,涵盖教程、实战与文档,适合零基础到进阶开发者,助你高效掌握PHP编程。

52

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.5万人学习

Rust 教程
Rust 教程

共28课时 | 4.3万人学习

Vue 教程
Vue 教程

共42课时 | 6.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号