2019独角兽企业重金招聘Python工程师标准>>>

本文内容脑图如下:

文章共 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.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:22121hash: fnv1a_64distribution: ketamatimeout: 400backlog: 1024preconnect: trueauto_eject_hosts: trueserver_retry_timeout: 30000server_failure_limit: 3servers:- 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 组中重新使用


后 记

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

  • My Personal Blog:CodeSheep 程序羊
  • 我的半年技术博客之路


转载于:https://my.oschina.net/hansonwang99/blog/2877930

轻量级 memcached缓存代理 twemproxy实践相关推荐

  1. Nginx多进程高并发、低时延、高可靠机制在滴滴缓存代理中的应用

    开发背景 现有开源缓存代理中间件有twemproxy.codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能. 由于twemprox ...

  2. 《深入Spring 2:轻量级J2EE开发框架原理与实践》

    简介: http://www.easyjf.com/spring/spring2-aop.htm 本书首先是一本通过通俗案例讲解Spring的教程:同时也是一本深入挖掘Spring及相关框架结构.设计 ...

  3. Nginx+tomcat+memcached缓存共享session

    Nginx+tomcat+memcached缓存共享session session 的序列化方案官方推荐的有 4 种: 1. java serialization 2. msm-kryo-serial ...

  4. 吃透Redis系列(九):Redis代理twemproxy和predixy详细介绍

    Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...

  5. memcached 缓存服务器

    Memcached 缓存服务器 Memcached 是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性. 主要特点 ...

  6. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  7. Memcached缓存实例

    1.引用dll:Enyim.MemCaching.dll(网上可以下载到) 2.配置web.config: 3.创建Memcached缓存类MemCacheHelper 4.调用: 转载于:https ...

  8. 第34 memcached缓存

    1.缓存数据库 缓存:将数据存储在内存中,只有当磁盘胜任不了的时候,才会启用缓存. 缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付大并发的业务,至于数据存储及可靠性不要找他了. 数据库: ...

  9. redis和memcached缓存

    memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...

最新文章

  1. 十年磨一剑,可重构计算架构将引领未来芯片市场
  2. 作为软件设计师的2013年终总结
  3. 最大距离(二分 栈 思维)
  4. 怎么取消XP粘滞键(StickyKeys)
  5. 管理员拥有系统最高以及所有权限嘛_企业微信管理员是谁?企业微信管理员可以变更转让吗?...
  6. 【BZOJ3144】[Hnoi2013]切糕 最小割
  7. 华南x79主板设置硬盘启动_硬盘无法识别怎么办?最全的解决办法
  8. [BZOJ5276] Skyfall [CF235E] Number Challenge [莫比乌斯反演]
  9. linux删除 grub rescue,删除Ubuntu后 开机grub rescue无法进入BIOS
  10. c 语言输出省份面积和高度,中国省份面积
  11. Altium Designer 3D元件库,PCB封装库,极为全面一份足以
  12. 量化系统工程师需要学什么?
  13. SpringBoot 实现Excel文件解析
  14. VUE页面背景设置为视频
  15. 函数的信息传递(C语言实践)
  16. 2022中国企业家博鳌论坛耿明雨致白皮书
  17. 基于 UAP 的 Web Service 开发
  18. 从cocostudio获取控件,添加回调函数
  19. word文档找不到smartart_word2003SmartArt在哪里
  20. 基于 Flink 构建关联分析引擎的挑战和实践

热门文章

  1. 正则表达式、事件调用
  2. bootstrap与Select2使用小结
  3. Quickhit快速击键
  4. 模仿android谷歌地图功能开发记录
  5. 看博客学学Android(十三)
  6. SILK 的 Delay Decision 和 Dither
  7. SVN:更新、同步与提交 PS:被锁定之解决方法
  8. 在ubuntu16.0403X64上安装海思交叉编译工具链
  9. 日积月累真的很可怕,记住这些编程单词,两周学会敲代码
  10. 爬虫入门的基本原理,如果你连这些都不知道那你可以放弃爬虫了