从零开始学架构——高可用存储架构

news2024/10/7 13:23:58

双机架构

存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进行思考和分析:
数据如何复制?
各个节点的职责是什么?
如何应对复制延迟?
如何应对复制中断?
常见的高可用存储架构有主备、主从、主主、集群、分区。

主备复制

主备复制是最常见也是最简单的一种存储高可用方案,几乎所有的存储系统都提供了主备复制的功能,例如 MySQL、Redis、MongoDB 等。

  1. 基本实现

下面是标准的主备方案结构图:
在这里插入图片描述

  1. 优缺点分析
  • 优点:
    1、无须感知备机存在;
    2、对于主备,双方只需要进行数据复制即可,无须进行状态判断和主备切换操作;

  • 缺点:
    1、备机仅仅只为备份,并没有提供读写操作;
    2、故障后需要人工干预,无法自动恢复;

  • 使用场景:
    内部的后台管理系统使用主备复制架构的情况会比较多,例如学生管理系统、员工管理系统、假期管理系统等,因为这类系统的数据变更频率低,即使在某些场景下丢失数据,也可以通过人工的方式补全

主从复制

主机负责读写操作,从机只负责读操作,不负责写操作。

  1. 基本实现

下面是标准的主从复制架构:
在这里插入图片描述

  1. 优缺点分析
  • 优点:
    1、主从复制在主机故障时,读操作相关的业务可以继续运行;
    2、主从复制架构的从机提供读操作,发挥了硬件的性能;

  • 缺点:
    1、客户端需要感知主从关系,并将不同的操作发给不同的机器进行处理;
    2、如果主从复制延迟比较大,业务会因为数据不一致出现问题;
    3、故障时需要人工干预;

  • 使用场景:
    写少读多的业务场景使用主从复制架构较多。如,论坛,BBS、新闻网站等,读操作数量是写操作数量的10倍甚至100倍以上。

双机切换

主备复制和主从复制方案存在两个共性的问题:

  • 1、主机故障后,无法进行写操作;
  • 2、如果主机无法恢复,需要人工指定新的主机角色;

双机切换就是为了解决这两个问题而产生的,包括主备切换和主从切换两种方案。简单来说,这两个方案就是在原有方案的基础上增加“切换”功能,即系统自动决定主机角色,并完成角色切换。

要实现一个完善的切换方案,必须考虑这几个关键的设计点:

主备间状态判断

  • 状态传递的渠道:是相互间互相连接,还是第三方仲裁?
  • 状态检测的内容:例如机器是否掉电、进程是否存在、响应是否缓慢等。

切换决策

  • 切换时机:什么情况下备机应该升级为主机?是机器掉电后备机才升级,还是主机上的进程不存在就升级,还是主机响应时间超过2秒就升级,还是3分钟内主机连续重启3次就升级等。
  • 切换策略:原来的主机故障恢复后,要再次切换,确保原来的主机继续做主机,还是原来的主机故障恢复后自动成为新的备机?
  • 自动程度:切换是完全自动还是半自动的?

数据冲突解决
当原有故障的主机恢复后,新旧主机之间可能存在数据冲突。例如,用户在旧主机上新增了一条ID为100的数据,这个数据还没有复制到旧的备机,此时发生切换,用户又在新的主机新增了一条ID为100的数据,当旧的故障主机恢复后,这两条ID重复的数据如何处理。

根据状态传递渠道的不同,常见的主备切换架构有三种形式:互连式、中介式和模拟式。

互连式

互连式是指主备机直接建立状态传递的渠道,存在状态传递通道故障的问题
在这里插入图片描述
可以是主机发送状态给备机,也可以是备机到主机来获取状态信息。
可以和数据复制通道共用,也可以独立一条通道。
为了充分利用切换方案能够自动决定主机这个优势,客户端也会有一些相应的改变,常见方式如下:
1、为了切换后不影响客户端的访问,主机和备机之间共享一个对客户端来说唯一的地址。例如虚拟 IP,主机需要绑定这个虚拟的 IP。
2、客户端同时记录主备机的地址;
3、备机虽然能收到客户端的操作请求,但是会直接拒绝,拒绝的原因就是“备机不对外提供服务”;

互连式缺点:
1、状态传递的通道故障时,可能导致备机也认为主机故障了从而升级为主机,导致出现两个主机;
2、如果增加多个通道增强状态传递的可靠性,只是降低通道故障概率,不能根本解决这个缺点,并且通道越多状态决策越复杂。

中介式

中介式指的是在主备两者之外引入第三方中介,主备机之间不直接连接,而都去连接中介,并且通过中介来传递状态信息
在这里插入图片描述

