> 文档中心 > “Redis代理”之Predixy

“Redis代理”之Predixy

文章目录

    • 🐯Redis系列🐯:
    • 🐯Predixy简介
    • 🐯下载
    • 🐯predixy.conf配置
    • 🐯sentinel.conf配置
      • 🐯配置参数释义
    • 🐯哨兵配置
    • 🐯环境准备
    • 🐯Redis服务启动
    • 🐯哨兵服务启动
    • 🐯predixy代理服务启动
    • 🐯操作客户端验证
    • 🐯结尾语
    • 🐯下期预告

🐯Redis系列🐯:

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


🐯Predixy简介

Predixy 是一款高性能全特征redis代理,支持redis-sentinel和redis-cluster

Predixy很快,有多快?对比几个流行的redis代理(twemproxy,codis,redis-cerberus), predixy要比它们快得多

  • 单线程 SET/GET 基准测试

    可以看到多种场景下 SET/GET操作的QPS均高于TwemproxyCodis等,响应时间均低于TwemproxyCodis

    在这里插入图片描述

  • 单线程 PIPELINE SET/GET 基准测试

    在这里插入图片描述

  • 双线程 PIPELINE SET/GET 基准测试

    在这里插入图片描述

🐯下载

cd  ~/soft/

直接拉取编译好的源码

wget https://github.com/joyieldInc/predixy/releases/download/1.0.5/predixy-1.0.5-bin-amd64-linux.tar.gz

解压

tar xf predixy-1.0.5-bin-amd64-linux.tar.gz 

🐯predixy.conf配置

修改配置

cd  ~/soft/predixy-1.0.5/conf
vi predixy.conf

找到GENERAL,放开127.0.0.1:7617监听端口,咱们最后要到

在这里插入图片描述

找到SERVERS模块,选用其中一种放开注释(SentinelCluster只能选其一),放开sentinel的同时还要注释掉try

“Redis代理”之Predixy

🐯sentinel.conf配置

vi sentinel.conf

放开多行注释:将光标移动到下图所指位置,然后按Shift+:输入.,$s/#//+回车

.,$s/#//的意思是将从光标位置一直到最后一行所有的#替换为空

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

在这里插入图片描述

🐯配置参数释义

这样咱们就成功放开了注释掉的配置,现在配置三台哨兵,这3台哨兵为一个集群,在前面文章中提到过,一套哨兵既可以监控一套Redis主从复制集群也可以监控多套Redis主从复制集群,我们讲三台哨兵的端口分别配置为26379,26380,26381,两套Redis主从复制集群的节点名称分别配置为mymaster1mymaster2,配置文件详细参数请参考下表:

Databases 指定redis db数量,不指定的情况下为1
Hash 指定对key算哈希的方法,当前只支持atol和crc16
HashTag 指定哈希标签,不指定的话为{}
Distribution 指定分布key的方法,当前只支持modula和random
MasterReadPriority 读写分离功能,从redis master节点执行读请求的优先级,为0则禁止读redis master,不指定的话为50
StaticSlaveReadPriority 读写分离功能,从静态redis slave节点执行读请求的优先级,所谓静态节点,是指在本配置文件中显示列出的redis节点,不指定的话为0
DynamicSlaveReadPolicy 所谓动态节点是指在本配置文件中没有列出,但是通过redis sentinel动态发现的节点,不指定的话为0
RefreshInterval predixy会周期性的请求redis sentinel以获取最新的集群信息,该参数以秒为单位指定刷新周期,不指定的话为1秒
ServerTimeout 请求在predixy中最长的处理/等待时间,如果超过该时间redis还没有响应的话,那么predixy会关闭同redis的连接,并给客户端一个错误响应,对于blpop这种阻塞式命令,该选项不起作用,为0则禁止此功能,即如果redis不返回就一直等待,不指定的话为0
ServerFailureLimit 一个redis实例出现多少次才错误以后将其标记为失效,不指定的话为10
ServerRetryTimeout 一个redis实例失效后多久后去检查其是否恢复正常,不指定的话为1秒
KeepAlive predixy与redis的连接tcp keepalive时间,为0则禁止此功能,不指定的话为0
Sentinels 里面定义redis sentinel实例的地址
Group 定义一个redis组,Group的名字应该和redis sentinel里面的名字一致,Group里可以显示列出redis的地址,列出的话就是上面提到的静态节点

在这里插入图片描述

SentinelServerPool {    Databases 16    Hash crc16    HashTag "{}"    Distribution modula    MasterReadPriority 60    StaticSlaveReadPriority 50    DynamicSlaveReadPriority 50    RefreshInterval 1    ServerTimeout 1    ServerFailureLimit 10    ServerRetryTimeout 1    KeepAlive 120    Sentinels { + 127.0.0.1:26379 + 127.0.0.1:26380 + 127.0.0.1:26381    }    Group mymaster1 {    }    Group mymaster2 {    }}

改好后:wq保存退出

🐯哨兵配置

下面我们对Redis哨兵服务进行配置,主要就是端口和我们刚刚配置的predixy相关的配置文件对应上,我们这边需要配两套

sentinel auth-pass 配置项是因为我们本文中操作的Redis被我配上了连接密码,所以这边需要配置一下Redis节点通信密码,在前面Redis哨兵的文章中已经提到过了

vi ~/test/26379.conf

