MySQL-高可用架构探索

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL-高可用架构探索

20200129003012618.png

生猛干货

带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试


官方文档

https://dev.mysql.com/doc/

20200131202811239.png


如果英文不好的话,可以参考 searchdoc 翻译的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html


20200131203226295.png

前置学习

要掌握高可用架构,必须先了解主从架构: MySQL-主从架构探索


什么是高可用( HA - High Availability )


通过尽量缩短因日常维护操作(计划内) 和 突发的系统崩溃 (非计划)所导致的停机时间,以提高系统的可用性,这就是高可用 。


举个例子: 主从同步延时太厉害、主从中断、锁表造成大量的阻塞 等等因素都造成了应用的不可用,这些都是影响高可用的因素


其实真正做到100%的可用还是比较困难的,我们经常说到的 5个9 (99.999%)的可用 是啥意思呢?


做到 5个9的可用性,那允许停服多长时间呢? 我们来算下


(365 * 24 * 60) * (1 - 0.99999) = 5.256 分钟, 一年停服时长小于5分钟。


4个9呢?


(365 * 24 * 60) * (1 - 0.9999) = 52. 56 分钟 (1个小时左右)


3个9呢?


(365 * 24 * 60) * (1 - 0.999) = 525.6 分钟 (9个小时左右)


可用性越高,实现的成本相对就高, 实际情况根据我们的业务和项目成本来考量。


实现高可用的几点原则


避免系统不可用的因素减少系统不可用的时间


比如服务器磁盘空间不足、表结构和索引没有优化、主从不一致、性能糟糕的SQL、人为操作失误等等


主要的措施:


建立完善的监控和告警系统


1)备份!!!并对备份数据定期进行恢复测试,以便备份数据在紧急情况恢复数据时可用

2)正确的配置数据库环境,特别是从库环境,read_only一定要开启。

3)对不需要的数据进行归档和清理


增加系统冗余,确保发生故障时可以尽快的切到另外的节点恢复


主要的措施有:


避免存在单点故障


主从切换及故障转移


这里我们主要如何解决探讨MySQL的单点故障


避免MySQL单点故障的几种方案

使用SUN共享存储



20200201133903890.png

共享存储 也有单点问题,而且共享存储的随机I/O不是很理想,虽然能实现,但不是一种好的解决MySQL单点故障的方案。


使用DRDB磁盘复制


20200201134028972.png


提供远程镜像磁盘,数据是由冗余的,没有单点问题,但成本较高 。


使用用多写集群(PXC方案)


20200201134228273.png

集群中的节点全部提交才提交。集群的性能取决于集群中机器配置最低的那台主机的性能。

写入性能比单节点的写入性能差, 而且 PXC仅支持Innodb储存引擎。

这个玩意很强大,需要深入学习,淘宝等很多大厂有基于这个的定制,很好用,但得学会 。


使用NDB集群


这玩意所有的数据存在内存中,如果内存不足,NDB集群的性能就会非常差。 很少在生产环境中使用。


使用MySQL的主从复制


说到使用MySQL主从复制来解决MySQL的单点问题,其核心在于如何解决主节点的单点问题。

要保证主节点高可用,有几点 需要解决

  • 主服务器切换后,如何通知应用新的主服务器的IP地址
  • 如何检查MySQL主服务器是否可用
  • 如何处理从服务器和新主服务器之间的那种复制关系

通常都会使用第三方的复制管理组件 , 主流的MMM 和 MHA ,接下来我们就重点来看下这两种复制管理组件。


MMM (Multi-Master Replication Manager )


学习这个之前,需要知道,这个玩意很少有人用了,这个项目好多年都不维护了,了解即可。 有精力可以重点掌握MHA这种架构。

多主复制器, perl语言开发的


MMM的主要作用


监控和管理MySQL的主主复制拓扑,并在当前的主服务器失效的时候,进行主和主备服务器之间的主从切换和故障转移。


MMM提供的功能


主主复制 分为两种模式

  • 主动-主动模式的主主复制 (两个主节点都对外提供读写服务)
  • 主动-被动模式的主主复制(仅一个节点对外提供读写服务)