虽然中介式在状态传递和状态决策上更加简单,但存在如何保证中介本身的高可用问题。如果中介自己宕机了,整个系统就进入了双备的状态,写操作相关的业务就不可用了。

MongoDB的Replica Set采取的就是中介式,架构图如下,
在这里插入图片描述

  • MongoDB(M),主节点:存储数据
  • MongoDB(S):备节点:存储数据
  • MongoDB(A):仲裁节点:不存储数据
    客户端连接主备节点。

开源方案已经有比较成熟的中介式解决方案,例如 ZooKeeper 和 Keepalived。ZooKeeper 本身已经实现了高可用集群架构,因此已经帮我们解决了中介本身的可靠性问题,在工程实践中推荐基于 ZooKeeper 搭建中介式切换架构。

模拟式

模拟式指主备机之间并不传递任何状态数据,而是备机模拟成一个客户端,向主机发起模拟的读写操作,根据读写操作的响应情况来判断主机的状态。
在这里插入图片描述

模拟式切换与互连式切换相比,优点是实现更加简单,因为省去了状态传递通道的建立和管理工作。

简单既是优点,同时也是缺点。因为模拟式读写操作获取的状态信息只有响应信息(例如,HTTP 404,超时、响应时间超过 3 秒等),没有互连式那样多样(除了响应信息,还可以包含 CPU 负载、I/O 负载、吞吐量、响应时间等),基于有限的状态来做状态决策,可能出现偏差。

主主复制

主主复制指的是两台机器都是主机,互相将数据复制给对方,客户端可以任意挑选其中一台机器进行读写操作

在这里插入图片描述

主主复制从总体上来看要简单很多,无须状态信息传递,也无须状态决策和状态切换,但是其对使用场景有限制,如果采取主主复制架构,必须保证数据能够双向复制,而很多数据是不能双向复制的。例如:

用户注册后生成的用户 ID,如果按照数字增长,那就不能双向复制,否则就会出现多台主机出现同一ID;
库存不能双向复制,一台主机减了,另一台主机也减了,复制后被覆盖掉;
因此,主主复制架构对数据的设计有严格的要求,一般适合于那些临时性、可丢失、可覆盖的数据场景。例如,用户登录产生的 session 数据(可以重新登录生成)、用户行为的日志数据(可以丢失)、论坛的草稿数据(可以丢失)等。

集群和分区

数据集群

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

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

相关文章

【MySQL】一个脚本启动MySQL 8.0并初始化数据库

引 很多情况下需要在客户端发布时发布 MySQL 数据库,这种发布方式虽然存在文件资源较大、易出错等缺点,但是却可以让桌面产品的发布更加完整。 本文将阐述如何使用一个脚本启动并初始化 MySQL 8.0 的方法,涵盖数据库下载、脚本源码、测试及…

PFSK162 3BSE015088R1通常都要做空载全电压合闸冲击试验

​ PFSK162 3BSE015088R1通常都要做空载全电压合闸冲击试验 变压器励磁涌流影响的保护整定 摘要:在大型变压器空栽冲击过程中,由于励磁涌流和负序电压的存在,如果定值整定不得当,会导致差动保护,复压过流保护等误动作&…

设计模式——组件协作模式之观察者模式

文章目录 前言一、“组件协作” 模式二、Observer 观察者模式1、动机2、模式定义3、伪代码示例①、第一种方案,最朴素的方式②、第二种方案,重构使得遵循DIP原则:③、进一步的小优化:④、修改使得支持多个观察者: 4、结…

028:Mapbox GL 绘制线段,实时测量长度距离值

第028个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加draw组件,绘制线段,编辑线段,实时显示长度值。这里使用turf来计算长度值,采用默认的单位千米。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代…

Elasticsearch:Standard Text Analyzer - 标准文本分析器

Elasticsearch 提供了超过很多开箱即用的分析器,我们可以在文本分析阶段使用它们。 这些分析器很可能足以满足基本情况,但如果需要创建自定义分析器,可以通过使用构成该模块的所需组件实例化一个新的分析器模块来实现。 下表列出了 Elasticse…

SuSE linux server 11通过SAP来安装oracle11g

这里安装通过xmanager4进行安装,之前文章已经说了怎么通过xmanager4来连接linux系统,这里说一下安装oracle11g。 我这里是通过sap来安装oracle11g,所以需要 export LD_LIBRARY_PATH/oracle/P90/112_64/lib/:/sapmnt/P90/exe/ 同时在orap90用…

Mac使用命令行工具解压和压缩rar文件

