前言

1.代理分类

面对高可用、高扩展、易维护,用一款redis代理都是上佳的选择。
redis代理主要有:predixy、twemproxy、codis、redis-cerberus。

2.性能优劣

a)作为代理,四者在高性能这方面,都是牛逼class。
b)相对而言 predixy的功能更为强大一点,当数据量达到16KB时,因redis-benchmark本身成为瓶颈,predixy和twemproxy成绩差不多了。在延时上,codis由于语言的问题,略逊一筹。

3.本文重点介绍twemproxy的快速搭建

安装过程遇到的坑,下述步骤中大部分已为你躲过,总体步骤都比较简单、容易理解。
注:如感觉篇幅过长,建议先看右侧大纲,然后只看自己感兴趣的片段即可。

附注:predixy快速搭建,避坑指南

本文以CentOS6.5+Redis5.0.4为蓝本做的介绍,中间过程也有切换到 CentOS7.9+Redis6.2.6,经对比发现,高版本的搭建工作更为省力,不需要抽出精力去解决版本升级和依赖关系。无论你采用哪个版本,总体框架不变。

4.官网安装步骤总览

预览官网总体安装步骤,做到心中有数。官网:https://github.com/twitter/twemproxy

一、准备工作

1.实验环境,redis实例的准备(6379和6380)

如需帮助,可参考下文:
1.Redis安装部署 | CentOS6.5+Redis5.0.4 ,第二章-->第7小节
2.Redis安装部署 | CentOS7.9+Redis6.2.6,第三章

2.twemproxy的获取和解压

源码网站:https://github.com/twitter/twemproxy

1.方法一,git clone命令直接获取

如上图所示,复制源码下载地址:https://github.com/twitter/twemproxy.git

#yum install git  安装git命令
#yum update nss 更新nss命令,否则可能导致无法下载twemproxy源码。中间会停顿一下,直接输入员Y,同意
#cd && cd mypackage 切换到自己创建的软件源码下载目录
#git clone https://github.com/twitter/twemproxy.git

注:如果是在CentOS7.9,上面的步骤会执行的很顺利,如果是在CentOS6.5,等较低的版本,这个步骤,就足够喝一壶,主要是yum源配置和升级nss。否则无法通过git clone命令获取源码。

如果想快速通过这个步骤,请采取下面的方法二!

2.方法二,获取zip压缩包,手动解压

如上图所示,点击Download ZIP,下载到本地后,通过Xshell的Xftp或者lrzsz命令的rz命令上传到linux即可,具体入下。

#cd && cd mypackage 切换到自己创建的软件源码下载目录
#rz  此时会弹出一个上传界面(lrzsz命令,需要提前安装,也可以用xshell自带的上传工具上传)
#ls
redis-5.0.4.tar.gz  twemproxy-master.zip

#unzip twemproxy-master.zip  -d /usr/src  解压到指定位置
#cd /usr/src/ && ls  切换到解压目录
#mv twemproxy-master twemproxy   给源码包重命名

#cd twemproxy && ls   里面有个Makefile.am,下面的步骤需要根据官网提示,继续操作

3.twemproxy的依赖包的更新

官网地址:https://github.com/twitter/twemproxy ,具体提示在Build下面。

1.根据官网提示,安装automake和libtool

#yum install automake libtool -y

注:本步骤的安装,需提前配置好本地yum源,否则可能难以顺利安装。

2.下载并安装高版本的autoconf

#cd /usr/src/twemproxy && ls 
#autoreconf -fvi 会被提示autoconf版本过低,需升级到高版本

#yum search autoconf  搜索一下

如上图所示,搜到的最高版是autoconf213,那么恭喜你,这又是一个坑,最少要搜到autoconf218版本才可以。既然没搜到,要么花费大把时间修改配置yum源配置,反复尝试,要么先独辟蹊径。

蹊径如下:autoconf官方主页;下载地址:autoconf-2.69.tar.xz

#cd && cd mypackage 切换到自己安装包下载目录
#wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz  下载到linux本地
#ls
autoconf-2.69.tar.xz

