轻量的Memcached代理Twemproxy的部署

轻量的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、查看帮助

[[email protected] 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和端口

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

数据写入测试

[[email protected] 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.
[[email protected] ~]# 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.
[[email protected] ~]# 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.
[[email protected] ~]# 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.
[[email protected] ~]# 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端口服务。

继续往代理写数据。

[[email protected] 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.
[[email protected] 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.
[[email protected] 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.
[[email protected] 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是一个很好的选择。

时间: 2024-12-28 15:52:18

轻量的Memcached代理Twemproxy的部署的相关文章

阿里云轻量服务器LAMP镜像部署网站踩过的坑第一期

阿里云的轻量服务器真的很多坑,刚完成3个网站部署在一台轻量服务器的工作,虚拟主机配置文件,php源码解析,mysql.httpd和php不是系统变量等等各种问题:准备一个一个来填坑,在这感谢51CTO讲师段老师的帮助,3年前在他那学的红帽7.0:碰到什么写什么,可能有点水,但是都是实操经验,现在网上大多都是copy,自己也没验证过,还有一些是初学者虚拟机玩配置,对实际操作帮助不大: 今天先说一下轻量服务器的虚拟主机配置文件 碰到新的系统,先查看系统版本,下面是阿里云轻量服务器的版本信息 [[em

阿里云轻量服务器部署PHP网站简述(基于Lamp)

一:首先登陆阿里云账户购买轻量服务器(这里就不详细介绍啦) 二:进去以后是这样的 然后其他的一些设置参考https://blog.csdn.net/cuiji4724/article/details/81395364(内容如下) 一.介绍环境1.首先进入操控台找到轻量应用服务器(若找不到可以在下方)产品与服务里面搜. 2.进入轻量应用服务器,找到重置系统,应用镜像选择LAMP,系统镜像选择CentOS,点击确认更换 (这里我也进行了应用镜像的更换,但是更换了多次没有成功,还是显示的是WrodPr

Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程

大小仅有40MB的k3s为想要节省开销进行开发和测试的企业提供了一个很好的选择.本文将用一种极为简洁的方式,教你在5分钟之内使用k3s部署轻量Kubernetes集群. 本文来自:Rancher Labs Kubernetes已经改变了如何大规模部署和管理容器化工作负载.现在开发人员面临的挑战主要在于设置过程的复杂性和资源需求量巨大.如果你深受内存不足的困扰,想要部署轻量级Kubernetes集群来减少内存占用,那么你一定要考虑由Rancher Labs发布的轻量级Kubernetes发行版--

OWIN轻量型框架介绍

OWIN轻量型框架介绍 阅读目录 引言 框架的特色 如何启动 各项功能 静态路由的3种写法 伪静态路由的支持 处理Form表单提交的文件 流式处理Post请求的数据 多种请求类型自动识别 响应处理 请求响应上下文 自定义默认处理函数 内置各种便捷函数 复合类型的请求处理 框架的扩展 静态内容的支持 跨域Post的支持 基础类型继承灵活处理 尾声 回到顶部 引言 什么是OWIN,我就不介绍了,请自行搜索,这里主要是介绍自行开发的OWIN框架的特点和用法.由于.NET的web框架都比较庞大,导致性能

五款轻量型bug管理工具横向测评

最近正在使用的本地bug管理软件又出问题了,已经记不清这是第几次了,每次出现问题都要耗费大量的时间精力去网上寻找解决方案,劳心劳力.为了避免再次出现这样的情况,我决定从线下转到线上,使用轻量型的在线bug管理工具,在选择工具时有以下几个要求: 1.不用在本地安装部署,配置环境,即开即用: 2.方便bug管理,bug属性设置: 3.可以跨团队沟通,方便和开发协作: 4.随时掌握bug状态,修复进展等. 花费了一个星期的时间试用了五款在线bug管理工具,其评测结果如下: 1.   Teambitio

编写轻量ajax组件01-对比webform平台上的各种实现方式

前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏蔽http,为此提供了大量的服务器控件和ViewState机制,让开发人员可以像开发Windows Form应用程序一样,基于事件模型去编程.两者各有优缺点和适用情景,但MVC现在是许多Asp.net开发者的首选. WebForm是建立在Asp.net的基础上的,Asp.net提供了足够的扩展性,我

Nginx+Tomcat+Memcached 实现集群部署时Session共享

一.简介 我们系统经常要保存用户登录信息,有Cookie和Session机制,Cookie客户端保存用户信息,Session在服务端保存用户信息,如果浏览器不支持Cookie或者用户把Cookie禁掉了,Cookie就用不了,还有不同的浏览器采用不用方式保存Cookie,所以我们采用Session服务端来保存,上一节我们有介绍了Tomcat集群部署,怎么样集群的Tomcat对同个用户请求的都能获取保存在Session的用户信息,采用了Memcached管理Session,Memcached 是一

比Wireshark更轻量、更方便的抓包软件:Charles

转:http://blog.csdn.net/lixing333/article/details/42776187 之前写过一篇通过Wireshark进行抓包,分析网络连接的文章<通过WireShark抓取iOS联网数据实例分析>:http://blog.csdn.net/lixing333/article/details/7782539 最近一些工作需要抓包,在我的Mac上安装了Wireshark之后,发现运行不了.探究之,发现Wireshark的界面用的是X Window,所以需要在X11

阿里云轻量服务器价格及轻量与ECS服务器区别比较

https://yq.aliyun.com/articles/221647 摘要: 阿里云轻量应用服务器价格表及介绍,关于轻量应用服务器和ECS服务器的性能对比 阿里云轻量应用服务器是阿里云新推出的服务器,本文介绍阿里云轻量服务器的价格,已经何为"轻量"?轻量与阿里云ECS服务器有什么区别?轻量性能就一定不如ECS服务器吗? 什么是轻量应用服务器?轻量应用服务器是面向单机应用场景的新一代计算服务,提供精品应用一键部署,支持一站式的域名.网站.安全.运维.应用管理等服务,极大地优化了搭建