Redis——集群环境部署

news2025/1/19 2:35:42

一般情况下的Redis,我们都是在一台服务器上进行操作的,也就是说读、写以及备份操作都是在一台Redis服务器上进行的。随着项目访问量的增加,对Redis服务器的操作也更加频繁,虽然Redis读写速度都很快,但是一定程度上也会造成一定的延时。为了解决访问量大的问题,通常会采取的一种方式是主从(Master-Slave)复制。Master以写为主,Slave以读为主,Master更新后根据配置自动同步到Slave。本节中Master表示主节点,Slave表示从节点,以后不再赘述。

主要介绍Redis集群环境部署,讲解主从复制、哨兵模式和Redis集群。

1、主从复制

主从复制也叫主从模式,当用户向Master写入数据时,Master通过Redis同步机制将数据文件发送至Slave,Slave也会通过Redis同步机制将数据文件发送至Master以确保数据一致,从而实现Redis的主从复制。如果Master和Slave之间的连接中断,Slave可以自动重连Master,但是连接成功后,将自动执行一次完全同步。

配置主从复制后,Master可以负责读写服务,Slave只负责读服务。Redis复制在Master这一端是非阻塞的,也就是说在和Slave同步数据的时候,Master仍然可以执行客户端的命令而不受其影响。

1.1、主从复制的特点

  • 同一个Master可以拥有多个Slave。
  • Master下的Slave还可以接受同一架构中其他Slave的连接与同步请求,实现数据的级联复制,即Master→Slave→Slave模式。
  • Master以非阻塞的方式同步数据至Slave,这将意味着Master会继续处理一个或多个Slave的读写请求。
  • 主从复制不会阻塞Master,当一个或多个Slave与Master进行初次同步数据时,Master可以继续处理客户端发来的请求。
  • 主从复制具有可扩展性,即多个Slave专门提供只读查询与数据的冗余,Master专门提供写操作。
  • 通过配置禁用Master数据持久化机制,将其数据持久化操作交给Slave完成,避免在Master中有独立的进程来完成此操作。

1.2、主从复制的优势

  • 避免Redis单点故障。
  • 做到读写分离,构建读写分离架构,满足读多写少的应用场景。

1.3、Redis主从复制原理

当启动一个Slave进程后,它会向Master发送一个SYNC命令,请求同步连接。无论是第一次连接还是重新连接,Master都会启动一个后台进程,将数据快照保存到数据文件中,同时Master会记录所有修改数据的命令并将其缓存在数据文件中。

后台进程完成缓存操作后,Master就发送数据文件给Slave,Slave将数据文件保存到硬盘上,然后将其加载到内存中。接着Master就会把所有修改数据的命令发送给Slave。

若Slave出现故障导致宕机,那么恢复正常后会自动重新连接。Master收到Slave的连接请求后,将其完整的数据文件发送给Slave。如果Mater同时收到多个Slave发来的同步请求,那么Master只会在后台启动一个进程保存数据文件,然后将其发送给所有的Slave,确保Slave正常。

Redis主从复制环境使用的服务器资源如下表所示,将Redis安装在3台服务器上,3台服务器的操作系统都是CentOS 7:
在这里插入图片描述

1.4、Redis主从复制安装过程

1.4.1、Master操作

在Redis主服务器上的redis.conf配置文件中修改bind字段,将以下内容:

bind 127.0.0.1

修改为Master的主机IP地址:

bind 127.0.0.1 192.168.11.10

如果Redis主服务器只绑定了127.0.0.1,那么跨服务器IP地址的访问就会失败,也就是只有本机才能访问,外部请求会被过滤,这是由Linux的网络安全策略管理的。如果绑定的IP地址只是192.168.11.10,那么本机通过localhost和127.0.0.1,或者直接输入命令redis-cli登录本机Redis就会失败。所以跨服务器访问Redis,需要加上服务器IP地址才能被访问。

运行Redis服务:

$ redis-server /usr/local/redis/conf/redis.conf

1.4.2、Slave1操作

修改Redis的配置文件:

$ vi /usr/local/redis/conf/redis.conf

