第一章 MySQL高可用架构
    第一节 MySQL高可用描述
    1. 高可用是什么
    高可用(High Availability)
    l 应用提供持续不间断(可用)的服务的能力
    l 系统高可用性的评价通常用可用率表示
    第六篇-MySQL高级架构技术 - 图1
    三个9是一般的网站的基本要求

    2. 造成不可用的原因
    l 硬件故障(各种)
    l 预期中的系统软硬件维护
    l 软件缺陷(应用代码,服务程序都可能存在bug…)
    l 攻击,泄露,人为失误..等安全事件
    l 对于系统来说,不可用时间是各关键组件不可用时间的总和…
    3. 提高可用性的主要手段
    l 冗余,Redundancy
    l 关键软硬件通过备用冗余避免故障时长时间的不可用
    l 数据软件,硬件,存储的数据,都需要通过冗余确保故障时可替换
    第六篇-MySQL高级架构技术 - 图2
    第二节 MySQL高可用常见方案
    1. 数据库冗余与可用性
    l 数据库服务在冗余实现上有其特殊性
    n 数据:服务“有状态”与数据冗余
    l 实现方式多种多样,同一种数据也会有多种实现方案
    n 数据可用性:主从复制,备份恢复
    l 可用性目标循序渐进:
    l 任何故障都不会造成数据丢失->可以较快速恢复服务(高可用)

    2. 目前数据库高可用实施方案。
    l MySQL -基于共享存储的单活方案(比较扯)——非常昂贵
    技术目标上,非常稳健非常可靠
    第六篇-MySQL高级架构技术 - 图3
    l MySQL -基于存储复制的数据冗余单活(不常用)
    第六篇-MySQL高级架构技术 - 图4







    l MySQL -基于MySQL主从复制(常用,普适)
    第六篇-MySQL高级架构技术 - 图5
    通过binlog的传递和恢复来做到主从服务器的一致
    l 基于集群提交通信协议的多主复制(一定场景适用)
    第六篇-MySQL高级架构技术 - 图6
    3. MySQL主从复制高可用方案需要改进的问题
    l 主从服务器各自有IP地址,发生主从切换后应用需要修改重启
    l 人工判断主库是否故障再发起切换需要花较多时间
    l 主从复制存在客观延迟,切换后可能造成事务数据丢失
    MySQL主从复制高可用方案改进
    l 为了避免应用人工修改切换IP引入VIP漂移方案
    第六篇-MySQL高级架构技术 - 图7
    用户不再直接去访问主库的IP,而是在网卡上绑定虚拟IP
    l 为了避免应用人工修改切换IP引入VIP漂移方案
    主库错误:在主库上把IP注销掉,在从库上把IP注册上;
    主库失去访问了,直接在从库上把虚拟IP注册上
    第六篇-MySQL高级架构技术 - 图8
    l 为了减少人工介入处理的时间开销引入自动探活处理机制
    第六篇-MySQL高级架构技术 - 图9
    l 高可用中间层与RDS
    u VIP解决应用切换问题
    u 监控和管理服务器解决自动判断故障切换和VIP漂移
    u VIP管理+探活+主从关系切换=高可用中间层
    u 云环境+高可用中间层+底层数据库=一种PaaS =基本RDS

    腾讯,阿里提高了一些RDS
    l 高可用中间层
    l MHA
    u 自动选择复制延迟最小的从节 点并试图补全日志(但大部分主机故障情况下不通)
    u 通常要求两从以上,会进行主从关系切换
    u 不提供VIP管理方案
    n MMM
    u 提供 了基本的VIP管理功能
    u 适合双主配置的一对主机不会主动切换主从关系
    u 不支持主从数据延迟判断和补全
    4. MySQL主从复制延迟
    l 日志传输延迟上why?
    第六篇-MySQL高级架构技术 - 图10
    日志传输烟草-what?
    第六篇-MySQL高级架构技术 - 图11

    MySQL半同步:
    第六篇-MySQL高级架构技术 - 图12
    第六篇-MySQL高级架构技术 - 图13


    5. 较完善的MySQL高可用方案
    l 半同步复制+高可用中间层+ VIP管理方案
    例如:
    l 半同步复制+ MHA + Keepalive
    l 半同步复制+ RDS

    第三节 MySQL高可用框架MHA
    1. MySQL高可用框架-MHA
    l 用一个管理节点监控后端数据库主库可用性
    l 提供VIP漂移接口,不提供具体方法
    l 提供补全从库日志的脚本
    第六篇-MySQL高级架构技术 - 图14


    2. MHA的安装步骤
    1.规划
    2.配置服务器间域名和ssh互信访问
    3.在manager节点安装MHA node和manager组件及其依赖包
    4.在数据库服务器安装MHA node组件及其依赖包
    5.配置VIP管理脚本masterip_failover和master_ip_online_change
    6.配置MHA配置文件mha_manager.cnf
    7.数据库配置主从,添加mha连接用户…etc.
    8.启动MHA开始监控数据库主从集群

    第六篇-MySQL高级架构技术 - 图15



    第二章 MySQL读写分离
    第一节 MySQL读写分离概述
    1. 什么是读写分离
    读写分离:
    在高并发查询场景下,为了满足应用访问需求,通常都会部署多个从库提供查询服务以提升数据库查询的扩展性,将查询分发到从库,让从库分担主库查询负载的技术我们通常称为读写分离
    第六篇-MySQL高级架构技术 - 图16

    2.什么时候需要读写分离
    提升数据库查询扩展性
    保护主库
    提升资源利用
    应用端:
    第六篇-MySQL高级架构技术 - 图17
    服务器端:
    第六篇-MySQL高级架构技术 - 图18

    3. 读写分离的主要问题:
    l 数据可能丢失
    l 部署,实现相对复杂


    第六篇-MySQL高级架构技术 - 图19

    第二节 MySQL读写分离常见手段
    1. MySQL读写分离方案介绍
    常用的读写分离方案∶
    l MySQL Proxy ——MySQL官方自己开发的一款
    l Amoeba For MySQL
    l MySQL Router ——MySQL官方
    l 应用端实现
    MySQL Proxy
    l MySQL Proxy是MySQL官方开发的一款读写分离中间件,开发多年一直未GA,在功能上存在许多缺陷,目前官方已经放弃开发
    第六篇-MySQL高级架构技术 - 图20
    使用C/C++开发服务模块
    使用lua脚本语言分析sql语句进行读写分离

    MySQL Proxy (Atlas)
    Atlas是360公司开发改进的一款MySQL Proxy分支,基于MySQLProxy0.8.2,修正大量bug,并添加许多使用功能。已经大规模运行于360公司的各种业务中,经过线上大并发业务考研,也有许多其他公司在使用,开发者与使用者比较活跃
    第六篇-MySQL高级架构技术 - 图21
    Amoeba for MySQL
    Amoeba是类似MySQL Proxy的中间件,采用java语言编写,具有读写分离、数据切分和过滤等功能,是非常早的一款国MySQL分读写离软件
    l 支持读写分离
    l 支持数据拆分
    l 对事务支持不好
    l 数据拆分比较简单
    第六篇-MySQL高级架构技术 - 图22

    MySQL Router
    MySQL Router是MySQL官方开发的一款一个轻量级的用来实现高可用和扩展性的中间件,支持读写分离负载均衡,支持跟MySQL Fabric一起使用,刚GA,稳定性等还有待考验
    l MySQL Router提供2个端口,读写个只读端口
    读写端口: first available
    只读端口: round robin

    2. MYSQL Proxy (Atlas)部署
    第六篇-MySQL高级架构技术 - 图23




    第三章 MySQL分布式架构
    第一节 MySQL分布式架构
    1. 常见的分布式数据库架构
    分布式数据库
    l 区别单机,不因单台服务器的性能瓶颈上限
    l 一般由管理节点台机器、计算节点、数据节点组成
    l 数据节点统一由分布式数据库管理节点控制

    分布式数据的分类
    Shared Nothing vs Shared Anyhing
    第六篇-MySQL高级架构技术 - 图24

    Shared Nothing ——MySQL Cluster 是MySQL官方提供的分布式方案

    第六篇-MySQL高级架构技术 - 图25

    Shared Anyhing
    第六篇-MySQL高级架构技术 - 图26
    2. MySQL分布式架构
    l 分布式事务处理与XA协议
    l MySQL分布式事务处理
    l MySQL分布式事务的局限与改进
    分布式事务
    l Distributed(XA) Transactions
    l 2pc(Two Phase Commit)Transactions
    第六篇-MySQL高级架构技术 - 图27


    2. 掌握MySQL分布式架构
    MySQL的分布式事务
    什么是分布式事务处理分布式事务一般包括3个部分∶
    l APP
    —般指事务的发起者
    l Resource Manager,RM
    资源管理器RM,主要是提供外部程序进行资源共享访问
    l Transaction Manager/Coordinator(TM or TC)
    TM或者TC是事务的协调者,对于分布式事务,在提交时,可能有部分节会提交失败,这个时候,需要TC来决定哪些事务需要重新提交,哪些事务需要回滚。
    XAln MySQL
    l Only a Resource Manager
    l InnoDB Only: innodb_support_xa
    MySQL XA事务的局限
    l 客户端退出,prepare状态的XA事务被回滚
    n 根据分布式事务的原理,所有prepare成功的事务都应该被提交,有下面一个客户端操作∶
    xa start’111’;
    insert into t values(1);
    xa end ‘111’;
    xa prepare’111’;
    l Server Crash后重启,提交prepare的事务
    l Server Crash后重启,提交prepare的事务,造成主从数据不一致
    为什么一直没有人修复
    看似简单,其实解决代价很大
    MySQL的XA事务用的真不多,官方觉得没必要

    第二节 MySQL开源分布式软件MyCat
    1. Mycat项目介绍
    l Mycat的由来
    n Java语言编写
    n JDK版本要求>1.7版本
    n 基于阿里的cobar实现,完全兼容MySQL协议
    n 有专业的维护团队,更新频繁,文档写的比较好
    n 功能较为完善
    n 分布式事务支持的不够好
    n 支持各种数据库:MySQL、Oracle、MongoDB
    n 目前不支持在线水平扩容
    n 要做MySQL界的Tomcat
    2. Mycat架构
    第六篇-MySQL高级架构技术 - 图28

    3. Mycat功能特点
    Mycat的功能特点
    l 数据拆分,丰富的拆分策略,数据库水平扩容。
    枚举算法
    Range算法
    Hash取模算法
    l 读写分离,支持用户友好的读写分离策略
    l 兼容MysQL协议,用户可以以最小的代价接入Mycat

    Mycat里面的重要概念
    全局ID
    MySQL : auto
    increment
    Mycat : global sequnce number

    Mycat的全局ID
    l 基于文件
    基于文件实现
    第六篇-MySQL高级架构技术 - 图29
    l 基于数据库
    第六篇-MySQL高级架构技术 - 图30










    l 基于本地时间戳
    第六篇-MySQL高级架构技术 - 图31
    l Oconf/server.xml



    4. Mycat的部署与安装
    l MyCat的重要概念
    n DataHost
    n DataBase Node (DBN)
    n 分区规则
    n 分区键
    启动mycat:
    第六篇-MySQL高级架构技术 - 图32

    第四章 MySQL新发展
    第一节 MySQL新版本特征