Redis 进阶 -- 搭建主从复制及哨兵模式集群

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis 进阶 -- 搭建主从复制及哨兵模式集群
📢📢📢📣📣📣

哈喽!大家好,我是【 Bug 终结者,【CSDN新星创作者】🏆,阿里云技术博主🏆,51CTO人气博主🏆,INfoQ写作专家🏆 <br/>
一位上进心十足,拥有极强学习力的【 Java领域博主】😜😜😜 <br/>
🏅【Bug 终结者】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。 偶尔会分享些前端基础知识,会更新实战项目,面向企业级开发应用
🏅 如果有对【后端技术】、【前端领域】感兴趣的【小可爱】,欢迎关注【Bug 终结者】💞💞💞


❤️❤️❤️ 感谢各位大可爱小可爱! ❤️❤️❤️

在这里插入图片描述

@[TOC]

📜系列文章

🚀 **[3分钟搞懂阿里云服务器部署Reids并整合Spring Boot
](https://blog.csdn.net/weixin_45526437/article/details/123901841)**

一、什么是主从复制?

主从复制,是指将一台Redis服务器的数据 ,复制到其他的Redis服务器I前者称为主节点(master/leader),
后者称为从节点(slave/follower)数据的复制是单向的,只能由主节点到从节点,Master以写为主, Slave
以读为主。

❇️主从复制的作用

  • 读写分离主节点写从节点读提高服务器的读写负载能力
  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的
    冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写
    Redis数据时应用连接主节点,读Redis数据时应用连接从节点) , 分担服务器负载;尤其是在写少读多
    的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis
    高可用的基础。

主从复制可以提高程序的性能,增加系统的可用性!

✅主从复制流程图

注意:主节点可写可读,从节点只能读取数据!

在这里插入图片描述

主节点挂掉后,从节点可以通过命令行的方式谋权篡位直接称王,从而当上主节点!

二、为什么要搭建集群?

在真实项目开发中,仅仅使用一台单机Redis是万万不行的,数据量会很,所以说以搭建集群的方式来缓解服务器的压力,从而实现系统的高可用性提高并发能力!

结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G ,也不能将所有内存用作Redis存储内存, 一般来说 ,单台Redis最大使用内存不应该超过20G。电商网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是"多读少写"

均匀分配服务器的读写压力,从而提高系统的并发能力,提高可用性!

三、搭建主从复制集群

⏰环境准备

进入redis 配置文件目录

cd /usr/local/redis/redis-5.0.7/bin/conf

复制3份配置文件,并修改文件内容

cp redis.conf redis79.conf 
cp redis.conf redis80.conf
cp redis.conf redis81.conf

查看配置文件

ll

在这里插入图片描述

修改配置文件信息
  1. 修改 端口号
  2. 修改 pid
  3. 修改log文件
  4. 修改dump文件
连接集群

新开3个链接启动集群,回到bin目录

cd ..

./redis-server /config/redis79.conf

./redis-cli -p 6379    # 启动客户端并监听6379端口

# 新开连接
cd /usr/local/redis/redis-5.0.7/bin

./redis-server /config/redis80.conf

./redis-cli -p 6380    # 启动客户端并监听6379端口

# 新开连接
cd /usr/local/redis/redis-5.0.7/bin

./redis-server /config/redis81.conf

./redis-cli -p 6381    # 启动客户端并监听6379端口
在监听端口的客户端输入命令查看信息
info replication    # 查看信息,为主机或从机

在这里插入图片描述

默认都是主机,我们修改 其它两个机为从机

修改端口为6380为从机,并连接主机6379

在这里插入图片描述

修改端口为6381为从机,并连接主机6379

在这里插入图片描述

回到主机6379查看信息

在这里插入图片描述

♻️测试集群

测试主从复制集群

在6379主机存入一个key-value,其它从机都可以读到响应的key

在这里插入图片描述

从机读取key

在这里插入图片描述

如果从机要设置key,那么是不可以设置的,从机只能读取主机的key

在这里插入图片描述

假设主机6379宕机了,那么其它从机依然连接着主机6379,直至等到主机恢复

这样可不行,如果一直不恢复,会影响系统的可用性!为解决此问题,我们可以手动设置一个从机为主机,也可以通过哨兵模式自动选举主机