下面的步骤是解压并手动安装依赖包

#xz -d autoconf-2.69.tar.xz   解压.xz文件
#tar -xf autoconf-2.69.tar -C /usr/src  继续解压tar到指定位置
#cd /usr/src/autoconf-2.69/ && ls  切换到解压目录
#./configure    检查
#make install 至此完成autoconf高版本的安装 ,下面就可以愉快的玩耍了

二、编译、安装、配置twemproxy

1.运行autoreconf -fvi命令,生成绿色的configure文件

#cd /usr/src/twemproxy/ && ls
#autoreconf -fvi  编译,使之生成configure文件

2.在twemproxy解压目录,进行make编译安装到/usr/local下

注:编译前,在回顾一下官方提示,加深一下印象

官网地址:https://github.com/twitter/twemproxy
具体提示如下:在Build栏目的中间位置

$ git clone git@github.com:twitter/twemproxy.git
$ cd twemproxy
$ autoreconf -fvi
$ ./configure --enable-debug=full
$ make
$ src/nutcracker -h

注:下面的安装过程,略加改进,更贴合我们的实战。

#cd /usr/src/twemproxy/ && ls
#./configure  --prefix=/usr/local/twemproxy 检查并指定安装位置
#make -j 8 开始编译
#make install 完成安装

温馨小提示:此处的prefix不能是大写,否则会报错。

#cd /usr/src/twemproxy/ && ls
#ls src  如下图所示,可以看到一个绿色的nutcracker文件,它是启动命令
nutcracker
#ls /usr/local/twemproxy  如果能看到如下目录,说明已安装完毕
bin  include  lib  sbin  share

3.配置环境变量

#vim /etc/profile 配置环境变量

export REDIS_HOME=/usr/local/redis5
export TWEMPROXY_HOME=/usr/local/twemproxy
export PATH=$PATH:$REDIS_HOME/bin:$TWEMPROXY_HOME/sbin

把TWEMPROXY_HOME目录,追加到PATH尾部,中间用英文的冒号分隔。

#source /etc/profile  重新编译环境变量
#echo $PATH  打印环境变量
/usr/local/redis5/bin:/usr/local/twemproxy/sbin

4.对twemproxy进行test_all测试

#cd /usr/src/twemproxy/src && ls  切换到源码目录的src目录下
#./test_all  执行测试

5.最后的配置(为让其更流畅的运行)

#cd /usr/src/twemproxy/ && ls  大概看一下,源码目录下的主要文件夹 conf / src  /script

1.查看源码目录下scripts中的nutcracker.init,据此进行后面的配置

#cd /usr/src/twemproxy/scripts/ && ls

#vim nutcracker.init  查看配置文件内容

2.把script目录中的nutcracker.init复制到/etc/init.d下,并重命名为twemproxy

#cd /usr/src/twemproxy/scripts/ && ls
#cp nutcracker.init  /etc/init.d/twemproxy  复制配置文件,并重命名
#cd /etc/init.d & ls  查看预启动程序列表
#chmod +x twemproxy 给文件添加x执行权限
#ls

#vim twemproxy  再次回顾配置文件,看一下里面期望我们做的配置

OPTIONS="-d -c /etc/nutcracker/nutcracker.yml"

很明显,配置文件希望在/etc下有个nutcracker目录,并且目录中有一个yml的配置文件,这个yml配置文件,在源码目录的conf目录中已经提供,需要后面稍微修改一下。

3.按配置文件nutcracker.init要求,创建目录并修改配置

根据原码目录中script目录中的nutcracker.init 文件内容提示:

OPTIONS="-d -c /etc/nutcracker/nutcracker.yml"

1.复制配置文件到etc下

#mkdir /etc/nutcracker 用于存放twemproxy中复制过来的conf文件 
#cd /usr/src/twemproxy/conf && ls 查看源码目录,默认配置文件列表
#cp ./*  /etc/nutcracker  把当前目录的所有文件复制一份到etc目录下
#cd /etc/nutcracker && ls
nutcracker.leaf.yml  nutcracker.root.yml  nutcracker.yml

