伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

轻量级 Memcached缓存代理 twemproxy实践

来源:本站原创 浏览:86次 时间:2022-06-25

文章共 533字,阅读大约需要 2分钟,文尾有计时器可自行对时!

本文内容脑图如下:


概   述

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

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

注: 本文首发于 作者公众号 CodeSheep ,可 长按 / 扫描 下面的 小心心 来订阅 ↓ ↓ ↓


环境准备

准备三台节点:


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.gztar -zvxf m4-1.4.9.tar.gzcd m4-1.4.9./configuremakemake install
  • 安装 autoconf 工具

wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gztar zxvf autoconf-2.69.tar.gzcd autoconf-2.69./configure --prefix=/usr/make && make install
  • 安装 twemproxy代理

wget https://github.com/twitter/twemproxy/archive/master.zipunzip master.zipmv twemproxy-master twemproxymv twemproxy /usr/local/cd /usr/local/cd twemproxy/autoreconf -fvi./configure --enable-debug=fullmakemake install
  • 查看 twemproxy帮助

nutcracker -h
[root@localhost ~]# nutcracker -hThis is nutcracker-0.4.1Usage: 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 nutcrackertcp        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 22121Trying ::1...telnet: connect to address ::1: Connection refusedTrying 127.0.0.1...Connected to localhost.Escape character is '^]'.set key1  0 0 11STOREDset key2 0 0 12STOREDset key3 0 0 13STOREDset key4 0 0 14STOREDset key5 0 0 15STOREDset key6 0 0 16STORED
  • 查看发现所有缓存都写到了 memcached2中

[root@localhost ~]# telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.get key1VALUE key1 0 11ENDget key2   VALUE key2 0 12ENDget key3VALUE key3 0 13ENDget key4VALUE key4 0 14ENDget key5VALUE key5 0 15ENDget key6VALUE key6 0 16END
[root@localhost ~]# ps -aux | grep  memroot       634  0.0  0.0 326588  1960 ?        Ssl  15:58   0:00 memcached -u root -p 11211 -m 64m -droot       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 22121Trying ::1...telnet: connect to address ::1: Connection refusedTrying 127.0.0.1...Connected to localhost.Escape character is '^]'.set key9 0 0 19STORED[root@localhost conf]#
  • 此时去memcached1查看:

[root@localhost ~]# telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.get key9VALUE key9 0 19END

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

  • 我们再重新启动 memcached2

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

[root@localhost conf]# telnet localhost 22121Trying ::1...telnet: connect to address ::1: Connection refusedTrying 127.0.0.1...Connected to localhost.Escape character is '^]'.set key10 0 0 1xSTOREDset key11 0 0 1ySTORED
  • 然后发现数据又写到 memcached2中了

[root@localhost ~]# telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.get key10 VALUE key10 0 1xENDget key11VALUE key11 0 1yEND

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


后   记

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

  •  个人网站:www.codesheep.cn (程序羊)

我的更多系列原创文章:

  ●  我的半年技术博客之路

  ●  利用K8S技术栈打造个人私有云系列连载文章

  ●  从一份配置清单详解Nginx服务器配置

  ●  Spring Boot Admin 2.0开箱体验

  ●  一文上手 Elasticsearch常用可视化管理工具

  ●  Docker容器可视化监控中心搭建

  ●  利用ELK搭建Docker容器化应用日志中心

  ●  RPC框架实践之:Google gRPC

  ●  一文详解 Linux系统常用监控工具


作者更多 务实、能看懂、可复现的 原创文章尽在公众号 CodeSheep,欢迎订阅 ⬇️⬇️⬇️


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net