说明

高可用对于互联网应用基本上是标配,目的是最大程度的为用户提供服务,避免因为服务器宕机等意外故障而终止服务。相比于无状态服务(如前后端应用),数据库服务的高可用问题更为复杂,不仅仅是能访问,更需要保证其数据的正确性。

在考虑数据库高可用架构时,需要考虑以下问题:

  • 数据库服务器如果发生宕机或者意外中断等故障,能够尽快恢复数据库服务的可用性,减少停机时间
  • 用作备份、只读副本等功能的非主节点应该与主节点的数据实时或者最终保持一致
  • 当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务

方案

主从复制

MySQL主从复制是目前使用较为广泛的“读”高可用解决方案,官方原生支持,技术比较成熟,配置也不复杂,能够有效缓解数据库读写压力,很大程度上可以解决中小型网站的数据库压力瓶颈问题。

MySQL主从复制采用典型的Master-Slave架构,Slave从Master处同步数据来保证主从数据一致。通过修改配置文件,可以设置同步粒度,如特定数据库,甚至是数据库中的某一张表。


主从复制主要涉及binlog、I/O、SQL三个线程。

  • binlog:Master进程,将数据更改写入二进制日志文件(Binary log)
  • I/O:Slave进程,从Master服务器读取二进制日志文件,写入Slave的中继日志(Relay log)
  • SQL:Slave进程,读取中继日志,执行其中的SQL语句

优点:

  • 成本低,部署简单
  • 可以作为一种备份机制,相当于热备份,保障数据安全
  • 可以实现读写分离,Master上写数据,Slave上读数据,有效提高数据库读写性能

缺点:

  • Master可能出现单点故障问题,写数据仍然不是高可用
  • 数据一致性问题(同步延迟)

双主复制

主从复制存在“写”单点故障问题,为了保障“写”的高可用,可以采用双主互备的方式。


两台Master都可以读写,互为主备,采用Keepalive等方案实现高可用(使用VIP对外提供服务),默认只有一台(MasterA)负责数据写入,另一台(MasterB)备用。双主复制解决了主从复制的单点写故障问题,可以一定程度保障Master的高可用,一台Master宕机后,可以在极短时间内自动切换到另一台Master。

缺点:

  • 资源利用率只有50%,高可用就是通过冗余实现,二者不可兼得
  • 两台Master双写同步,数据可能冲突(如自增id同步冲突),需要解决冲突

MHA

MHA(Master High Availability)由日本程序员yoshinorim开发,目前在MySQL高可用方面是一个相对成熟的解决方案,在10-30秒之间可以自动完成数据库的故障切换,最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA主要包含Manager和Node两个组件:


  • Node组件要部署到所有的MySQL服务器上。
  • Manager组件通常单独部署在一台独立机器上来管理多个master/slave组,包含有主节点(Master)监控、故障转移等管理程序。

Manager会定时探测集群中Master节点,当Master故障时,它可以自动将包含最新数据的Slave提升为新的Master,然后让所有其他的Slave重新指向新Master,整个故障转移过程对应用程序完全透明。

MySQL Cluster

MySQL Cluster是官方提供的集群高可用解决方案,但是依赖于NDB存储引擎,如果使用InnoDB存储引擎(大多数情况)则无法发挥出集群的优势。

参考资料

  1. Chapter 16 Replication
  2. 五大常见的MySQL高可用方案
  3. 浅淡MySQL集群高可用架构
  4. MySQL高可用架构之MHA
  5. yoshinorim/mha4mysql-manager

【MySQL】高可用相关推荐

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

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

  2. heartbeat+drbd+mysql构建mysql高可用群集

    heartbeat+drbd+mysql构建mysql高可用群集 1. 试验环境: 操作系统:Red Hat Enterprise Linux 5.4 所需的软件包: mysql-5.5.22.tar ...

  3. corosync+pacemaker+drbd构建mysql高可用平台的简单案例

    写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 说明: ansible主机主要作用在于配置和安装两台corosync+pacemake ...

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

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

  5. mysql高可用_mysql高可用方案

    第一节:mysql 高可用方案 1.1 一主一从架构 mysql 配置为主从模式,从库是主库的 backup,同一时间设置其中一台为主服务器,提供读写,另一台服务器作为热备,不提供读写,通过复制与主服 ...

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

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

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

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

  8. MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

    MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解 Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在 ...

  9. MySQL高可用的几种方案

    首先我们看看MySQL高可用的几种方案:   对于数据实时性要求不是特别严格的应用,只需要通过廉价的pc server 来扩展Slave 的数量,将读压力分散到多台Slave 的机器上面,即可通过分散 ...

  10. 架构成长之路:常见的五种MySQL高可用方案分析

    1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中 ...

最新文章

  1. doe报告模板_技术漫谈|关于制剂研发过程中的实验设计(DOE)误区讨论
  2. 在无Yum源的环境安装软件(CentOS)
  3. python基础知识资料-Python基础知识(一)—简介
  4. Day11多态部分-5
  5. DHTML4(select与checkbox应用)
  6. python与正则表达式(part5)--re模块使用
  7. 【Go】panic: reflect: call of reflect.Value.FieldByName on ptr Value
  8. OpenGL学习笔记-坐标系统
  9. 【OpenCV】OpenCV实战从入门到精通之 -- 输入输出XML和YAML文件详解
  10. html 自动滚动到底部,Javascript实现DIV滚动自动滚动到底部的代码
  11. ASP.NET GridView中使用搜索框(SearchableGridView)
  12. oracle迁移mysql注意_从MySQL到ORACLE程序迁移的注意事项
  13. 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)...
  14. 浏览器兼容性及调试插件
  15. EXCEL如何生成不重复的随机数 ,多方法+原理
  16. 单片机基础教程那么多,什么样才是靠谱的学习方式
  17. (单细胞-SingleCell)单细胞可变剪切流程(一)
  18. RFC1191 路径MTU发现
  19. css 文字不规则排版,CSS3文字排版
  20. 红外遥控及Android手机红外遥控器开发

热门文章

  1. Struts2-16.Struts2国际化
  2. WiFi(Wireless Fidelity)基础(六)
  3. 修复\okldr.mbr ,状态0x000000f
  4. Spire.OCR for .NET Patch
  5. 无法启动此程序因为计算机丢失gdiplus,处理系统提示无法启动此程序,因为计算机中丢失gdiplus.dll的方法...
  6. 如何从一个空有上进心的人,变成行动上的巨人?
  7. 设计渲染系统,为什么要特别关注“显卡”? | GAMES104实录 - 现代游戏引擎:从入门到实践
  8. [编程] Java8 Stream(流式计算) 常见的一些用法汇总
  9. mysql-connector-java.jar包的下载教程
  10. 基于单片机的GPS全球定位系统仿真设计-毕业设计protues仿真