添加Master的IP地址与端口:

slaveof 192.168.11.10 6379

添加Mater的IP地址和端口时,中间用空格分隔,然后保存redis.conf配置文件。

运行Slave1(192.168.11.11)的Redis:

$ redis-server /usr/local/redis/conf/redis.conf

查看Slave1运行日志,如下图所示:
在这里插入图片描述
查看Master运行日志,如下图所示:
在这里插入图片描述

1.4.3、Slave2操作

修改Redis的配置文件,添加Master的IP地址与端口:

$ vi /usr/local/redis/conf/redis.conf
slaveof 192.168.1.10 6379

添加Master的IP地址和端口时,中间用空格分隔,然后保存redis.conf配置文件。

运行Slave2(192.168.11.12)的Redis:

$ redis-server /usr/local/redis/conf/redis.conf

查看Slave2运行日志,如下图所示:
在这里插入图片描述
结果与Slave1类似,只不过Slave2与Slave1(192.168.11.11:6379)建立连接,在同步数据时,Redis的主从级联复制便是这样:Master→Slave1→Slave2。

2、哨兵模式

2.1、灾备切换Sentinel的使用

Redis 2.6中开始提供了哨兵模式,到Redis 2.8以后的版本中该模式正式稳定。哨兵(Sentinel)进程监控Redis集群中Master主服务器工作的状态,在Master发生故障的时候,可以实现Master和Slave的切换,保证系统的高可用性。哨兵模式的出现是为了解决主从复制的缺点,其架构如下图所示:
在这里插入图片描述

2.1.1、哨兵模式的基本概念

  • Master节点:主节点,Redis的主数据库,写入都在这个节点上。
  • Slave节点:从节点,Redis的从数据库,读取都在这个节点上。
  • Sentinel节点:哨兵节点,监控各个节点的状态。

基于哨兵模式的高可用架构如下图所示:
在这里插入图片描述
在这个架构中,复制主要是将主节点的数据同步到从节点,这样做主要有以下两个原因:

  • 一旦主节点宕机了,从节点可以作为主节点的备份随时成为新的主节点。
  • 从节点可以作为主节点分担读的压力。

2.1.2、哨兵进程的作用

  • 监控(Monitoring):哨兵进程会不断地检查Master和Slave是否运作正常。
  • 提醒(Notification):当被监控的某个节点出现问题时,哨兵进程可以通过API向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic Failover):当一个Master不能正常工作时,哨兵进程会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master,并让失效Master的其他Slave改为复制新的Master。当客户端试图连接失效的Master时,Redis集群也会向客户端返回新Master的地址,使得Redis集群可以使用现在的Master替换失效Master。Redis Sentinel故障转移架构如下图所示。
  • 配置提供者:在哨兵模式下,客户端在初始化时连接的是哨兵节点集合,从中获取主节点的信息。

在这里插入图片描述

2.1.3、部署技巧

  • 在生产环境中Sentinel节点不应该部署在一台物理“计算机”上。
  • 在生产环境中部署至少3个且奇数个Sentinel节点。

2.2、Redis Sentinel的安装与配置

我们配置一个(Master)和两个(Slave),并在一台服务器上部署Redis服务器和Sentinel实例。哨兵模式的实验环境如下表所示:
在这里插入图片描述
Redis Sentinel的主从架构如下图所示:
在这里插入图片描述

3、Redis集群

Redis集群是一个由多个主从节点组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群将所有数据存储区域划分为16384个槽(Slot),每个节点负责一部分槽,槽的信息存储于每个节点中。Redis集群要将每个节点设置成集群模式,它没有中心节点,可水平扩展,它的性能和高可用性均优于主从模式和哨兵模式,而且集群配置非常简单。Redis集群架构如下图所示:
在这里插入图片描述
从Redis集群架构中可以很容易地看出,首先将数据根据散列规则分配到6个槽中,然后根据循环冗余校验(Cyclic Redundancy Check,CRC)算法和取模算法将6个槽分别存储到3个不同的Master节点中,每个Master节点又配套部署了一个Slave节点,当一个Master节点出现问题后,Slave节点可以顶上。相较于哨兵模式,这种方案的优点在于提高了读写的并发率,分散了I/O,在保障高可用性的前提下提高了性能。

