Linux服务升级:Predixy 升级代理 Redis-cluster 集群

目录

 一、实验

1.环境

2. 启动Redis服务

3.Predixy 升级代理 Redis-cluster 集群

二、问题

1. Predixy进行set操作报错

2.如何创建脚本启动predixy

3.Redis代理对比


 一、实验

1.环境

(1)主机

表1  主机

系统版本节点软件IP备注
CentOS7.9Redis0Predixy192.168.204.40

   Redis代理

Redis第一个Redis实例
Redis1Redis192.168.204.41第二个Redis实例
Redis2Redis192.168.204.42第三个Redis实例
Redis3Redis192.168.204.43第四个Redis实例
Redis4Redis192.168.204.44第五个Redis实例
Redis5Redis192.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

Redis1Redis2Redis3Redis4Redis5

第一批次

(分布)

devopscicdcicdkubernetes

第二批次

(分布)

jenkins

jenkins

gitlab

nexus

sonarqube

arogcdharbor

第三批次

(分布)

threefour

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot开发 -- Postman 调试类型详解

引言 在 Spring Boot 应用开发过程中,接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具,可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…

C/C++|malloc分配内存详解

看本节前,希望读者有linux内存分布的基本概念,可以阅读这篇文章: 进程虚拟地址空间和函数调用栈 在本节中希望读者可以一口气阅读完所有内容。 本博客内容全部来自小林coding:malloc 是如何分配内存的? 这里仅为笔记记…

Python-图片旋转360,保存对应图片

#Author :susocool #Creattime:2024/5/25 #FileName:turn360 #Description: 会旋转指定的图像文件360度,并将每个旋转后的图像保存到指定目录,文件名以旋转角度命名。 from PIL import Imagedef rotate_and_save(image_path, output_dir) :# …

Linux/Ubuntu 中安装 ZeroTier,实现内网穿透,2分钟搞定

相信很多人都有远程连接家中设备的需求,如远程连接家中的NAS、Windows等服务,所以会涉及到一个内网穿透工具的使用,如果没有公网IP的情况下,推荐大家使用ZeroTier,这是一款强大的内网穿透工具。 mac和windows版的操作…

Nginx-狂神说

Nginx概述 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。 但是慢慢的,使用我们平台…

HTTP 各版本差异

http1.0 它的特点是每次请球和响应完毕后都会销毁TCP 连接。同时规走前一个响应完成后才发送下一个请求。这样做有两个问题: 无法复用连接了。 每次请求都要创建新的TCP连接,完成三次握手和四次挥手。网络利用率低 队头阻塞 如果前一个请求被某种原因阻…

K8S认证|CKA题库+答案| 13. sidecar 代理容器日志

目录 13、使用 sidecar 代理容器日志 CKA v1.29.0模拟系统免费下载试用: 题目: 开始操作: 1)、切换集群 2)、生成yaml文件 3)、官网找模板 4)、编辑yaml文件 5)、应用yaml…

车载电子电器架构 —— 智能座舱技术

车载电子电器架构 —— 智能座舱技术 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的…

qt multiple definition of 报错解决

qt编译报了很多错, multiple definition of xxx 原来一维设计文件ui 的问题 后来发现是pro中头文件和cpp文件重写了,导致重复编译报的错 解决方法:把重复的头文件和cpp文件删了就可以了。

如何解决0.1+0.2!=0.3的问题

var x 0.1; var y 0.2; var z x y // z 的结果为 0.30000000000000004 if (z 0.3) // 返回 false 可以用整数的乘除法来解决 var z (x * 10 y * 10) / 10; // z 的结果为 0.3

GEO数据挖掘-GEO背景知识+表达芯片分析思路

From生物技能树 GEO数据挖掘第一节 (pipeline) 文章目录 1.图表分析2.GEO背景介绍及分析思路3.代码分析流程4.复杂数据分析理论知识1.数据从哪里来2.有什么类型的数据可挖掘3.如何筛选基因(分析方法)在这里插入图片描述 图表介绍1…

Jenkins + github 自动化部署配置

1 Jenkins安装 AWS EC2安装Jenkins:AWS EC2 JDK11 Jenkins-CSDN博客 AWS EC2上Docker安装Jenkins:https://blog.csdn.net/hhujjj2005/article/details/139078402 2 登录jenkins http://192.168.1.128:8080/ $ docker exec -it d1851d9e3386 /bin/ba…

Multi-objective reinforcement learning approach for trip recommendation

Multi-objective reinforcement learning approach for trip recommendation A B S T R A C T 行程推荐是一项智能服务,为游客在陌生的城市提供个性化的行程规划。 它旨在构建一系列有序的 POI,在时间和空间限制下最大化用户的旅行体验。 将候选 POI 添…

【Shell】sed编辑器实例

sed是用来解析和转换文本的工具,它使用简单,是简洁的程序设计语言。 sed编辑器 (一) sed编辑器基础1. 简介2. sed的模式空间 (二)基本的sed编辑命令(三)sed命令实例1. 向文件中添加或…

MFC GDI 绘图模式、映射模式、画笔、笔、字体

一 GDI 绘图模式(RoP2 Mode) 在使用VC MFC进行图形程序编程时,常会用到GDI绘图指令,而要做到绘图时有橡皮筋动态效果,就需设置GDI绘图模式。GDI绘图模式有多种,如下: 常用R2_NOT模式来实…

Linux|操作系统|如何下载各个版本的centos操作系统

前言: centos做为一个现在比较常用的Linux社区版本,还是比较受欢迎的,那么,如何下载centos的安装包,也就是centos的操作系统呢? 首先,我们应该知道硬件底层有aarch64,ppc64&#x…

【限免】短时傅里叶变换时频分析【附MATLAB代码】

来源:微信公众号:EW Frontier 简介 一种能够同时对信号时域和频域分析的方法——短时傅里叶变换(STFT),可以在时频二维角度准确地描述信号 的时间、频域的局部特性,与其他算法不同,通过该算法可…

【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词

目录 本文安装包下载地址注意安装elasticsearch1.上传文件2.解压elasticsearch-6.3.1.tar.gz3.开启远程连接权限4.修改其他配置[root用户操作]5.重启虚拟机6.启动es7.外部访问 安装kibana-61.解压2.配置3.启动kibana4.访问5.在开发工具中做数据的增删改查操作 安装IK分词1.wind…

简述什么是Vue的自定义指令

Vue的自定义指令是Vue框架提供的一种扩展机制,允许开发者注册自己的指令,从而封装一些DOM操作或添加额外的功能。这些自定义指令可以在Vue模板中像内置指令(如v-for、v-if等)一样使用,但提供了更大的灵活性和自定义性。…

QML与C++交互的两种注册方法比较(rootContext 和 qmlRegisterType)

在main.cpp实例化对象调用的过程中&#xff0c;注册是常见的操作之一&#xff0c;目前接触到的方法有两种&#xff0c;两者的目的和使用方式是不同的&#xff0c;通过代码可以直观的 看出来&#xff1a; int main(int argc, char *argv[]) { #if QT_VERSION < QT_VERSION_C…