高可用

 
高可用(High Availabiltity)
  • 应用提供持续不间断(可用)的服务的能力
  • 系统高可用性的评价通常用可用率表示
 

造成不可用的原因
  • 硬件故障(各种)
  • 预期中的系统软硬件维护
  • 软件缺陷(应用代码,服务程序都可能存在bug)
  • 攻击,泄露,认为失误...等安全事件
  • 对于系统来说,不可用时间是各关键组件不可用时间的总和.....
 
提高可用性的主要手段
  • 冗余,Redundancy
  • 关键软硬件通过备用冗余避免故障时长时间的不可用
  • 数据软件,硬件,存储的数据,都需要通过冗余确保故障时可替换
mysql高可用常见方案:
  • 数据库服务在冗余实现上有其特殊性
    • 数据:服务"有状态"与数据冗余
    • 数据库可用性考虑两部分:数据可用性,服务可用性;
  • 实现方式多种多样,同一种数据也会有多种实现方案
  • 可用性目标循序渐进
    • 任何故障都不会造成数据丢失->可以较快速恢复服务(高可用)
 
高可用方案

 
1.mysql--基于共享存储的单活方案(不常用)
 
  • SAN,方案比较昂贵;因此不常用;
  • 且数据库备用机,只是机器活着,但是没有没有起mysql服务;
    • 因为大部分共享存储或数据库是不允许同一份数据被不同数据使用的;
  • 本地数据通过RAID等手段保证数据安全
 
 
2.基于存储复制的数据冗余单活(不常用)
  • 存在一定浪费,备用机器一直不在用,等待主机挂掉,才会使用备用机;
  • 而且DRBD(两台机器间通过网络,备份数据),不是100%的保证数据不丢失;
 
 
3.基于集群提交通信协议的多主复制(一定场景适用)
 

 
基于主从复制的高可用方案

 
4.基于Mysql主从复制(常用,普适)
 

  • 备库,在线上也会提供服务,避免浪费;
  • 而主从复制,也保证了数据不会丢失。
 
mysql主从复制高可用方案需要改进的问题
  1. 主从服务器各自有IP地址,发生主从切换后应用需要修改重启;

    • 如何让应用快速找到从库;VIP/DNS
  2. 人工判断主库是否故障再发起切换需要花较多时间
    • 如何自动探知;监控探知并自动VIP/DNS;
  3. 主从复制存在客观延迟,切换后可能造成事务数据丢失。
    • 由于网络延时,如何避免数据丢失。
 
1.为了避免应用人工修改切换IP,引入VIP(virtual ip)漂移方案:

 
方案二:
DNS,应用服务器,使用域名;
平时,将域名注册在主库上,而主库挂掉,将域名注册到从库就可以了;
 
 
2.为了减少人工介入处理的时间开销引入自动探活处理机制
 
高可用中间层与RDS
  • VIP/DNS解决 应用切换问题
  • 监控和管理服务器解决自动判断故障切换和VIP/DNS漂移
  • VIP/DNS管理+探活+主从关系切换 = 高可用中间层
    • 透明切换管理+靠谱数据探活+使用切换 = 高可用中间层
  • 云环境+高可用中间层+底层数据库=一种PaaS=基本RDS、
 
高可用中间层
  • MHA
    • 自动选择复制延迟最小的从节点并试图补全日志(但大部分主机故障下行不通)
    • 通常要求两从以上,会进行主从关系切换
    • 不提供VIP管理方案
  • MMM
    • 提供了基本的VIP管理功能
    • 适合双主配置的一对主机,不会主动切换主从关系
    • 不支持主从数据延迟判断和补全
 
一般使用MHA,开源;
 
 
3.mysql主从复制延迟
为什么日志传输延迟
为什么主从复制,主从库会数据不一致;
 
解决方案:
mysql半同步技术:
主库一次commit,要等到主库持久化完成,以及从库也持久化完成,才给主键放回commit成功。
 
但是问题:
主库等待从库的时间是不可控的;
主库发现从库写不进去了,可以等待几秒,之后主库复制自动降级成异步复制;但这也可能导致数据不一致;
 
较完善的mysql高可用方案
  • 半同步复制+高可用中间层+VIP管理方案
  • 高可用中间层=靠谱探活+主从切换+使用VIP管理的接口
 
例如:
  • 半同步复制+MHA(高可用中间层)+Keeplive(VIP管理方案)
  • 半同步复制+RDS
 
 