3.1、Redis集群环境

Redis集群在物理结构上是由集群上的多个节点构成的,这些节点分为两类,一类叫“主节点”,另一类叫“从节点”。
Redis集群节点要求如下:

  • 主节点不能少于总节点的一半。
  • 主节点至少要有3个。

一个Redis集群正常工作至少需要3个主节点且不能少于总节点的一半,本集群环境使用一台节点服务器,在这台服务器开启6个Redis实例,每个Redis实例占用一个端口,模拟3个主节点和3个从节点环境,组成一个Redis集群。本书使用一台服务器部署6个Redis实例,也可以多台服务器部署Redis集群,只修改Redis配置文件redis.conf的IP地址就可以了。本集群实验采用三主三从模式,每个主节点处理各自的数据,提供读写能力,每个从节点异步复制主节点的数据。Redis 5集群的实验环境如下表所示:
在这里插入图片描述

3.2、Redis集群搭建

创建的Redis集群信息:
在这里插入图片描述
Redis集群有三个主节点和三个从节点,一个主节点对应一个从节点,形成一对一的对应关系,如下图所示:
在这里插入图片描述

3.3、Redis集群代理

集群代理(Cluster Proxy)是Redis 6的新特性。Redis集群代理(Redis Cluster Proxy)允许Redis客户端不需要知道集群中的具体节点个数和主从身份,直接通过集群代理访问集群。对于客户端来说,通过集群代理访问集群就和访问单机的Redis服务器一样,可以解除很多集群的使用限制。Redis集群代理架构如下图所示:
在这里插入图片描述

Redis集群代理实验环境:
在这里插入图片描述

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

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

相关文章

基于BatchNorm的模型剪枝【详解+代码】

文章目录 1、BatchNorm(BN)2、L1与L2正则化2.1 L1与L2的导数及其应用2.2 论文核心点 3、模型剪枝的流程 ICCV经典论文,通俗易懂!论文题目:Learning Efficient Convolutional Networks through Network Slimming卷积后能…

GC调优工具

1、jstat 2、VisualVM GC tool插件 插件下载地址:https://blog.csdn.net/jushisi/article/details/109655175 3、Prometheus和Grafana监控

Xshell

更改背景颜色 多个会话同时执行命令 查看 -> 撰写 -> 撰写窗格

备战蓝桥杯---动态规划(基础3)

本专题主要介绍在求序列的经典问题上dp的应用。 我们上次用前缀和来解决,这次让我们用dp解决把 我们参考不下降子序列的思路,可以令f[i]为以i结尾的最大字段和,易得: f[i]max(a[i],a[i]f[i-1]); 下面是AC代码: #in…

Go 语言 for 的用法

For statements 本文简单翻译了 Go 语言中 for 的三种用法,可快速学习 Go 语言 for 的使用方法,希望本文能为你解开一些关于 for 的疑惑。详细内容可见文档 For statements。 For statements with single condition 在最简单的形式中,只要…

Redis -- 渐进式遍历

家,是心的方向。不论走多远,总有一盏灯为你留着。桌上的碗筷多了几双,笑声也多了几分温暖。家人团聚,是最美的风景线。时间:2024年 2月 8日 12:51:20 目录 前言 语法 示例 前言 试想一个场景,那就是在key非常多的…

【数据结构与算法-初学者指南】【附带力扣原题】队列

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘&am…

【项目问题解决】java. net.SocketException: Connection reset

目录 【项目问题解决】java. net.SocketException: Connection reset 1.问题描述2.问题原因3.解决思路4.解决方案5.总结6.参考 文章所属专区 项目问题解决 1.问题描述 通过JMeter 压测接口,无并发,无间歇时间跑接口10000次报错,后续改成建个…

云卷云舒:论超级数据库、算网数据库、智算数据库

