> 文档中心 > “Redis代理“之Twemproxy,不来了解一哈?

“Redis代理“之Twemproxy,不来了解一哈?

文章目录

    • 🐯Redis系列🐯:
    • 🐯Twemproxy:
      • 🐯下载
      • 🐯编译构建
      • 🐯配置
      • 🐯服务环境准备
      • 🐯Twemprocy代理实操验证
    • 🐯结尾语:
    • 🐯下期预告

🐯Redis系列🐯:

🐯Redis安装教程(保姆级详细图文)
🐯布隆过滤器安装步骤
🐯小记一手 “Redis持久化机制”
🐯手把手带你实操 RDB & AOF
🐯带你 “亲自体验“ Redis主从复制
🐯“Redis哨兵“一撸到底 ,贼爽~


🐯Twemproxy:

Twemproxy(two-em-proxy),又名胡桃夹子,是memcached和redis协议的快速和轻量级代理。

我们先来看一下没有使用代理的客户端和服务端的连接,是不是连接数量巨多反正我麻了,你麻了吗?,所以当有很多客户端连接Redis时,服务端的连接成本会很高

在这里插入图片描述

再来来看看使用了代理的,是不是特别清爽简洁、让人起来就很爽(即使你操作API的时候根本肉眼观察不到)~
所以Twemproxy主要是为了减少到后端缓存服务器连接数量。再加上协议管道分片,使我们能够水平扩展分布式缓存架构。

在这里插入图片描述

🐯下载

我们在之前的文章里都是通过wget去获取源码包的,这边我们安装一个git

yum -y install git

根目录soft文件夹中把源码下载下来

如果你什么都没做下载github上面代码属于有点靠运气…拉不下来多试几次十几次几十次~~~😁

cd ~/softgit clone https://github.com/twitter/twemproxy.git

🐯编译构建

安装automakelibtool供后续使用

yum -y install automake libtool

twemproxy当克隆下代码会以文件夹形式呈现在目录中

cd ~/soft/twemproxy/autoreconf -fvi

在这里插入图片描述

构建编译两步骤:

第一步:执行configure

./configure

在这里插入图片描述

第二步:执行make

make

在这里插入图片描述

🐯配置

cd ~/soft/twemproxy/src

nutcracker拷贝到/usr/bin/目录下,就可以在全局任意地方执行了

cp nutcracker /usr/bin/

老规矩 在/etc下创建一个nutcracker目录用来存放相关配置文件

mkdir /etc/nutcracker 

将源码目录scripts下的nutcracker.init文件复制到/etc/init.d下改名为twemproxy

cd ~/soft/twemproxy/scripts/cp nutcracker.init /etc/init.d/twemproxy

给twemproxy权限

chmod +x /etc/init.d/twemproxy

nutcracker相关配置文件拷贝到我们刚创建的/etc/nutcracker目录下

cd ~/soft/twemproxy/conf
cp * /etc/nutcracker
cd /etc/nutcracker

备份一下,防止改错了,不备份也可以,出错重新到~/soft/twemproxy/conf目录下拷贝一份过来就可以了

cp nutcracker.yml nutcracker_bak.yml 

配置文件解析并理解以下键:

键名 释义
listen 该服务器池的监听地址端口name:portip:port
hash 哈希算法的名称。 可能的值为: one_at_a_timemd5crc16crc32crc32afnv1_64fnv1a_64 (default)fnv1_32fnv1a_32hsiehmurmurjenkins
distribution 根据计算的哈希值选择后端服务器的密钥分配模式。 可能的值为:ketama默认)、modula(使用哈希模数服务器来选择后端)、random(为每个请求的每个键选择一个随机后端)
auto_eject_hosts 一个布尔值,用于控制在服务器连续失败server_failure_limit 次时是否应临时弹出服务器, 默认false
redis 一个布尔值,用于控制服务器池是否使用 redismemcached协议。 默认false
server_retry_timeout auto_eject_hosts 设置为true时,在临时弹出的服务器上重试之前等待的超时值(以毫秒为单位)。 默认30000毫秒
server_failure_limit auto_eject_hosts设置为true 时,服务器上导致它被临时弹出的连续故障数默认2
servers 此服务器池的服务器地址端口权重(名称:端口:权重或 ip:端口:权重)列表。

修改配置文件,把机器配置进去

vi nutcracker.yml

咱们先不看其他配置,这边暂时用不到,直接删除其他配置,只保留alpha下的配置

光标移动到beta配置上方空行出 按下d键+(大写)G

在这里插入图片描述
在这里插入图片描述

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:6379:1   - 127.0.0.1:6380:1   - 127.0.0.1:6381:1

改好后按Esc输入:wq保存退出

🐯服务环境准备

强制关闭所有服务(方式有多种,我不崇尚暴力解决,但是有时候暴力解决就是。。。。)

ps -ef | grep redis#强制杀掉进程kill -9 PID

在这里插入图片描述

像前面文章里那样,新增三个窗口,然后分别在对应窗口执行redis-server命令(无论你是什么shell工具都可以开多个窗口的,我这边用的是Termius客户端,这个shell工具我一直在用,挺顺手~~~)

redis-server --port 6379

在这里插入图片描述

redis-server --port 6380

在这里插入图片描述

redis-server --port 6381

在这里插入图片描述

Redis的服务都启动了,我们开启twemproxy代理的服务

service twemproxy start

在这里插入图片描述

新开Redis_Twemprocy客户端窗口

redis-cli -p 22121

在这里插入图片描述

🐯Twemprocy代理实操验证

执行几笔set操作

127.0.0.1:22121> set daa21dwafaf aaaOK127.0.0.1:22121> set fqf231dwqdq aaaOK127.0.0.1:22121> set k1 aaaOK

那我们分别登进三台Redis查看一下,看这几笔set操作是否成功进入不同的机器中(这边的key是我为了给大家演示出效果,所以经过多次尝试后整理出来的刚好分别进入三个Redis实例中的,如果大家自己进行操作的话可能由于算法计算结果的原因,不一定均匀的分布在三台机器中)

redis-cli  -p 6379

在这里插入图片描述

redis-cli  -p 6380

在这里插入图片描述

redis-cli  -p 6381

在这里插入图片描述

分别查看各客户端中所有key

keys *

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🐯结尾语:

本期Redis代理之Twemproxy实战就到这里了~~如果觉得有帮助的话请三连~

🐯下期预告

下期进行Redis代理之Predixy~

88读书网