目前在Mac电脑里支持解压缩的格式主要有:zip、gz等,但是还不支持rar格式的文件,接下来带着大家学习一下如何解压缩rar格式文件。 1.下载rar工具 打开:https://www.rarlab.com/download.htm 根据自己电脑的芯片要求选择自己的安装…

马云的创业故事及他人生中的摆渡人-卖掉中国黄页去北漂(四)

马云上京,是在外经贸部一位名叫王建国的朋友牵线之下,受邀担任外经贸部下属的中国国际电子商务中心(下面简称EDI)总经理,负责搭建外经贸部官网和网上中国商品交易市场。 马云团队在潘家园租了房子,白天上班…

如何编写高质量代码、提高编程效率?

一、 前言 高质量代码是指在满足功能需求的基础上,具备高性能、安全、可扩展、易维护、可测试等特点的代码。它不仅可以提高开发效率和代码质量,更能有效减少代码维护成本,促进团队协作和项目成功。因此,编写高质量代码对程序员来…

妙记多「我的主页」升级,日历聚合任务待办,为你打造个人时间管理系统⏰

我们应该如何处理“日程”和“待办”的关系? 日程和待办的区别与联系 从字面意义上来理解,日程是这一天的安排,待办是需要去完成的事情,日程与待办本质上是一种相互包含的关系。将所有事情都视作待办显然是不科学的,那…

二叉树的非递归遍历

目录 前言: 一:前序遍历 二:中序遍历 三:后序遍历 四:层序遍历 前言: 二叉树的非递归遍历需要借助栈和队列以及二叉树的一些基础接口,这些在之前的文章中有讲过,这里就不赘述&…

SSD目标检测

数据集以及锚框的处理 数据集: 图像:(batch_size , channel , height , width) bounding box: (batch_size , m , 5) m: 图像中可能出现的最多边界框的数目 5: 第一个数据为边界框对应的种…

tongweb

13051667606 东方通产品介绍 产品兼容 硬件要求 安装 安装目录结构 启动tongweb 停止tongweb bin下常用命令 企业版管理控制台 文档:产品简介及安装指南 绿色版直接解压安装 tar -zxvf …tar.gz Tongweb的配置文件 在conf的tongweb.xml 修改端口等信息 通过页面…

第四章 Unity工程和相机介绍

在上面的章节中,我们创建了一个“New Unity Project”工程,并保存到了“E:\workspace”工作空间下。那么,我就先看看这个工程的文件结构(E:\workspace\ New Unity Project)。 接下来,我们简单介绍一下这些目…

【老王读SpringMVC-3】根据 url 是如何找到 controller method 的?

前面分析了 request 与 handler method 映射关系的注册,现在再来分析一下 SpringMVC 是如何根据 request 来获取对应的 handler method 的? 可能有人会说,既然已经将 request 与 handler method 映射关系注册保存在了 AbstractHandlerMethodMapping.Ma…

Python 二进制 八进制 十进制 十六进制之间的转换

众所周知:计算机底层是以二进制数来进行存储计算,而计算机进制:数制是用一组固定的符号和统一的规则来表示数值的方法。 开始下面讲述之前首先要声明: 二进制,八进制,十六进制 都可以转换为十进制&#xf…

【DRF配置管理】如何在视图类使用get_objects()

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 DRF应用和管理 【DRF配置管理】Django使用DRF框架 【DRF配置管理】如何在视图类配置参数(一) 【DRF配置管理】如何在视图类配置参数(二) 【DRF配置管理…

第二届广州·琶洲算法大赛启动,百度飞桨助力广州打造中国算法新高地

‍‍ 生成式人工智能热潮席卷全球,算法创新成为 AI 突破发展的关键,推动实体经济高质量增长。4月25日,第二届广州琶洲算法大赛正式启动,广州市政府主办、百度飞桨等联合承办,广召天下算法英雄,加快“琶洲算…

<网络编程>网络套接字

目录 理解源IP地址和目的IP地址 认识端口号 端口号和进程ID的关系 理解源端口号和目的端口号 初步认识TCP、UDP协议 TCP协议 UDP协议 网络字节序列 socket网络接口 socket常见API sockaddr结构 UDPsocket 编码: 理解源IP地址和目的IP地址 源IP&#xf…

服装店铺装修有哪些窍门?做好这3点,顾客主动上门

现在街边有各种各样的服装店,有的服装店客流不断,有的服装店却很冷清,导致这种现象的原因有很多,比较重要的一点就是你的服装店铺装修没做好。 你的服装店铺装修足够吸引人吗? 什么样的服装店铺装修才能吸引顾客&#…