“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
均高于Twemproxy
、Codis
等,响应时间均低于Twemproxy
、Codis
等 -
单线程 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
模块,选用其中一种放开注释(Sentinel
和Cluster
只能选其一
),放开sentinel的同时还要注释掉try
🐯sentinel.conf配置
vi sentinel.conf
放开
多行注释
:将光标
移动到下图所指位置,然后按Shift
+:
输入.,$s/#//
+回车
.,$s/#//
的意思是将从光标位置一直到最后一行所有的#
替换为空
🐯配置参数释义
这样咱们就成功放开了注释掉的配置,现在配置
三台
哨兵,这3台哨兵为一个集群
,在前面文章中提到过,一套哨兵
既可以监控一套
Redis主从复制集群也可以监控多套
Redis主从复制集群,我们讲三台哨兵的端口
分别配置为26379
,26380
,26381
,两套
Redis主从复制集群的主节点
名称分别配置为mymaster1
和mymaster2
,配置文件详细参数请参考下表:
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
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
配置文件拷贝两份出来稍作修改作为26380
和26381
的配置文件
cp 26379.conf 26380.confcp 26379.conf 26381.conf
修改
26380
和26381
的配置文件,只需要修改port,其他无需改变
vi ~/test/26380.conf
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
开
13
个新的shell
窗口,我们将要启2套Redis主从复制集群,1套Redis哨兵,1台Predixy代理,一台Predixy代理Redis客户端,两台36379
和46379
节点客户端
首先先到根目录的
test
文件夹中创建36379
、36380
、36381
、46379
、46380
、46381
文件夹,因为我们将要启动两套
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~