目录
一、实验
1.环境
2. 启动Redis服务
3.Predixy 升级代理 Redis-cluster 集群
二、问题
1. Predixy进行set操作报错
2.如何创建脚本启动predixy
3.Redis代理对比
一、实验
1.环境
(1)主机
表1 主机
| 系统 | 版本 | 节点 | 软件 | IP | 备注 |
| CentOS | 7.9 | Redis0 | Predixy | 192.168.204.40 | Redis代理 |
| Redis | 第一个Redis实例 | ||||
| Redis1 | Redis | 192.168.204.41 | 第二个Redis实例 | ||
| Redis2 | Redis | 192.168.204.42 | 第三个Redis实例 | ||
| Redis3 | Redis | 192.168.204.43 | 第四个Redis实例 | ||
| Redis4 | Redis | 192.168.204.44 | 第五个Redis实例 | ||
| Redis5 | Redis | 192.168.204.45 | 第六个Redis实例 |
(2)Termius连接
主机

列表

2. 启动Redis服务
(1)Redis集群部署
可以参考本人博客:
数据库应用:Redis主从复制、哨兵、cluster集群-CSDN博客
(2)所有节点启动Redis服务
cd /opt/redis-5.0.7/
redis-server redis.conf #启动redis节点
Redis0

Redis1

Redis2

Redis3

Redis4

Redis5

(3)策略
Redis0部署Predixy,以下操作均在Redis0上操作。
(4)配置编译环境
yum install libstdc++-static -y


yum -y install gcc automake autoconf libtool make


yum install gcc gcc-c++

(4)下载wget工具
yum install wget -y

3.Predixy 升级代理 Redis-cluster 集群
(1) 查阅
https://github.com/joyieldInc/predixy
最新版为7.0.1

https://github.com/joyieldInc/predixy/releases/download/7.0.1/predixyFreeEdition-7.0.1-amd64-linux.tar.gz
1.0.5版本:

https://github.com/joyieldInc/predixy/releases/download/1.0.5/predixy-1.0.5-bin-amd64-linux.tar.gz
(3)下载
wget https://github.com/joyieldInc/predixy/archive/1.0.5.tar.gz

(4)解压
tar -zxvf 1.0.5.tar.gz



(5)查看
cd predixy-1.0.5/
ls

(6)移动目录
mv predixy-1.0.5/ /usr/local/src

查看
cd /usr/local/src;ls

(7) 编译
cd predixy-1.0.5/
make -j4

(8)复制编译文件
进入src目录,把编译好的predixy拷贝到/usr/local/bin下
cd src && cp predixy /usr/local/bin/

查看
ls

