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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 三高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进行组合增强集群架构的高可用特性的,


写到最后


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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
28天前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
3月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
5月前
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
193 3
|
SQL 缓存 NoSQL
MySQL架构与SQL的执行流程_2
MySQL架构与SQL的执行流程_2
189 0
MySQL架构与SQL的执行流程_2
|
SQL 缓存 网络协议
MySQL架构与SQL的执行流程_1
MySQL架构与SQL的执行流程_1
177 0
MySQL架构与SQL的执行流程_1
|
28天前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
225 1
|
2天前
|
SQL 存储 关系型数据库
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
48 26
|
23天前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
110 62
|
4月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

推荐镜像

更多