“Redis代理”之Predixy

port 26379sentinel monitor mymaster1 127.0.0.1 36379 2sentinel monitor mymaster2 127.0.0.1 46379 2sentinel auth-pass mymaster1 密码sentinel auth-pass mymaster2 密码

改好后:wq保存退出

26379配置文件拷贝两份出来稍作修改作为2638026381的配置文件

cp 26379.conf 26380.confcp 26379.conf 26381.conf

修改2638026381的配置文件,只需要修改port,其他无需改变

vi ~/test/26380.conf

“Redis代理”之Predixy

port 26380sentinel monitor mymaster1 127.0.0.1 36379 2sentinel monitor mymaster2 127.0.0.1 46379 2sentinel auth-pass mymaster1 密码sentinel auth-pass mymaster2 密码

改好后:wq保存退出

vi ~/test/26381.conf

在这里插入图片描述

port 26381sentinel monitor mymaster1 127.0.0.1 36379 2sentinel monitor mymaster2 127.0.0.1 46379 2sentinel auth-pass mymaster1 密码sentinel auth-pass mymaster2 密码

改好后:wq保存退出

🐯环境准备

好了,XDM 又到了环境准备的环节了,老规矩,先清后台Redis相关服务,不要让他们影响我们拔刀的速度

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

“Redis代理”之Predixy

13个新的shell窗口,我们将要启2套Redis主从复制集群,1套Redis哨兵,1台Predixy代理,一台Predixy代理Redis客户端,两台3637946379节点客户端

首先先到根目录的test文件夹中创建363793638036381463794638046381文件夹,因为我们将要启动两套Redis主从复制集群,发生操作后,达到一定时长后会生成对应Redis实例下的dump.rdb文件,我们建文件加的目的就是为了让他们各回各家,各找各妈,当前窗口启动哪个节点就生成到哪个节点对应的文件夹下面,方便查找与查看

mkdir ~/test/36379 ~/test/36380 ~/test/36381 ~/test/46379 ~/test/46380 ~/test/46381

咱们先来预览一下将要操作的大概都是些什么,我们拿着结果去探索,会不会更加的有乐趣一些~,咱们主要就是搭两套Redis集群,然后搭一套哨兵去监控这两套Redis集群,后续操作还会新增Predixy客户端Redis客户端

在这里插入图片描述

🐯Redis服务启动

启动以36379节点为主的第一套主从复制集群

cd ~/test/36379redis-server --port 36379

在这里插入图片描述

启动36379节点的从节点36380

cd ~/test/36380redis-server --port 36380 --replicaof 127.0.0.1 36379

在这里插入图片描述

启动36379节点的从节点36381

cd ~/test/36381redis-server --port 36381 --replicaof 127.0.0.1 36379

在这里插入图片描述

启动以36379节点为主的第二套主从复制集群

cd ~/test/46379redis-server --port 46379

在这里插入图片描述

启动46379节点的从节点46380

cd ~/test/46380redis-server --port 46380 --replicaof 127.0.0.1 46379

在这里插入图片描述

启动46379节点的从节点46381

cd ~/test/46381redis-server --port 46381 --replicaof 127.0.0.1 46379

在这里插入图片描述

🐯哨兵服务启动

启动26379节点哨兵

redis-server ~/test/26379.conf --sentinel

在这里插入图片描述

启动26380节点哨兵

redis-server ~/test/26380.conf --sentinel

在这里插入图片描述

启动26381节点哨兵

redis-server ~/test/26381.conf --sentinel

在这里插入图片描述

🐯predixy代理服务启动

启动predixy代理服务,启动成功我们可以发现上面运行的两套主从复制集群,分别可以看到主从节点信息

cd ~/soft/predixy-1.0.5/bin/./predixy ../conf/predixy.conf

在这里插入图片描述

🐯操作客户端验证

启动predixy代理客户端

redis-cli -p 7617

启动成功并操作几笔set操作,稍后去两套Redis集群的主节点查看数据有没有成功落到这两套集群中

127.0.0.1:7617> set k1 aaaOK127.0.0.1:7617> set k2 aaaOK127.0.0.1:7617> get k1"aaa"127.0.0.1:7617> get k2"aaa"

在这里插入图片描述

启动Redis_36379客户端,查看有没有key落到当前集群中

redis-cli -p 36379
keys *1) "k1"

在这里插入图片描述

启动Redis_46379客户端,查看有没有key落到当前集群中

redis-cli -p 46379
127.0.0.1:46379> keys *1) "k2"

在这里插入图片描述

对了XDM,predixy是支持带哈希标签的,相同标识会落到同一套Redis中,我们再落一组带标签标识的数据

127.0.0.1:7617> set {TEST}k1 tttOK127.0.0.1:7617> set {TEST}k2 tttOK

在这里插入图片描述

带标识的数据已经操作完,到36379客户端查看一下在不在这个里面(XDM,如果你是自己定义的标识在36379中没有查看到,那再去46379客户端中查看,我这边是刚好运气好直接落到36379这套Redis中了)

127.0.0.1:36379> keys *1) "{TEST}k1"2) "k1"3) "{TEST}k2"

在这里插入图片描述

🐯结尾语

本期Redis代理之Predixy实战就到这里了~~如果觉得本文对你有帮助的话记得点赞收藏~

🐯下期预告

下期进行Redis代理之Cluster~

造句网