三高Mysql - 搭建“三高”架构之扩展与切换(下)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 三高Mysql - 搭建“三高”架构之扩展与切换(下)

切换



切换的核心是保业务还是保数据

如何进行身份切换:

  • 停止备库同步
  • 配置主库复制从库。
  • 复制是一种平级的关系,可以独立。

切换策略:

单纯从切换策略卡率我们可以看到存在下面的两种方式:

  • 可靠优先策略:意味着seconds_behind_master参数不能过大不能落后库太大。需要把A库切换为只读的形式,这时候业务只能读取不新增数据,当seconds_behind_master=0的时候意味着两个库同步。此时A库停止,B库停止复制A,A库开始复制B库。这个可靠说明的是数据可靠,但是不保证业务不受影响,因为最大的问题来自于停机。
  • 可用性策略:取消等待数据的一致过程,A库只读B库关闭只读,B库停止复制A库,A库开始复制B库,优点是系统没有不可写时间,缺点是切换的时候如果有没有及时重放的relay log容易导致数据不一致。

 对于大多数普通业务执行尽量选用可靠优先策略,但是如果对于业务高可用严格建议可用性策略,比如日志流水同样需要可用性,对于一些数据要求强一致性的比较低允许一定数据丢失的业务则可以考虑使用可用性策略。


业务如何切换?


  • 预留接口,通知连接到新的数据库地址。
  • 微服务框架通知业务,比如注册中心。
  • 内部使用DNS,域名连接,切换之后刷新DNS处理。
  • K8S使用了这种方式实现处理。
  • keepalived 进行VIP漂移。通过检测处理优先级处理。
  • 代理的方式切换:加一层代理负载均衡处理。
  • Dble的时候主备切换


自动主从切换


keepalived 如何主备切换?

keepalive是经常被使用的中间件,在自动主从切换中它担任了身份切换和VIP飘移的角色,VIP即Virtual IP Address,是实现HA(高可用)系统的一种方案,高可用的目的是通过技术手段避免因为系统出现故障而导致停止对外服务,一般实现方式是部署备用服务器,在主服务器出现故障时接管业务。 VIP用于向客户端提供一个固定的“虚拟”访问地址,以避免后端服务器发生切换时对客户端的影响。


Keepalived的设计目的即是为了管理VIP,因此使用Keepalived实现VIP的配置非常简单。Keepalived采用了Virtual Router Redundancy Protocol (VRRP)协议来进行实现主备服务器之间的通信以及选举。


keepalive的主从切换类似下面的对方式,当比如当MysqlA服务宕机会自动切换到下一个A`的服务器提供服务,内部通过一定的选举算法选举出新节点。



Mha(master high availability) 如何进行主备切换?

Mha也是常用的Mysql高可用组件,它通过自研主从切换的概念完成主备切换,这个组件由facebook工程师进行开发,同时支持GTID的方式,最大特点:在宕机的时候第一时间登陆宕机服务器下载binlog日志。但是Mha最大的问题是无法进行VIP漂移。

根据下面的图可以看到,在Mha的工作机制当中,如果发现A节点的服务宕机此时会立刻登陆到A节点的服务器把文件进行抢救,但是这里存在复制的数据同步问题,在半同步复制中会有 脱扣时间导致binlog传送转变为异步传送有可能会出现binlog没有传递过来的情况,这种情况下有可能会导致其他数据的不完整导致数据不同步。

值得一提的是Mha的并不是直接通过客户端访问宕机节点而是需要等待SLAVE节点的数据落库之后再通过从库访问主库抢救binlog,这些操作基本都是来自于设计者日常工作经验中发现的一些问题针对的特殊处理所以十分受到广大开发者的青睐。



当抢救binlog任务完成之后,Mha 的下一步是重新选去Master,注意宕机的节点不会用脚本尝试重启恢复,因为这种情况下不通过人为干预通常已经没有太大的效果了,即使重启也有可能会有数据不一致的问题。


三高系统搭建


在搭建三高之前,我们需要思考为什么有时候集群搭建起来了为什么还会挂?原因是任何一个成熟的单一系统都不会单纯依赖某一个开源组件而是在中间层加入大量的容错机制防止某一组件崩盘造成大面积的损失,这里涉及到DRDS的概念,DRDS表示(Distributed Relational Database Service)分布式的Mysql集群,而Mysql的集群通常不会是本身的集群,而是通过一系列的中间件维持三高的基本特征。

接下来我们一步步来看下三高系统是如何搭建的:


分库分表有一个问题点:我们发现当dble出现问题的时候会导致整个服务不可用,Dble的单点问题这里我们后续进讨论,这里出现了Mha和Dble联动来解决Mysql节点宕机的问题。


对于开发人员来说日常实践过程基本碰不到这个东西这里同样找了一篇在需要的时候进行学习大致的搭建流程和一些基本配置即可:

爱可生DBLE Mha-dble高可用联动实例


下面是Mha结合DBLE对于整个架构的增强结构图:

通过Mha和dble的搭配,当节点出现宕机的时候可以通过Mha进行节点的切换保证分库分表的正常工作。



但是我们还发现一个问题那就是dble本身也是单点的,所以dble也需要做集群的负载均衡防止整个节点不可用,而对于dble的负载分发可以通过Haproxy结合zookeeper进行处理。


HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。所有这些类型的服务都以某种形式被分布式应用使用。每次实现这些服务时,都有大量的工作用于修复不可避免的错误和竞争条件。由于实现这类服务的难度,应用程序最初通常会忽略它们,这使得它们在变化的情况下变得很脆弱而且难以管理。即使做得正确这些服务的不同实现也会导致应用程序部署时的管理复杂性。


最后客户端通过keepalive的VIP飘移寻找网关的入口,经过选举分发之后找到对应的dble,dble再进行分库分表查找相关的数据进行处理,最后找到相关的Mysql节点汇总数据之后返回给客户端,当Mysql节点出现问题的时候,Mha则会通过一系列的脚本抢救binlog文件之后重新选举主从节点。

至此一个三高架构的分布式Mysql集群的完整结构完成,我们把上面的文字用结构图表示可以看到还是十分复杂的:



总结


 本部分内容讲述了Mysql分区表特性,以及一个国产开源的分库分表插件,其实分库分表对于大部分的中小项目基本都是不需要的,它通常出现在比较大的系统架构当中,dble作为一款国产开源组件有着不错的表现,在Mycat的基础上改进的同时使用JAVA语言编写十分贴合WEB开发人员的喜好。

 在切换的部分我们讲述了另外两个组件:MHA和Keepalive,这两个组件由大量的资源和案例参考,所以这里简单拿来介绍它们是如何和Mysql进行组合增强集群架构的高可用特性的,


写到最后


 三高架构看起来十分复杂并且高大上,然而实际上我们把组件拆分完成之后发现各个组件的角色分工非常明确,作用也比较明显。当然这些内容可能更多是运维会接触到和使用到,对于开发人员来说这些内容只需要简单了解流程和理论即可。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
8月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
7月前
|
消息中间件 缓存 负载均衡
构建高效可扩展的后端架构:从设计到实现
本文探讨了如何构建高效、可扩展的后端架构,涵盖需求分析、系统设计、实现与优化全过程。内容包括微服务、数据库设计、缓存与消息队列等关键技术,并涉及API设计、自动化测试、CI/CD及性能优化策略,助力打造高性能、易维护的后端系统。
|
10月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
12月前
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
419 3
|
4月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
393 3
|
7月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
507 0

热门文章

最新文章

推荐镜像

更多