您现在的位置是:首页 > 文章详情

轻量级 memcached缓存代理 twemproxy实践

日期:2018-11-18点击:481

Profile

本文内容脑图如下:

本文内容脑图

文章共 533字,阅读大约需要 2分钟 !


概 述

twemproxy(nutcracker) 是 Twitter开源的轻量级 memcached / redis 代理服务器,本质就是一个集群管理工具,主要用来弥补 Redis和 Memcached对集群管理的不足,其完成的最大功劳就是通过在后端减少同缓存服务器的连接数从而增加吞吐量。我们将 Twemproxy看成一个老大哥,背后 Carry着一群 memcached / redis实例小弟,如此看来,某一程序上也类似于 memcached / redis 的HA。

本文先实践一波让 twemproxy 来 Carry一群 memcached小弟时的工作情况。

注: 本文首发于 My Personal Blog:CodeSheep·程序羊,欢迎光临 小站


环境准备

准备三台节点:

节点 OS 角色
192.168.199.77 CentOS 7.4 部署 memcached1实例
192.168.199.78 CentOS 7.4 部署 memcached2实例
192.168.199.79 CentOS 7.4 部署 twemproxy代理服务器

memcached 部署

  • 安装
yum install memcached 
  • 作为后台服务运行之
memcached -u root -p 11211 -m 64m -d 

twemproxy 部署

  • 安装 m4工具
wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz tar -zvxf m4-1.4.9.tar.gz cd m4-1.4.9 ./configure make make install 
  • 安装 autoconf 工具
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 
  • 安装 twemproxy代理
wget https://github.com/twitter/twemproxy/archive/master.zip unzip master.zip mv twemproxy-master twemproxy mv twemproxy /usr/local/ cd /usr/local/ cd twemproxy/ autoreconf -fvi ./configure --enable-debug=full make make install 
  • 查看 twemproxy帮助
nutcracker -h 
[root@localhost ~]# nutcracker -h This is nutcracker-0.4.1 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) 
  • 准备 twemproxy配置文件
vim /usr/local/twemproxy/conf/nutcracker.yml 

修改配置文件 nutcracker.yml

memcached: listen: 127.0.0.1:22121 hash: fnv1a_64 distribution: ketama timeout: 400 backlog: 1024 preconnect: true auto_eject_hosts: true server_retry_timeout: 30000 server_failure_limit: 3 servers: - 192.168.199.77:11211:1 - 192.168.199.78:11211:1 
  • 启动 tewmproxy服务
nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml 
  • 检查启动情况
[root@localhost ~]# netstat -nltp | grep nutcracker tcp 0 0 0.0.0.0:22222 0.0.0.0:* LISTEN 12737/nutcracker tcp 0 0 192.168.199.79:22121 0.0.0.0:* LISTEN 12737/nutcracker 

数据读/写测试

  • 首先通过 twemproxy代理来写缓存

一连存入了 6个key

[root@localhost conf]# telnet localhost 22121 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set key1 0 0 1 1 STORED set key2 0 0 1 2 STORED set key3 0 0 1 3 STORED set key4 0 0 1 4 STORED set key5 0 0 1 5 STORED set key6 0 0 1 6 STORED 
  • 查看发现所有缓存都写到了 memcached2中
[root@localhost ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key1 VALUE key1 0 1 1 END get key2 VALUE key2 0 1 2 END get key3 VALUE key3 0 1 3 END get key4 VALUE key4 0 1 4 END get key5 VALUE key5 0 1 5 END get key6 VALUE key6 0 1 6 END 
  • 接下来断开 memcached2
[root@localhost ~]# ps -aux | grep mem root 634 0.0 0.0 326588 1960 ? Ssl 15:58 0:00 memcached -u root -p 11211 -m 64m -d root 704 0.0 0.0 112676 984 pts/0 S+ 16:01 0:00 grep --color=auto mem [root@localhost ~]# kill -9 634 
  • 继续通过 twemproxy代理来写缓存
[root@localhost conf]# telnet localhost 22121 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set key9 0 0 1 9 STORED [root@localhost conf]# 
  • 此时去memcached1查看:
[root@localhost ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key9 VALUE key9 0 1 9 END 

我们发现 memcached2断开后,缓存 key9写到了 memcached1中,而对于用户来说,由于是跟 twemproxy代理交互,因此并不能感觉到后端 memcached2实例的下线

  • 我们再重新启动 memcached2

然后再继续通过代理写数据:

[root@localhost conf]# telnet localhost 22121 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set key10 0 0 1 x STORED set key11 0 0 1 y STORED 
  • 然后发现数据又写到 memcached2中了
[root@localhost ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key10 VALUE key10 0 1 x END get key11 VALUE key11 0 1 y END 

从上面这个实验过程可以看出,一台 memcached实例挂掉后,twemproxy 能自动移除之;而恢复后,twemproxy 能够自动识别并重新加入到 memcached 组中重新使用


后 记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!



原文链接:https://my.oschina.net/hansonwang99/blog/2877930
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章