搭建Redis主从集群和哨兵

说明:单机的Redis存在许多的问题,如数据丢失问题、高并发问题、故障恢复问题、海量数据的存储能力问题,针对这四个问题,对应解决方式有:数据持久化(参考:http://t.csdn.cn/SSyBi)、搭建主从集群、Redis哨兵和搭建分片集群;

本文介绍搭建Redis主从集群和哨兵,用以解决单机Redis的并发问题和故障恢复问题。操作系统是CentOS 7,远程连接工具是WindTerm。

单机安装

首先,先安装单机的Redis

第一步:下载Redis压缩包

可在官网(https://redis.io/download/#redis-downloads)下载,下载完成后将压缩包复制到云服务器或者Linux虚拟机里;

在这里插入图片描述

我这里放在/tmp/essay目录下

在这里插入图片描述

第二步:安装Redis所需的依赖

我安装过了,首次安装需要一点时间

yum install -y gcc tcl

在这里插入图片描述

第三步:解压

tar -xvf redis-6.2.4.tar.gz

在这里插入图片描述

第四步:编译

进入redis目录

cd redis-6.2.4

执行编译命令

make && make install

全程没有爆红,就是编译完成

在这里插入图片描述

在这里插入图片描述

第五步:修改配置文件

需要修改两个地方,一个是绑定地址(75行),默认是127.0.0.1,本地访问,需要修改为0.0.0.0,表示任意IP访问;

在这里插入图片描述

第二个是数据库数量(327行),默认是16,我们设置为1;

在这里插入图片描述

可通过下面的命令查看配置文件中对应的配置是否已经更改

grep -rina "关键字" 文件

可以看到地址已经修改了,可是数据库数量没有更改过来
在这里插入图片描述

修改完之后再看,已经修改完成

在这里插入图片描述

第六步:启动测试

redis-server redis.conf

可以看到,Redis可以正常启动;
在这里插入图片描述

如果出现了端口被占用的情况,可使用下面两个命令,查看端口被占用的进程PID,再强制结束该进程;

ps -ef |grep 端口号

kill -9 进程ID

在这里插入图片描述

关闭Redis(ctrl+c),开始搭建主从集群

在这里插入图片描述

主从集群

结构图

在这里插入图片描述

第一步:复制配置文件

将redis.conf配置文件拷贝三份,修改文件中对应的端口号(如8001、8002、8003),模拟三台Redis服务器;

注意,需要在Redis的目录外面操作;

# 创建三个目录,以端口号命名
mkdir 8001 8002 8003

# 复制redis配置文件到三个文件夹中
echo 8001 8002 8003 | xargs -t -n 1 cp redis-6.2.4/redis.conf

在这里插入图片描述

第二步:修改对应的端口号

修改对应目录下的配置文件中的端口号,注意路径,我这里的是/tmp/essay

sed -i -e 's/6379/8001/g' -e 's/dir .\//dir \/tmp\/essay\/8001\//g' 8001/redis.conf
sed -i -e 's/6379/8002/g' -e 's/dir .\//dir \/tmp\/essay\/8002\//g' 8002/redis.conf
sed -i -e 's/6379/8003/g' -e 's/dir .\//dir \/tmp\/essay\/8003\//g' 8003/redis.conf

在这里插入图片描述

第三步:绑定IP

修改每个目录里的配置文件,使每个Redis绑定一个固定IP,避免多个IP造成的混乱(如果是虚拟机操作);

printf '%s\n' 8001 8002 8003 | xargs -I{} -t sed -i '1a replica-announce-ip IP' {}/redis.conf

我这里改成自己云服务的内网IP,如果是虚拟机操作的话,那么改成自己虚拟机的IP就可以;

在这里插入图片描述

第四步:启动

可以创建三个窗口,分别启动这三个Redis

# 第1个
redis-server 8001/redis.conf
# 第2个
redis-server 8002/redis.conf
# 第3个
redis-server 8003/redis.conf

在这里插入图片描述

第五步:关联主从关系

此时,三台Redis服务器是相互独立的,没有主从关系。需要进入到对应的客户端里,建立主从关系;

# 指定端口进入对应的redis客户端
redis-cli -p 端口号
# 在子节点中设置master节点
slaveof master节点的IP 端口号
# 在master节点中查看子节点信息
info replication

例如设置8001为master节点,8002、8003均为8001的子节点

在这里插入图片描述

在master节点的redis日志中,可以看到另外两个节点发过来的同步请求同步信息;

同样,在另外两个子节点也可以看到对应的日志信息;

在这里插入图片描述

如果无法关联主从关系,检查一下三个redis.conf文件中的这行配置是否已经设置为0.0.0.0

在这里插入图片描述

第六步:使用

正如前面所说,搭建主从集群,可以解决高并发问题,这是通过读写分离实现的。

  • 子节点没有写能力,只有读能力;

  • master节点有读写能力;

在这里插入图片描述

小结

通过搭建主从集群,实现读写分离,可解决高并发问题。

另外,值得一提的是:

(1)主从集群可以设置临时和永久两种模式,上面通过命令行的方式设置的是临时模式,重启redis服务后失效。想要设置永久模式,可将命令写在对应的redis.conf配置文件中。

(2)在redis 5.0以后,新增了replicaof命令,效果与slaveof一样。

Redis哨兵

结构图

在这里插入图片描述

第一步:创建文件

在essay目录下,创建三个目录(s1、s2、s3),分别表示三个哨兵,端口号分别是28001、28002、28003;

# 创建三个目录
mkdir s1 s2 s3

进入s1目录,创建sentinel.conf文件,文件内容如下,补充上IP地址

# 创建sentinel.conf文件
touch sentinel.conf
port 28001
sentinel announce-ip IP地址
sentinel monitor mymaster IP地址 8001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/essay/s1"

在这里插入图片描述

第二步:复制文件到其他目录

在essay目录下,将s1中的文件复制一份到另外两个文件夹中

echo s2 s3 | xargs -t -n 1 cp s1/sentinel.conf

在这里插入图片描述

第三步:修改配置文件

修改另外两个配置文件中的端口号

sed -i -e 's/28001/28002/g' -e 's/s1/s2/g' s2/sentinel.conf
sed -i -e 's/28001/28003/g' -e 's/s1/s3/g' s3/sentinel.conf

在这里插入图片描述

第四步:启动哨兵

分别启动三个哨兵

# 第1个
redis-sentinel s1/sentinel.conf
# 第2个
redis-sentinel s2/sentinel.conf
# 第3个
redis-sentinel s3/sentinel.conf

通过日志信息,可以看到哨兵已经监测到了前面的主从集群

在这里插入图片描述

第五步:使用

手动尝试把8001master节点宕机,查看另外两个子节点是否可以异常恢复;

在这里插入图片描述

(8002端口Redis:可以发现,8002有关于8001、8003的请求同步日志,说明此时8002成为新的master节点)

在这里插入图片描述

(8003端口Redis:可以看到8001宕机后,8003连接数次失败后,转为连接8002,说明此时8002称为新的master节点)
在这里插入图片描述

查看哨兵日志,可以看到详细的日志记录,表明8001宕机后,8002称为了新的master节点;

(哨兵日志图片.png)

如果此时8001重新上线,将作为8002的子节点

在这里插入图片描述

小结

通过增加哨兵,可以解决单机Redis故障问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion学习笔记

一些零散笔记 批量化生产的时候推荐提高生成批次,不建议提高每批数量 灰常好的模型网站 LiblibAI哩布哩布AI-中国领先原创AI模型分享社区 出图效率倍增!47个高质量的 Stable Diffusion 常用模型推荐 - 优设网 - 学设计上优设 关键词Prompt顺序 画质…

16 | 视图:如何实现服务和数据在微服务各层的协作?

目录 服务的协作 1. 服务的类型 2. 服务的调用 微服务内跨层 微服务之间的服务调用 领域事件驱动 3. 服务的封装与组合 基础层 领域层 应用层 用户接口层 4. 两种分层架构的服务依赖关系 松散分层架构的服务依赖 严格分层架构的服务依赖 数据对象视图 基础层 领…

Hugging Face开源库accelerate详解

官网:https://huggingface.co/docs/accelerate/package_reference/accelerator Accelerate使用步骤 初始化accelerate对象accelerator Accelerator()调用prepare方法对model、dataloader、optimizer、lr_schedluer进行预处理删除掉代码中关于gpu的操作&#xff0…

【Zookeeper】

目录 一、Zookeeper 概述1、Zookeeper 定义2、Zookeeper 工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制 二、部署 Zookeeper 集群1.安装前准备1、关闭防火墙2、安装 JDK3、下载安装包 2.安装 Zookeeper1、修改配置文件2、拷贝配置…

CMU 15-445 -- Query Optimization - 10

CMU 15-445 -- Query Optimization - 10 引言Query Optimization TechniquesQuery RewritingPredicate PushdownProjections Pushdown Cost-based SearchCost EstimationStatisticsEquality PredicateRange PredicateNegation QueryConjunction QueryDisjunction QueryJoins直方…

6.6Jmeter远程调度Linux机器Jmeter测试

1、配置Agent和启动 1.1、打开jmeter/bin目录下的jmeter.properties 1、server_port1099取消注释 2、remote_hosts127.0.0.1 改为remote_hosts127.0.0.1:1099 或者是remote_hostsAgent机的ip:1099 3、server.rmi.localport1099 4、server.rmi.ssl.disablefalse改为true&#x…

AtcoderABC245场

A - Good morningA - Good morning 题目大意 给定Takahashi和Aoki的起床时间,判断谁先起床。 思路分析 题目要求比较Takahashi和Aoki的起床时间。首先,将起床时间转换为以分钟为单位。然后,通过比较两者的起床时间来确定谁先起床。 时间复…

30,queue容器

30.1queue基本概念 概念:queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口 队列容器允许从一端新增元素,从另一端移除元素,队列queue符合先进先出 队列中只有对头和队尾才可以被外界使用,因此队…

HarmonyOS应用开发-第一章-DevEco Studio的安装

一、前言 本栏可以帮助正在学习HarmonyOS应用开发的开发者快速上手和掌握。 二、安装步骤 首先下载DevEco Studio(HarmonyOS应用的集成开发境),点击:IDE下载页面,点击立即下载。 下载完成后,双击运行安装程…

IntelliJ IDEA 忽略Git提交

在项目下新建 .gitignore 文件 在 .gitignore 文件写入以下内容,从上图可以看到,忽略提交的这些目录/文件变成了黄色

Java8 stream toMap、groupingBy、mapping的综合应用

文章目录 一、stream toMap、groupingBy、mapping的综合应用1、前提准备①、实体类②、数据准备 2、核心代码:3、运行结果 一、stream toMap、groupingBy、mapping的综合应用 1、前提准备 ①、实体类 package com.cfay.demo;import lombok.AllArgsConstructor; i…

中间件上云部署 zookeeper

中间件上云部署 zookeeper 企业级中间件上云部署 zookeeper一、环境说明二、zookeeper部署YAML资源清单准备三、zookeeper部署及部署验证四、zookeeper应用验证 企业级中间件上云部署 zookeeper 一、环境说明 storageclassingress 二、zookeeper部署YAML资源清单准备 # vim…

【Spring】Spring AOP入门及实现原理剖析

文章目录 1 初探Aop1.1 何为AOP?1.2 AOP的组成1.2.1 切面(Aspect)1.2.2 连接点(Join Point)1.2.3 切点(Pointcut)1.2.4 通知(Advice) 1.3 AOP的使用场景 2 Spring AOP入门2.1 添加 Spring AOP 框架⽀持2.2 定义切面和切点2.3 定义相关通知 3 Spring AOP实现原理3.1 …

pyqt 使用pixmap展示图片时候出现失真(图片偏移)

像上图上面的情况, 都是经过放大、旋转等操作,展示图片的时候出现失真的情况 一般都是显卡的问题 需要在qimage转pixmap时,添加部分参数 修改办法: 原本是: pixMap QImage(self.pic_image, width, height, QImage…

iOS APP外包开发的语言比较

iOS APP是Apple公司运行在iPhone手机上的APP,开发这样的APP有两种开发语言可以选择,都是由Apple公司提供的语言。其中Objective-C使用时间相对较长,有历史兼容考虑,而Swift是新的开发语言,更符合近些年开发语言的发展理…

基于单片机水质检测系统的设计与实现

功能介绍 以STM32单片机作为主控系统;液晶显示当前参数;PH模块采集当前水质PH酸碱度;DS18B20温度传感器采集当前水体温度;TDS传感器采集当前水体TDS值;浊度传感器采集当前水体浑浊度;按键设置PH、温度、TDS…

unity02 物体运动

旋转,增量旋转,默认增量为15度 ctrl拖拽物体旋转 设置增量旋转角度大小 edit–>grid and snap settings privot 轴心坐标系(中心坐标系)默认 local 世界坐标系(局部坐标系) ctrlD复制物体 物体激活&…

【golang】12、gin 源码解析

文章目录 快速使用返回响应路由匹配pathqueryMultipart/Urlencoded Form 解析请求MultipartFrom MiddleWare github.com/gin-gonic/gin 是 golang 的 web 框架,其用字典树做路由匹配、支持中间件,本文介绍其源码实现。 快速使用 package mainimport (&…

Spring-AOP(面向切面)

Spring-AOP(面向切面) 场景模拟(计算器) 功能接口 public interface Calculator {int add(int i, int j);int minus(int i, int j);int multiply(int i, int j);int div(int i, int j); }实现类 public class CalculateLogImpl implements Calculator {Overridepublic int …

ELK-日志服务【kafka-配置使用】

kafka-01 10.0.0.21 kafka-02 10.0.0.22 kafka-03 10.0.0.23 【1】安装zk集群、配置 [rootes-01 ~]# yum -y install java maven [rootes-01 ~]# tar xf apache-zookeeper-3.5.9-bin.tar.gz -C /opt/[rootes-01 ~]# cd /opt/apache-zookeeper-3.5.9-bin/conf/ [rootes-…