文章目录

  • 生猛干货
  • 官方文档
  • 前置学习
  • 什么是高可用( HA - High Availability )
  • 实现高可用的几点原则
  • 避免MySQL单点故障的几种方案
    • 使用SUN共享存储
    • 使用DRDB磁盘复制
    • 使用用多写集群(PXC方案)
    • 使用NDB集群
    • 使用MySQL的主从复制
  • MMM (Multi-Master Replication Manager )
    • MMM的主要作用
    • MMM提供的功能
    • MMM架构图
    • MMM部署需要的资源
    • MMM架构安装和部署
    • MMM架构的优缺点
  • MHA (Master High Availability)
    • 架构
    • MHA提供的功能
    • MHA主从切换过程
    • MHA配置的步骤
    • MHA的安装和部署
    • MHA的优缺点
  • 搞定MySQL

生猛干货

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


官方文档

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

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

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


前置学习

要掌握高可用架构,必须先了解主从架构: 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)对不需要的数据进行归档和清理

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

    主要的措施有:

    1. 避免存在单点故障

    2. 主从切换及故障转移

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


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

使用SUN共享存储

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


使用DRDB磁盘复制

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


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

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

写入性能比单节点的写入性能差, 而且 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架构图

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

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


MMM部署需要的资源


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语言开发


架构

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

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的安装和部署

基于以下架构来演示


篇幅太大,单独补充


MHA的优缺点

优点

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

缺点

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

搞定MySQL

MySQL-高可用架构探索相关推荐

  1. 探索MySQL高可用架构之MHA(6)

    探索MySQL高可用架构之MHA(6) -----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的Atlas读写分离! 本篇文章主要介绍本次架构中的keepalive部分! 什么是Kee ...

  2. 从mysql高可用架构看高可用架构设计

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  3. MySQL 高可用架构在业务层面的应用分析

    MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...

  4. 第5章 MySQL高可用架构设计

    第5章 MySQL高可用架构设计 数据库复制 复制解决了什么问题????? 非共享架构 二进制日志 binlog工具 查看日志格式 show variables like "binlog_f ...

  5. 搭建MySQL高可用架构MHA

    搭建MySQL高可用架构MHA v1.0 MHA简介 MHA的主要目的是自动化master故障转移和slave自动提升为master,在较短时间(一般为10-30秒)的停机时间,可以避免复制和一致性问 ...

  6. Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 【转】

    文章出处:Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 [转]             mysql数据库高可用高扩展性架构方案实施[原] Heartbeat+DRBD+MySQ ...

  7. MySQL高可用架构InnoDB Cluster (和NDB Cluster是两码事)

    MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, Galera Cluster, InnoDB Cluste ...

  8. Mysql进阶(4)——基于MHA的MySQL高可用架构

    前言 MySQL高可用性大杀器之MHA MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职 ...

  9. MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)

    目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...

  10. MySQL高可用架构对比

    MMM与MHA以及MGR,高可用架构都有如下的共同点: 对主从复制集群中的Master节点进行监控 自动的对Master进行迁移,通过VIP. 重新配置集群中的其它slave对新的Master进行同步 ...

最新文章

  1. LeetCode 860.柠檬水找零(C++)
  2. Cannot load onnxruntime.capi. Error: DLL load failed: 找不到指定的模块
  3. JavaFX即将推出您附近的Android或iOS设备吗?
  4. python自动化教程_Python 任务自动化工具 tox 教程
  5. redis监控工具_企业级别Redis监控,细化到每个项目实例
  6. MySql 把B表数据插入到A表中
  7. 赤池信息量准则 ( Akaike information criterion)-统计学术语
  8. c语言单项选择题标准化考试系统,c语言课程设计(单项选择题标准化考试系统)分析报告.doc...
  9. Java微信小程序的授权登陆
  10. hdu 2087 剪花布条 kmp小水
  11. 建立一个学生的简单信息表 c语言,简单的学生信息表
  12. 语句摘抄——第28周
  13. 般若波罗蜜多心经——背过最好了
  14. C#基础编程——简介及基础语法
  15. 《全心全意地投入》——英文小译二【英文短篇正能量】
  16. DRV10983驱动无刷电机调试过程与踩坑记录
  17. 流量劫持是如何产生的
  18. 网络计算机自动巡检,奇辉巡检机器人 公安巡检机器人 自动巡检报警 安防监控报警...
  19. 使用SVM分类器做颜色分类走过的坑
  20. 方波信号发生器电路仿真,小波神经网络算法原理

热门文章

  1. java 之选择排序与冒号排序的详解
  2. pycharm的安装与python解释器的安装,pip环境变量的配置要不然使用pip时报不是内部命令
  3. C++用顶层函数重载操作符(三)用友元优化
  4. const那些事-初始化
  5. 104. Leetcode 337. 打家劫舍 III (动态规划-打家劫舍)
  6. 机器学习笔记:Transformer
  7. 禁忌搜索算法求解带时间窗的车辆路径问题原理讲解
  8. Elasticsearch 使用过程中有哪些坑?教你避开这些坑
  9. Excel:5种判断奇数和偶数的方法
  10. 深度学习100例 | 第24天-卷积神经网络(Xception):动物识别