2.nutcracker.init文件中的提示,把nutcracker.yml文件重新配置

参考地址:https://github.com/twitter/twemproxy,具体在configure栏目位的代码。

通过查看,可以得知该nutcracker.yml配置文件内容和官网configure栏目,底部位置命令一致

#cd /etc/nutcracker && ls
#cp nutcracker.yml  nutcracker.yml.bak 修改前,先做一个备份
#vim nutcracker.yml ,删除掉底部的栏目,仅保留顶部的一部分,并添加6380服务器。

注:这里后台有几台服务器,就可以配置几台。

alpha:listen: 127.0.0.1:22121hash: fnv1a_64distribution: ketamaauto_eject_hosts: trueredis: trueserver_retry_timeout: 2000server_failure_limit: 1servers:- 127.0.0.1:6379:1- 127.0.0.1:6380:1

需重点记忆22121端口和下面的服务器IP+端口配置, 稍后启动twemproxy要用到22121端口。

4.把twemproxy的src目录下的可执行程序nutcracker,复制一份到/usr/bin下

#cd /usr/src/twemproxy/src  && ls   切换到源码目录,可执行文件所在目录
#cp nutcracker  /usr/bin  把可执行文件复制一份到/usr/bin下,便于任何目录都可调用该命令

至此,在任何位置都可以使用nutcracker这个命令了

#nutcracker 敲击完前几个字母,tab键可以自动补全
#service twemproxy start
#service twemproxy stop 可以任性的启动和停止该程序了

三、演示twemproxy的使用

1.创建redis-sever服务的持久化目录

1.关闭原有的redis-server服务

#service redis_6379 stop
#service redis_6380 stop
#service redis_6381 stop
#ps -ef | grep redis  没有再展示redis进程,说明都被关闭了
root      20466  20265  0 09:33 pts/2    00:00:00 grep redis

注:不提前关闭,会影响下面的操作,还要回头处理这些问题。

2.创建6379和6380的持久化目录

#cd && mkdir data && cd data && mkdir 6379 6380  创建新的持久化目录

注:手动启动redis-server后,它自动会把当前所在目录当做持久化目录。

2.分别开启新窗口,启动redis6379和redis6380的服务

1.新开窗口启动6379

#cd /root/data/6379
#redis-server --port 6379  切换到6379目录下,启动redis

2.新开窗口启动6380

#cd /root/data/6380
#redis-server --port 6380   切换到6380目录下,启动redis

3.在新窗口启动twemproxy(nutcracker)服务

#service twemproxy start  注:twemproxy是/etc/init.d下面的命令
#cd /etc/nutcracker && ls
#vi twemproxy.yml  查看它的代理端口号22121

alpha:
  listen: 127.0.0.1:22121

4.根据代理端口号22121,启动redis-cli客户端,并设值

#redis-cli -p 22121 此时redis连接的是代理服务器 
127.0.0.1:22121> set k1 aaa   注:如果此时,提示报错,就Ctrl+C,停掉服务,查看有哪些redis在运行 
OK
127.0.0.1:22121> set k2 bbb
OK
127.0.0.1:22121> set k3 ddd
OK
127.0.0.1:22121>

5.分别在新窗口进入redis-cli 6379客户端、6380客户端,查看key的分布情况

1.在新窗口,开启redis6379端口的客户端,查看keys的分布

#redis-cli -p 6379 新开窗口打开6379客户端
keys * 发现没有任何key
(empty list or set)
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379>

2.在新窗口,开启redis6380端口的客户端,查看keys的分布

#redis-cli -p 6380
127.0.0.1:6380> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6380> get k1
"aaa"
127.0.0.1:6380> get k2
"bbb"
127.0.0.1:6380>

3.小反思

最终发现,在代理端口22121端口设置的几个redis key都落到6380服务器了,6379上没有数据
那么下面就切回,22121客户端再次设置新的key,看是否会落在6379。

