[转]twemproxy介绍与使用

goody9807 goody9807     2022-08-23     450

关键词:

Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故障问题。虽然使用Twemproxy需要更多的硬件资源和在redis性能有一定的损失(twitter测试约20%),但是能够提高整个系统的HA也是相当划算的。不熟悉twemproxy的同学,如果玩过nginx反向代理或者mysql proxy,那么你肯定也懂twemproxy了。其实twemproxy不光实现了redis协议,还实现了memcached协议,什么意思?换句话说,twemproxy不光可以代理redis,还可以代理memcached,官方说明:

twemproxy (pronounced "two-em-proxy"), aka nutcracker is a fast and lightweight proxy for memcachedand redis protocol. It was built primarily to reduce the number of connections to the caching servers on the backend. This, together with protocol pipeling and sharding enables you to horizontally scale your distributed caching architecture.

Twemproxy架构:

但是从上面我们可以看到这样以来Twemproxy就成了单点,所以通常会结合keepalived来实现Twemproxy的高可用。架构图如下:

上面的架构通常只有一台Twemproxy在工作,另外一台处于备机,当一台挂掉以后,vip自动漂移,备机接替工作。关于keepalived相关的资料可以参考我前面相关文章。 

1.编译安装:

autoconf下载地址:http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
twemproxy下载地址:https://codeload.github.com/twitter/twemproxy/zip/master
twemproxy的安装要求autoconf的版本在2.64以上,否则提示"error: Autoconf version 2.64 or higher is required"。

查找旧版本autoconf,并且卸载

rpm -qf /usr/bin/autoconf  
rpm -e --nodeps autoconf-2.63   

安装最新版本

tar zxvf autoconf-2.69.tar.gz 
cd autoconf-2.69 
./configure --prefix=/usr 
make && make install 

编译安装twemproxy

unzip twemproxy-master.zip
cd twemproxy-master
autoreconf -fvi
./configure --prefix=/usr/local/twemproxy
make -j 8
make install

设置环境变量:

 echo "PATH=$PATH:/usr/local/twemproxy/sbin/" >> /etc/profile
 source /etc/profile

2.创建相关目录(存放配置文件和pid文件)

cd /usr/local/twemproxy
mkdir run conf

3.添加proxy配置文件

vim /usr/local/twemproxy/conf/nutcracker.yml

内容如下(配置文件参考官方)

复制代码
alpha:
  listen: 127.0.0.1:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:
   - 127.0.0.1:7000:1
   - 127.0.0.1:7001:1
   - 127.0.0.1:7002:1
   - 127.0.0.1:7003:1
   - 127.0.0.1:7004:1
   - 127.0.0.1:7005:1
复制代码

我在本地安装了6个redis实例,不清楚的同学参考redis官网安装或者我前面的文章Redis安装以及主从实现

4.启动Twemproxy服务

nutcracker -t 测试配置文件

测试配置文件这里有个小坑,本来以为要指定配置文件路径,于是这样检查配置文件:

[root@redis-server ~]# nutcracker -t /usr/local/twemproxy/conf/nutcracker.yml
nutcracker: configuration file 'conf/nutcracker.yml' syntax is invalid

后来才反应过来是检查命令所在路径的conf下面的nutcracker.yml文件,于是把conf目录复制到/usr/local/twemproxy/sbin/目录下,再次进行检测:

复制代码
[root@redis-server sbin]# pwd
/usr/local/twemproxy/sbin
[root@redis-server sbin]# ll
total 808
drwxr-xr-x 2 root root   4096 Apr 10 03:02 conf
-rwxr-xr-x 1 root root 819245 Apr  9 23:26 nutcracker
[root@redis-server sbin]# ./nutcracker -t
nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok
[root@redis-server sbin]# 
复制代码

可以看见提示配置文件没有语法错误了。

启动命令:

nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log

nutcracker用法与命令选项

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                        : 查看帮助文档,显示命令选项
-V, –version                     : 查看nutcracker版本
-t, –test-conf                   : 测试配置脚本的正确性
-d, –daemonize                   : 以守护进程运行
-D, –describe-stats              : 打印状态描述
-v, –verbosity=N                 : 设置日志级别 (default: 5, min: 0, max: 11)
-o, –output=S                    : 设置日志输出路径,默认为标准错误输出 (default: stderr)
-c, –conf-file=S                 : 指定配置文件路径 (default: conf/nutcracker.yml)
-s, –stats-port=N                : 设置状态监控端口,默认22222 (default: 22222)
-a, –stats-addr=S                : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0)
-i, –stats-interval=N            : 设置状态聚合间隔 (default: 30000 msec)
-p, –pid-file=S                  : 指定进程pid文件路径,默认关闭 (default: off)
-m, –mbuf-size=N                 : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)
复制代码

查看进程,确认启动。

[root@redis-server run]# ps -ef | grep nutcracker | grep -v grep
root       809     1  0 03:09 ?        00:00:00 nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log
[root@redis-server run]# 

5. 简单测试

复制代码
[root@redis-server ~]# netstat -nltp | grep nutcracker
tcp        0      0 0.0.0.0:22222               0.0.0.0:*                   LISTEN      809/nutcracker      
tcp        0      0 127.0.0.1:22121             0.0.0.0:*                   LISTEN      809/nutcracker      
[root@redis-server ~]# redis-cli -p 22121             
127.0.0.1:22121> set name yaun
OK
127.0.0.1:22121> get name
"yaun"
127.0.0.1:22121> 
复制代码

 

总结:

Twemproxy还是非常的靠谱,虽然性能有损失(20%),但是相对来说还是很值得的,而且久经考验,使用非常广泛。后面再进行性能测试。关于更多更加详细的资料请参考官方文档。

 

