Redis——集群环境部署

一般情况下的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.mzph.cn/news/677408.shtml

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

相关文章

统一身份认证系统架构设计与实践总结

随着互联网的快速发展和应用的普及,人们在各个网站和应用上需要不同的账号和密码进行身份认证。为了解决这个问题,统一身份认证系统应运而生。本文将总结统一身份认证系统的架构设计与实践经验,帮助读者了解如何设计和实现一个高效、安全的统…

〖大前端 - ES6篇②〗- let和const

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司…

python实现基数排序

如果在给不同的整形数组排序的时候,一般会这样做,也就是先看最高位,如果最高位数值大的话也就意味着它的数值是最大的,而如果两个数字的最高位的数值是一样的,则继续比较次高位,这样依次去比较可以决定数字的排序。而对于基数排序来说,其思想是与以上的思想是不同的,基…

C++类型转化cast from pointer to smaller type ‘int‘ loses information

代码如下 #include <iostream>int main() {int a 10;std::cout << (int)&a << std::endl;return 0; }编译 这段代码是要将地址转化成整数类型&#xff0c;但是在编译时编译器告诉我们这是错的&#xff0c;因为在C中&#xff0c;将指针转换为int类型的…

Spring IoC容器详解

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本概念 Spring IoC容器是Spring框架的核心组件&#xff0c;它实现了控制反转&#xff08;Inversion of Control&#xff0c;IoC&#xff09;的设计原则。IoC是一种编程思…

【前端高频面试题--TypeScript篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;前端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 高频前端面试题--Vue3.0篇 什么是TypeScript&#xff1f;TypeScript数据类型TypeScript中命名空…

Days 27 ElfBoard 板 AltiumDesigner 相同电路快速布局布线

在进行设计开发的时候&#xff0c;总会遇到相同的电路&#xff0c;或者模块&#xff0c;这些电路可以使用相同的布局和走线&#xff0c;例如 DC-DC 电源、网口 PHY 电路部分。这类型的电路&#xff0c;我们可以采用AltiumDesigner 中的 Room 进行布局和布线的快速复制&#xff…

VitePress-12-markdown中使用vue的语法

前言 VitePress 中&#xff0c;markdown文档最终都会转换成为 html文件&#xff0c;我们在访问的时候&#xff0c;也是直接访问的 xxx.html 文件。而且&#xff0c;markdown文档会被作为 [vue单文件] 进行处理&#xff0c;因此&#xff0c;我们我们可以在文档中使用 vue 语法&…

决策树之scikit-learn

实例 from sklearn.datasets import load_iris from sklearn import tree import matplotlib.pyplot as plt# Load iris dataset iris load_iris() X, y iris.data, iris.target# Fit the classifier clf tree.DecisionTreeClassifier() clf clf.fit(X, y)# Plot the deci…

详细介绍Python网络编程模块

根据前面对网络分层棋型的介绍&#xff0c;我们知道实际的网络模型大致分为四层&#xff0c;这四层各有对应的网络协议提供支持&#xff0c; 网络层协议主要是 IP&#xff0c;它是所有互联网协议的基础&#xff0c;其中 ICMP&#xff08;Internet Control Message Protocol&…

烟雨要饭网带后台,附带搭建教程

直接上传访问即可&#xff0c;有安装向导&#xff0c;php环境不得低于7.0 后台地址/Admin&#xff0c;默认账号admin 默认密码123456 自带乞讨音乐&#xff0c;增加樱花特效

域内NAT:如何让内网client通过公网地址访问内网server?

第一步&#xff0c;实现任意公网用户访问内网server。按教育网规矩&#xff0c;公网过来的流量要访问校内网的server必须从教育专线&#xff08;路由器接口G0/0/1)进入。 第二步&#xff0c;实现内网主机通过公网地址210.43.2.3能够访问内网server192.168.1.2&#xff0c;图中①…

C++ 类和对象篇(九) 初始化列表

目录 一、什么是初始化列表&#xff1f; 二、为什么需要初始化列表&#xff1f; 三、初始化列表怎么使用&#xff1f; 3.1 在构造函数中使用初始化列表 3.2 注意 3.3 结论 3.4 应用场景 四、初始化列表的初始化顺序 五、另一种初始化成员变量的方法 【总结 一、什么是初始化列…

【计算机网络】时延,丢包,吞吐量(分组交换网络

时延 结点处理时延(nodal processing delay&#xff09; dproc 排队时延&#xff08;queuing delay&#xff09; dqueue 传输时延&#xff08;transmission delay&#xff09; dtrans 路由器将分组推出所需要的时间&#xff0c;是分组长度和链路传输速率的函数 传播时…

【深蓝学院】移动机器人运动规划--第4章 动力学约束下的运动规划--笔记

0. Outline 1. Introduction 什么是kinodynamic&#xff1f; 运动学&#xff08;Kinematics&#xff09;和动力学&#xff08;Dynamics&#xff09;都是力学的分支&#xff0c;涉及物体的运动&#xff0c;但它们研究的焦点不同。 运动学专注于描述物体的运动&#xff0c;而…

CS50x 2024 - Lecture 3 - Algorithms

TABLE OF CONTENTS 00:00:00 - Introduction 一种统计班上人数的方法&#xff0c;全部站起来&#xff0c;两两配对&#xff0c;一个坐下&#xff0c;循环 00:01:01 - Overview 00:02:58 - Attendance 00:09:40 - Linear Search 00:24:58 - Binary Search 二分搜索 分而治…

018 Linux

文章目录 操作系统定义分类Linux系统构成 Linux文件系统Linux常用命令基础操作命令文件操作压缩解压权限管理显示展示命令其他命令 vi编译器操作使用 添加用户基本概念用户管理命令 ubuntu软件安装ssh服务终端启动Python服务 操作系统 定义 操作系统是管理计算机硬件与软件资…

政安晨:示例演绎机器学习中(深度学习)神经网络的数学基础——快速理解核心概念(二){两篇文章讲清楚}

这一篇与上一篇是兄弟篇&#xff0c;意在通过两篇文章讲清楚深度学习中神经网络的数学基础&#xff0c;第一次看到这篇文章的小伙伴可以从上一篇文章看起&#xff08;包括搭建环境等等都在上一篇&#xff09;&#xff0c;上一篇链接如下&#xff1a; 政安晨&#xff1a;示例演…

机器学习系列——(十八)K-means聚类

引言 在众多机器学习技术中&#xff0c;K-means聚类以其简洁高效著称&#xff0c;成为了数据分析师和算法工程师手中的利器。无论是在市场细分、社交网络分析&#xff0c;还是图像处理等领域&#xff0c;K-means都扮演着至关重要的角色。本文旨在深入解析K-means聚类的原理、实…

Bean 的作用域

Bean 的作用域种类 在 Spring 中⽀持 6 种作⽤域&#xff0c;后 4 种在 Spring MVC 环境才⽣效 1. singleton&#xff1a;单例作⽤域 2. prototype&#xff1a;原型作⽤域&#xff08;多例作⽤域&#xff09; 3. request&#xff1a;请求作⽤域 4. session&#xff1a;会话作⽤…