MMM是 主动-被动模式的主主复制的模式

  • MMM监控MySQL主从复制的健康状况
  • 在主库宕机时进行故障转移并自动配置其他从对新主的复制

这里的内容就比较多了: 比如如何找到从库对应的新主库日之巅的日志同步点, 如何存在多个从库出现数据不一致的情况如何处理 —> MMM采取的方案: 找到当前主库的同步点进行同步,所以有数据丢失的可能

  • 提供了主、写虚拟IO,在主从服务器出现问题的时候可以自动迁移虚拟IP

MMM架构图



20200201142847500.png


因为同一时间点只能有一个主节点提供读写服务,所以第二个主节点画成了虚线。

MMM监控各个服务器的状态,需要在每台服务器上安装 监控服务器。


MMM部署需要的资源


20200201142944206.png


MMM架构安装和部署

这一部分暂时留空,因为MMM架构使用较少,暂不整理。


MMM架构的优缺点

优点 :


开源,使用perl语言开发

提供了读写VIP(虚拟IP),使得服务器交涉的变更对前端应用透明。应用访问DB都是访问的虚拟IP,而非真实的物理IP。 在从服务器出现大量的主从延迟,主从链路中断时可以把这台从服务器上的读的虚拟IP,漂移到集群中其他正常的服务器上。

MMM提供了从服务器的延迟监控。监控后,有故障可以自动漂移VIP

MMM提供了主服务器故障转移后从服务器对新主的重新同步功能

很容易对发生故障的主数据库重新上线

监控服务器可以监控多个MMM集群


缺点 :


最新版本10年发布的,十年了。。。。有部分bug未修复

不支持MySQL5.6以后的提供的GTID同步方式,仅支持基于binlog的同步

不支持MySQL5.6以后的提供的多线程同步技术

没有读负载的功能

主从切换时,容易造成数据丢失

MMM监控服务存在单点故障,避免的监控服务单点,需要自行实现。


MHA (Master High Availability)

同MMM一样, 也是perl语言开发


架构


20200201145558461.png


当主节点发生故障时,会在从节点中选举出一个主节点,继续提供服务。 切高效的完成主从切换,尽最大可能保证数据一致。

MHA支持 基于GTID的复制 ,GTID复制更安全。

MMM不支持 基于GTID的复制


MHA提供的功能


  • 监控主数据库服务器是否可用
  • 当主DB不可用时,从多个从服务器中选举新的主数据库服务器
  • 提供主从切换和故障转移功能 。

MHA可以和半同步结合起来使用。


MHA主从切换过程


  • 尝试从出现故障的主数据库保存二进制日志到其他节点 (需要配置ssh免密)
  • 从多个备选从服务器中选举出新的备选主服务器
  • 在备选服务器和其他从服务器之间同步差异的二进制数据
  • 应用从原主DB上保存的二进制日志
  • 提升备选DB服务器为新的主服务器
  • 迁移集群中的其他从DB作为新的DB的从服务器


MHA配置的步骤


配置集群内所有的主机的SSH免认证登录

安装MHA-node软件包(每个节点都要安装) 和MHA-manager 软件包

建立主从复制集群 (推荐使用基于GTID的复制)

配置MHA管理节点

使用masterha_check_ssh和 masterha_check_repl对配置进行校验

启用并测试MHA服务


MHA的安装和部署

基于以下架构来演示


20200201150433921.png


篇幅太大,单独补充


MHA的优缺点

优点

  • 开源 ,perl语言开发,提供了脚本接口
  • 支持GTID的复制模式
  • MHA故障转移中不容易丢失数据
  • 同一个监控节点可以监控多个集群

缺点

  • 需要编写脚本或者利用第三方工具来实现VIP的配置
  • MHA启动后只监控主数据库
  • 需要基于SSH免认证,存在一定的安全隐患
  • 也没有同从服务器的读的负载功能

搞定MySQL


https://artisan.blog.csdn.net/article/details/104130677?spm=1001.2014.3001.5502


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
4月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
408 3
Mysql高可用架构方案
|
4天前
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
15 3
|
4天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
26天前
|
存储 SQL 缓存
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
|
4月前
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
226 2
【赵渝强老师】MySQL的体系架构
|
3月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
26天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
137 42
|
17天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
88 25

热门文章

最新文章