笔者大胆提出一种“超级数据库”的概念设想。 一、超级能力 就像当初提出“超级计算机”一样,我们是否同样可以提出“超级数据库”的概念呢?当然不是不可以。 二、超级计算机 我们回忆一下“超级计算机”的发展之路,大致经过了如下几个环…

Swift Combine 管道 从入门到精通三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二 1. 用弹珠图描述管道 函数响应式编程的管道可能难以理解。 发布者生成和发送数据,操作符对该数据做出响应并有可能更改它,订阅者请求并接收这些数据。 这…

FPGA实现ISP用于无人车、无人机配送的方案调研

查到一个always 奥唯思公司做的用FPGA实现ISP的方案,采用易灵思钛金16nm的FPGA Ti60F225,通过MIPI CSI RX采集图像传感器的数据,在FPGA内部经过一系列复杂的ISP运算后,再通过MIPI CSI TX将图像数据发送给后端。 一套完整的ISP&a…

【前端】实现Vue组件页面跳转的多种方式

目录 前言1. 内嵌2. 跳转新页面2.1 Demo12.2 Demo22.3 Demo3 3. 拓展 前言 通过某个Button让页面多种方式跳转 1. 内嵌 想要在Vue应用中内嵌一个外部网页&#xff0c;可以使用<iframe>标签 下面是一个示例&#xff1a; <template><div><!-- 在这里嵌入…

C语言一招教你搞定所有基础函数知识(上)

1.前言 Hello&#xff0c;大家好&#xff0c;我是小陈&#xff0c;新年快乐呀&#xff01;马上就龙年了&#xff0c;今天是大年30&#xff0c;祝各位新的一年更上一层楼&#xff0c;今天小陈为大家带来了C语言的函数基础知识&#xff0c;希望大家仔细看完。 2.函数的概念 何…

数据库切片大对决:ShardingSphere与Mycat技术解析

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据库切片大对决&#xff1a;ShardingSphere与Mycat技术解析 前言ShardingSphere与Mycat简介工作原理对比功能特性对比 前言 在数据库的舞台上&#xff0c;有两位颇受欢迎的明星&#xff0c;它们分别…

Unity入门学习

目录 Unity环境搭建Unity引擎是什么软件下载和安装工程文件夹 Unity界面基础Scene场景和Hierarchy层级窗口Game游戏和Project工程Inspector和Console工具栏和父子关系 Unity工作原理反射机制和游戏场景预设体和资源包的导入导出 Unity脚本基础脚本基本规则生命周期函数Inspecto…

Aethir和Well-Link Tech携手革新云游戏,释放人工智能(AI)潜力

​Aethir将为Well-Link Tech的2亿用户提供先进的GPU计算能力&#xff0c;大幅提升他们的游戏体验。 新加坡&#xff0c;2024年2月7日 - 先驱性的去中心化GPU网络Aethir与实时云渲染技术领导者Well-Link Tech携手共创云游戏和元宇宙发展的新时代。 借助Well-Link Tech对领先游戏…

算法---回溯(正文)

1.什么是回溯&#xff1f; 回溯算法的定义就是和暴力枚举一样枚举所有可能并加撤回&#xff0c;也能和暴力一样去掉一些重复&#xff08;在之前就被筛出&#xff0c;但还要枚举这个&#xff0c;我们可以跳过这个了---------这个就是回溯剪枝&#xff09;。但为什么回溯不是暴力…

分享90个行业PPT,总有一款适合您

分享90个行业PPT&#xff0c;总有一款适合您 90个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/1bHvhk_42-IFAjNdjPPtMZw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

【蓝桥杯冲冲冲】Prime Gift

【蓝桥杯冲冲冲】Prime Gift 蓝桥杯备赛 | 洛谷做题打卡day31 文章目录 蓝桥杯备赛 | 洛谷做题打卡day31Prime Gift题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示题解代码我的一些话 Prime Gift 题面翻译 给你 n n n 个…

自适应二次元404页面源码

自适应二次元404页面源码&#xff0c;HTMLCSSJS,喜欢二次元的朋友可以下载使用 蓝奏云&#xff1a;https://wfr.lanzout.com/iuPNQ1ns7dxg