参考资料:

https://github.com/twitter/twemproxy

twemproxy发送流程探索——剖析twemproxy代码正编

本文想要完成对twemproxy发送流程——msg_send的探索,对于twemproxy发送流程的数据结构已经在《twemproxy接收流程探索——剖析twemproxy代码正编》介绍过了,msg_send和msg_recv的流程大致类似。请在阅读代码时,查看注释,英文注释是作... 查看详情

http与https的区别,详细介绍(转)

目录HTTP与HTTPS介绍HTTPS和HTTP的主要区别客户端在使用HTTPS方式与Web服务器通信时的步骤CA证书的申请及其使用过程HTTPS的缺点SSL与TLS的区别?SSL/TLS历史SSL/TLS协议的基本过程HTTPS涉及的计算环节如何优化HTTPS的速度 HTTP与HTTPS介绍... 查看详情

linux-centos7源码编译安装twemproxy服务(代码片段)

1.软件简单介绍Twemproxy2.编译安装Twemproxy编译安装过程中,参考现在搜索引擎能检索到文章都比较旧了,参考部分教程总是遇到各种缺少文件导致编译出现异常问题,下面教程参考GitHub官网说明,亲测可以编译安装Twemproxy成功。2.... 查看详情

屏幕与窗口录制转码

背景介绍  在一些培训或者交流时候,希望可以留下视频后期观看,产生了视频录制需求。同时在存储时,希望可以占用本地磁盘较小的空间,并且可以看清楚视频中的字体。经过实践,选取录屏软件与转码... 查看详情

twemproxy架构分析

twemproxy概述 twemproxy是搭建分布式缓存集群的重要组件之一。他能将来自客户端的redis包通过key分片发送到不同的redis服务器,而不是发到单个redis服务器上。因此,可以使本来集中到一个redis上的信息被分流到几个redis上,这... 查看详情

python监视twemproxy(代码片段)

查看详情

【转】linuxcap介绍与k8s下配置使用

参考技术Adescription:"使用CAP为容器提权"date:2021.11.0710:34categories:-K8stags:[Linux,K8s]keywords:Linux,CAP,capabilities原文地址:https://www.jianshu.com/p/a7f6c4f420fa发音译为能力或功能,一般缩写CAP,以下我们简称Capabilities为CAP从内核2.2开始,Linux将... 查看详情

第04章运算符

...va零基础_第04章运算符(P063-P103)第04章运算符63.算术运算符介绍64.算术运算符使用65.算术运算符练习166.算术运算符练习267.算术运算符练习368.算术运算符练习469.关系运算符介绍70.关系运算符使用71.逻辑运算符介绍72.短路与逻辑与73... 查看详情

reactnative之flexbox介绍与使用

前言学习本系列内容需要具备一定HTML开发基础,没有基础的朋友可以先转至HTML快速入门(一)学习本人接触ReactNative时间并不是特别长,所以对其中的内容和性质了解可能会有所偏差,在学习中如果有错会及时修改内容,也欢迎万... 查看详情

zookeeperapi(java)入门与应用(转)

...变化,从而可以达到基于数据的集群管理,后面将会详细介绍Zookeeper能够解决的一些典型问题,这里先介绍一下,Zookeep 查看详情

twemproxy

eshop-detail-test:  listen:127.0.0.1:1111  hash:fnv1a_64  distribution:ketama  timeout:1000  redis:true  servers:    -127.0.0.1:6379:1test-redis-01    -127.0.0.1:6380:1test-redis-02eshop-detail-test:r 查看详情

redis集群方案之twemproxy+haproxy+keepalived+sentinel+主从复制(待实践)

首先说明一下,Twemproxy+HAProxy+Keepalived+Sentinel+主从复制-这里提到的技术不一定全部都用上,但是全部用上之后可以达到高可用。主从复制:实现数据一式多份的保障。Sentinel哨兵模式:实现主从节点的切换,比如主节点挂了之后... 查看详情

[转]bp人工神经网络的介绍与实现

神经网络概念与适合领域神经网络最早的研究是40年代心理学家Mcculloch和数学家Pitts合作提出的,他们提出的MP模型拉开了神经网络研究的序幕。神经网络的发展大致经过3个阶段:1947~1969年为初期,在这期间科学家们提出了许多... 查看详情

roc,auc,precision,recall,f1的介绍与计算(转)

1.基本概念1.1ROC与AUCROC曲线和AUC常被用来评价一个二值分类器(binaryclassifier)的优劣,ROC曲线称为受试者工作特征曲线(receiveroperatingcharacteristiccurve,简称ROC曲线),又称为感受性曲线(sensitivitycurve),AUC(AreaUnderCurve)是ROC曲... 查看详情

常用视频格式与视频编解码标准介绍转

细细算起来,视频文件可以分成两大类:其一是影像文件,比如说常见的VCD便是一例。其二是流式视频文件,这是随着国际互联网的发展而诞生的后起视频之秀,比如说在线实况转播,就是构架在流式视频技术之上的。流式视频... 查看详情

dubbo与zookeeperspringmvc整合和使用(负载均衡容错)(转)

...的服务,使前端应用能更快速和稳定的响应。 第一:介绍Dubbo背景       大规模服务化之前,应用可能只是通过RMI或Hess 查看详情

mybatis常见面试题(转)

Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目标是介绍Mybatis的技术架构和重... 查看详情

gradle构建javaweb应用:servlet依赖与tomcat插件(转)

 Gradle的官方tutorial介绍了构建JavaWeb应用的基本方法。不过在使用Servlet做上传的时候会碰到问题。这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应的JavaWeb工程。参考原文:HowtoBuildWebScanningApplicationwithGradleSer... 查看详情