总结

 
  • 高可用指标至少3个9目标4个9
  • 高可用核心就是使用冗余
  • 数据库高可用两个部分
    • 数据可用性--数据有状态
    • 服务可用性
  • 高可用方案
    • 基于共享存储SAN的单活方案
      • SAN,设备昂贵
      • 单活,备用机浪费,因为同一份数据不能被不同mysql实例使用;
      • 本地数据可以通过RAID等手段保证
    • 基于DRBD存储复制的数据冗余单活
      • 基于SAN方案的改进,不使用SAN设备
      • 单活,备用机浪费
      • DRBD基于两台机器间通过网络备份数据,数据不能100%保证
    • 多主复制--mysql cluster
  • 基于mysql主从复制(常用,普适)
    • 备份,在线上可提供只读服务,避免浪费;
    • 主从复制,也保证了数据不会丢失
  • 基于mysql主从复制的问题
    • 主从服务器各有IP地址,发生主从切换后应用需要修改重启;
      • 使用VIP(virtual IP)/DNS管理方案,当发生切换是,只需要将VIP从主库漂移到从库,对应用来说是透明的。
    • 人工判断主库是否故障,在发起切换需要时间长
      • 使用监控服务器,自动靠谱探知+自动主从切换
    • 主从复制存在客观延迟,切换后可能造成事务数据丢失
      • 使用半同步复制技术,但也要考虑到从库宕机,主库应该自动降级成异步复制;
    • 解决问题后的mysql高可用方案
      • VIP管理方案+高可用中间层+半同步复制
  • 高可用中间层
    • VIP/DNS管理+靠谱探活+主从关系切换=高可用中间层
    • 云环境+高可用中间层+底层数据库=一种paas=基本RDS
    • MHA/MMM
  • MHA
    • 自动选择复制延迟最小的从节点并试图补全日志(主机故障下行不通)
    • 自动探活
    • 自动主从切换
    • 不提供VIP管理方案,但提供使用VIP方案的接口
 
 
 
 

mysql高可用架构的更多相关文章

  1. mysql高可用架构之MHA,haproxy实现读写分离详解

    MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理    权限的管理] 3.容灾       保证数据不丢失. 二.工作中MySQ ...

  2. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  3. 032:基于Consul和MGR的MySQL高可用架构

    目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...

  4. (转)MySQL高可用架构之MHA

    MySQL高可用架构之MHA  原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...

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

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

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

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

  7. MySQL高可用架构应该考虑什么? 你认为应该如何设计?

    一.MySQL高可用架构应该考虑什么? 对业务的了解,需要考虑业务对数据库一致性要求的敏感程度,切换过程中是否有事务会丢失 对于基础设施的了解,需要了解基础设施的高可用的架构.例如 单网线,单电源等情 ...

  8. MySQL高可用架构之MySQL5.7组复制MGR

    MySQL高可用架构之MySQL5.7组复制MGR########################################################################### ...

  9. MySQL高可用架构之MHA

    简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...

  10. MySQL 高可用架构之MMM

    简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管理My ...

随机推荐

  1. JavaScript中this和$(this)之间的区别以及extend的使用

    jQuery中this和$(this)之间的区别: this返回的是当前对象的html对象,而$(this)返回的是当前对象的jQuery对象 举个正确的Demo实例: $("#textbo ...

  2. poj3181 Dollar Dayz ——完全背包

    link:http://poj.org/problem?id=3181 本来很常规的一道完全背包,比较有意思的一点是,结果会超int,更有意思的解决方法是,不用高精度,用两个整型的拼接起来就行了.OR ...

  3. 使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误

    使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误 使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误 : ...

  4. std::ostringstream输出流详解

    一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...

  5. CentOS 关闭防火墙和selinux

    1)关闭防火墙(每个节点) [Bash shell] 1 2 service iptables stop chkconfig iptables off 2)关闭selinux(重启生效) [Bash ...

  6. android中的AIDL进程间通信

    关于IPC应该不用多介绍了,Android系统中的进程之间不能共享内存,那么如果两个不同的应用程序之间需要通讯怎么办呢?比如公司的一个项目要更新,产品的需求是依附于当前项目开发一个插件,但是呢这个插件 ...

  7. eclipse 设置默认编码为Utf-8

    Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window->Prefere ...

  8. [Freemarker] - 使用struts的component调用freemarker的ftl模板方法

    struts中的component标签,可以用来调用freemarker的ftl模板文件,使用component标签传参可以这样写: 使用property方式写法: <s:component t ...

  9. [zz]计算 协方差矩阵

    http://www.cnblogs.com/chaosimple/p/3182157.html http://blog.csdn.net/goodshot/article/details/86111 ...

  10. Keepalived安装使用详解

    简介 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker. 但是它一般不会单独出现, ...