(9)复制配置文件
把src下的predixy-1.0.5/conf/下的所有配置文件拷贝/usr/local/bin下
cp /usr/local/src/predixy-1.0.5/conf/* /usr/local/bin

(10)修改cluster.conf 配置文件
修改 /usr/local/bin 目录下cluster.conf
vim /usr/local/bin/cluster.conf
![]()
修改前:

修改后:
ClusterServerPool {# 连接集群中redis的密码Password 123456789MasterReadPriority 60StaticSlaveReadPriority 50DynamicSlaveReadPriority 50RefreshInterval 1ServerTimeout 1ServerFailureLimit 10ServerRetryTimeout 1KeepAlive 120Servers {+ 192.168.204.40:6379+ 192.168.204.41:6379+ 192.168.204.42:6379+ 192.168.204.43:6379+ 192.168.204.44:6379+ 192.168.204.45:6379}
}

(11)修改predixy.conf 配置文件
修改 /usr/local/bin 目录下predixy.conf 文件
vim /usr/local/bin/predixy.conf
![]()
修改前:(默认predixy代理连接端口号7617)


修改后:(放开Cluster注释)
找到SERVERS模块,选用其中一种放开注释(Sentinel和Cluster只能选其一),放开sentinel的同时还要注释掉try

(12)修改auth.conf配置文件
修改 /usr/local/bin 目录下auth.conf 文件,predixy代理连接密码为 123456789
vim /usr/local/bin/auth.conf
![]()
修改前:


修改后:
Authority {# 连接代理的密码Auth "123456789" {Mode write}
}

(13)启动predixy
1)首先进入目录
cd /usr/local/bin2)启动
nohup predixy predixy.conf > /tmp/predixy.log 2>&1 &;3)查看日志:tail -f /tmp/predixy.log
进入目录启动

连接代理

(14)连接predixy 代理,进行第一批次操作redis数据
redis-cli -h 192.168.204.40 -p 7617 -a 123456789#执行set操作(写入键值对)
127.0.0.1:7617> set cicd 123
OK
127.0.0.1:7617> set devops 123
OK
127.0.0.1:7617> set kubernetes 123
OK

(15)分别进入Redis实例
redis-cli -p 6379
keys *
exit
Redis0

Redis1 (name为之前数据,后续出现可忽略)

Redis2

Redis3

Redis4

Redis5

(16)连接predixy 代理,进行第二批次操作redis数据
redis-cli -h 192.168.204.40 -p 7617 -a 123456789#执行set操作(写入键值对)
127.0.0.1:7617> set jenkins 123
OK
127.0.0.1:7617> set gitlab 123
OK
127.0.0.1:7617> set nexus 123
OK
127.0.0.1:7617> set sonarqube 123
OK
127.0.0.1:7617> set harbor 123
OK
127.0.0.1:7617> set argocd 123
OK

(17)分别进入Redis实例
redis-cli -p 6379
keys *
exit
Redis0

Redis1

Redis2

Redis3

Redis4

Redis5

(17)连接predixy 代理,进行第三批次操作redis数据
redis-cli -h 192.168.204.40 -p 7617 -a 123456789#执行set操作(写入键值对)
127.0.0.1:7617> set one 1
OK
127.0.0.1:7617> set two 2
OK
127.0.0.1:7617> set three 3
OK
127.0.0.1:7617> set four 4
OK
127.0.0.1:7617> set five 5
OK
127.0.0.1:7617> set six 6
OK

(18)分别进入Redis实例
redis-cli -p 6379
keys *
exit
Redis0

Redis1

Redis2

Redis3

Redis4

Redis5

(19)统计
表2 写入键值对分布情况统计
| 批次 | Redis0 | Redis1 | Redis2 | Redis3 | Redis4 | Redis5 |
| 第一批次 (分布) | devops | cicd | cicd | kubernetes | ||
| 第二批次 (分布) | jenkins | jenkins gitlab nexus sonarqube | arogcd | harbor | ||
| 第三批次 (分布) | three | four | one four five six | two |
二、问题
1. Predixy进行set操作报错
(1)报错
READONLY You can't write against a read only replica

(2)原因分析
查看日志

(3)解决方法
1)第一种方法:修改 redis.conf 配置文件(永久生效)
修改 redis.conf 配置文件中的参数 slave-read-only yes ,将 yes 修改为 no ;
然后保存并重启 redis 服务,此刻从服务器就具备了 读写权限。(注意:此方法必须重启 Redis 服务,才能使配置生效。)2)第二种方法:redis-cli 命令行中使用 config set 命令修改
在从Redis从服务器客户端命令行中 (redis-cli),通过 config set slave-read-only no 进行设置,立即生效,不需要重启 Redis 服务。(注意:若Redis从服务器重新启动,之前的设置参数就会失效,又会出现 redis 从服务器只有读权限。)
这里采用第二种方法:
redis-cli -p 6379127.0.0.1:6379> config get slave-read-only
1) "slave-read-only"
2) "yes"
127.0.0.1:6379> config set slave-read-only no
OK
127.0.0.1:6379> config get slave-read-only
1) "slave-read-only"
2) "no"
127.0.0.1:6379>

2.如何创建脚本启动predixy
(1)命令
#!/bin/bash
cd /usr/local/bin
nohup predixy predixy.conf > /tmp/predixy.log 2>&1 &
echo "======== success ========"
3.Redis代理对比
(1)对比