首先需要将6381从机连接上6380主机,这样形成链表得方式,以防一个主机挂掉,还可以快速恢复另一个从机为主机,从而保证数据得完整性

手动设置主机

SLAVEOF no one

在这里插入图片描述

这样6380端口就成了新的主机,可以进行添加数据和获取数据

四、什么是哨兵模式?

Sentinel(哨兵模式)是 Redis的高可用性解决方案:由 一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时, 自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器 代替已下线的主服务器继续处理命令请求。

在这里插入图片描述

五、哨兵模式的优缺点

优点

  • 哨兵集群,基于主从复制模式,所有的主从配置优点,它都有
  • 主从可以切换,故障可以转移高可用性的系统
  • 哨兵模式就是主从模式的升级,手动到自动,更加健壮

缺点

  • Redis 不好在线扩容,集群容量一旦到达上限,在线扩容就十分麻烦
  • 实现哨兵模式的配置很麻烦,配置复杂

哨兵模式是主从复制模式的升级,根据心跳机制可自动检测服务是否在线,从而切换主机,来保证服务的可用性与健壮性

六、搭建哨兵模式集群

⛽搭建集群

在这里启动上面的一主二从,启动3个redis端口,一个主机,二个从机

新建 哨兵配置文件 sentinel.conf 写入配置
# 进入配置文件目录
cd /usr/local/redis/redis-5.0.7/bin/config

# 新建哨兵配置文件
vim sentinel.conf

写入如下配置

# 监控本地端口为6379 作为主机,投票+1
sentinel monitor myredis 127.0.0.1 6379 1

启动哨兵监控

# 退回 bin 目录
cd ..
#启动哨兵模式
./redis-sentinel config/sentinel.conf

在这里插入图片描述

✳️测试集群

成功启动哨兵集群后,将主机服务停止,模拟宕机,观测哨兵模式的分配主机

shutdown # 停止6379主机

等一小会哨兵检测到主机下线,则会分配新的主机上位

在这里插入图片描述

去查看端口为6381的详细信息,可以发现,6380自动连接上了6381主机

在这里插入图片描述

再次将6379主机恢复,查看该服务变化,哨兵模式会将6379直接变为从机,并连接6381主机

查看端口为6379的信息

在这里插入图片描述

再次查看6381的信息

在这里插入图片描述

至此,哨兵模式自动分配主机模式完结!

♨️往期精彩热文回顾

✈️ **[3分钟带你搞懂Vue双向绑定原理及问题剖析
](https://blog.csdn.net/weixin_45526437/article/details/123524699)**
✈️ **[Netty进阶 -- WebSocket长连接开发
](https://blog.csdn.net/weixin_45526437/article/details/123351605?spm=1001.2014.3001.5502)**
✈️ **[Netty进阶 -- 非阻塞网络编程 实现群聊+私聊+心跳检测系统
](https://blog.csdn.net/weixin_45526437/article/details/123197281?spm=1001.2014.3001.5502)**

✈️ **[Postman测试工具调试接口详细教程【向后端发送Json数据并接收返回的Json结果】
](https://blog.csdn.net/weixin_45526437/article/details/121317623)**

✈️ **[Java面向对象 --- 吃货联盟订餐系统(完整版)
](https://blog.csdn.net/weixin_45526437/article/details/114370404)**
✈️ **[一分钟教你快速 搭建Vue脚手架(Vue-Cli)项目并整合ElementUI
](https://blog.csdn.net/weixin_45526437/article/details/123247055?spm=1001.2014.3001.5502)**

⛵小结

以上就是【Bug 终结者】对Redis 进阶 -- 搭建主从复制及哨兵模式集群简单的概述,主从复制,哨兵模式搭建集群是企业中必不可少的技术,在高并发情况下可以均匀的分配请求数量,能够承受更加强的并发能力,搭建集群不要想的很难,其实不难,认真去思考,并去实践,终究会学会的,加油~

如果这篇【文章】有帮助到你,希望可以给【 Bug 终结者】点个赞👍,创作不易,如果有对【 后端技术】、【 前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【 Bug 终结者】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
23天前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
35 5
|
4月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
169 0
|
2月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
45 3
|
3月前
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。
|
4月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
154 0
|
7天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
128 85
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
84 6
|
4天前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
1月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
1月前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构