6.在22121端口的redis客户端重新赋值,再次查看keys的分布

1.在redis代理端口22121,继续设值key

127.0.0.1:22121> set 1 sdfsdf 注:这里的key是特意设置为1的,否则可能看到key一直会落在6380上。
OK
127.0.0.1:22121> set k4 eee
OK
127.0.0.1:22121> set k5 fff
OK
127.0.0.1:22121> set str hello
OK
127.0.0.1:22121> set num 555
OK
127.0.0.1:22121> 

2.切回redis6379客户端,查看keys的分布

127.0.0.1:6379>keys *
1) "1"
127.0.0.1:6379> 

发现在22121新增的key,只有一个key为1的落到6379redis服务器了。

注:这是经过返回验证的结果,新增的key会优先落到6380服务器,原因有待深究。

3.切回redis6380客户端,查看keys的分布

127.0.0.1:6380> keys *
1) "k4"
2) "num"
3) "str"
4) "k5"
5) "k1"
6) "k2"
7) "k3"
127.0.0.1:6380> 

7.代理端口22121的redis屏蔽了一些命令,比如keys*,且不支持事务

127.0.0.1:22121> keys *  因为有多个key都在不同的节点的服务器上,和主从复制还是很不一样的
Error: Server closed the connection
127.0.0.1:22121> watch k1
Error: Server closed the connection
127.0.0.1:22121> multi  所有的指令发散到不同的机器了,不支持事务,因为数据分制了(不像主从复制那样,每台机器数据都一样)
Error: Server closed the connection
127.0.0.1:22121> 

8.收尾工作,关闭掉新开启的代理和客户端

127.0.0.1:22121>  exit
127.0.0.1:6380>  exit
127.0.0.1:6379>  exit
#service twemproxy stop 关闭掉代理
#service redis_6379 stop
#service redis_6380 stop

四、总结

1.前台用户,对后台有多少台redis服务提供服务是无感的,只知道代理端口22121这条redis客户端服务

对客户端来说,客户端只知道一台22121端口的redis客户端在提供服务,不应该知道6379、6380的存在。

2.通过上述实验,发现通过代理端口22121落地的新数据,在后台服务器,并不是均匀或者等量分布的

3.代理端口22121的redis屏蔽了一些命令,比如keys*,且不支持事务。

五、附注:Twemproxy的实现原理和参数介绍

1.Twemproxy的实现原理

Twemproxy是一种代理分片机制,由Twitter开源,主要用于精简前端的操作,对外只有1个或少量的端口,按照路由规则,转发给后台的各个Redis或memcached服务器,再原路返回。

Twemproxy本身也是单点,如需高可用,可通过Keepalived来水平扩张redis或memcached服务,可以有效的避免单点故障问题。

2.Twemproxy的参数介绍

原文地址:https://github.com/twitter/twemproxy  ,Help这个位置,具体如下。

-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)

尾言

至此,所有搭建和实验工作完毕,希望能对爱学习的你有所启发和帮助!奥利给!

Redis分片代理twemproxy快速搭建 | twemproxy Demo | twitter/ twemproxy 避坑指南 | autoconf-2.69下载相关推荐

  1. 如何快速申请软件著作权,教你避坑!!!

    [软著]30天快速申请软件著作权,教你避坑!!! 现在好多人不知道怎么申请软著,很多是通过找代理公司进行操作,这样既浪费钱,也浪费时间,而且根据最新的政策,软著申请是不需要钱的,本人亲自申请了一个软著 ...

  2. Hi3861开发环境搭建 ||避坑指南|| [适用于几乎所有以Hi3861为主控的开发板]

    Hi3861开发环境搭建 ||避坑指南|| [适用于几乎所有以Hi3861为主控的开发板] 前言: 这几天为了搭建Hi3861的开发环境,看了不少官方文档和视频,但是依然折腾了很久才配置好编译.上传都 ...

  3. ELK学习3_使用redis+logstash+elasticsearch+kibana快速搭建日志平台

    日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数.执行时间.成功率等 异常数 ...

  4. Docker中搭建redis分片集群,搭建redis哨兵结构,实现springboot中对redis分片集群、哨兵结构的访问,Redis缓存雪崩、缓存击穿处理(非关系型数据库技术课程 第十二周)

    文章目录 一.要求: 二.知识总结 缓存雪崩 解决方案 docker中redis分片集群搭建 配置好配置文件 redis-6380.conf redis-6381.conf redis-6382.co ...

  5. 云环境 Open代理 server 快速搭建指南

    云环境 OpenVPN server 快速搭建指南 一. 配置前提 需要一台 Linux 服务器. 服务器需要有公网 IP 地址,并且记住对应的网卡编号(例如: eth1 之类的). 服务器开放 44 ...

  6. 搭建JIRA避坑指南

    JIRA对工作效率的帮助不用解释.新的工作需要为自己搭建JIRA.遇到若干坑,然后一步一步避坑.记录如下: 1.Mysql的下载与安装: windows版mysql8.0安装详解_Zn昕的博客-CSD ...

  7. Pinpoint【环境搭建 01】JDK\HBase\Pinpoint Collector+Web 最新版 2.3.3 安装配置运行验证及脚本文件分享(避坑指南捷径指北)

    本文主要是介绍 Pinpoint 环境的部署,小伙伴儿们也可以参考 Pinpoint <官网>的<快速入门>手册,最新版本v2.3.3组件可到官方<GitHub仓库> ...

  8. 避坑指南:Kafka集群快速扩容的方案总结

    什么是数据迁移 Apache Kafka 对于数据迁移的官方说法是分区重分配.即重新分配分区在集群的分布情况.官方提供了kafka-reassign-partitions.sh脚本来执行分区重分配操作 ...

  9. Win10下快速复现Mask_RCNN避坑指南

    硬件环境:笔记本电脑win10系统.1050Ti显卡 软件环境:Anaconda.Pycharm 项目地址:https://github.com/matterport/Mask_RCNN 一.环境搭建 ...

最新文章

  1. 关于Lucene的自定义Sort排序
  2. Filter:过滤器
  3. L2-002 链表去重-团体程序设计天梯赛GPLT
  4. POPUP_TO_CONFIRM_STEP
  5. 红帽启动apache服务器_redhat 启动ssh服务器
  6. 句柄 matlab_matlab 整车仿真
  7. [XSY] 字符串题(字符串,构造)
  8. mybatis源码深度解析_30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软
  9. unity3d shader 自定义光照函数
  10. cad灯具图标_灯具在CAD中怎么表示出来 都代表哪种灯 谢谢
  11. Android中实现双指缩放的功能
  12. 2021年2月28日【Jiawei_Z】Ethercat的整个实现过程(举例:Lan9252)
  13. 呼叫中心系统智能排队功能转接流程
  14. 关于SQL数据表存储过程表名前缀换成dbo代码
  15. Typora快捷键全
  16. 【Java基础学习】Java基础中容易忽略点-2
  17. 高音质游戏无线蓝牙耳机推荐,低延迟吃鸡王者兼容无压力
  18. 毫无保留的共享经济,这场开源盛会你不能错过!
  19. 2D/3D文档查看器ABViewer v12大大提高了PDF转DWG的速度
  20. inkscape如何裁剪_科学网—如何在Inkscape图中输入LaTeX公式? - 李金磊的博文

热门文章

  1. 300-700题红题第二题
  2. c++ win窗口消息演示
  3. 详解JS原型与原型链
  4. scrcpy 投屏电脑能正常显示,但是没法用鼠标操作
  5. iOS平台的应用程序调试与分析
  6. JavaScript split() 方法:把一个字符串分割成字符串数组
  7. check_hostname requires server_hostname
  8. 胡汉三又回来了:“门头沟”CEO在日本注册新公司
  9. mysql contains函数用法_Oracle 中Contains 函数的用法有哪些
  10. 微信不仅可以关闭朋友圈,还可以关闭这些功能