MySQL集群架构

课程目标:

一、MySQL集群概述

1. 集群的主要类型

2. 如何衡量高可用

可用性级别(指标)年度宕机时间描述叫法
99%3.65天/年基本可用系统2个9
99.9%8.76小时/年可用系统3个9
99.99%52.6分钟/年高可用系统4个9
99.999%5.3分钟/年抗故障系统5个9
99.9999%32秒/年容错系统6个9

计算方法:

3. 常用的集群架构

二、MySQL复制简介

####1. 什么是MySQL复制?

2. MySQL复制原理

简单来说,master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据重演操作,实现数据异步同步。

mysql复制原理

详细描述:

  1. slave端的IO线程连上master端,请求
  2. master端返回给slave端,bin log文件名和位置信息
  3. IO线程把master端的bin log内容依次写到slave端relay bin log里,并把master端的bin-log文件名和位置记录到master.info里。
  4. salve端的sql线程,检测到relay bin log中内容更新,就会解析relay log里更新的内容,并执行这些操作

3. MySQL复制架构

3.1 双机热备(AB复制)

M-S简图

默认情况下,master接受读写请求,slave只接受读请求以减轻master的压力。

3.2 级联复制

m-s1-s2简图

优点:进一步分担读压力

缺点:slave1 出现故障,后面的所有级联slave服务器都会同步失败

3.3 并联复制

m-s-s并联复制

优点:解决上面的slave1的单点故障,同时也分担读压力

缺点:间接增加master的压力(传输二进制日志压力)

3.4 双主复制

m-m

特点:

从命名来看,两台master好像都能接受读、写请求,但实际上,往往运作的过程中,同一时刻只有其中一台master会接受写请求,另外一台接受读请求。

m-m-s

三、MySQL复制搭建

####1. M—>S架构

2. M1—>M2架构

3. M-S1-S2架构

4. 总结:

上面的复制架构默认都是异步的,也就是主库将binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接受完毕。这样可以提供最佳的性能。但是同时也带来了很高的风险,当主服务器或者从服务器发生故障时,极有可能从服务器没有接到主服务器发过来的binglog日志,这样就会导致主从数据不一致,甚至导致数据丢失。为了解决该问题,mysql5.5引入了半同步复制模式。

5. 半同步复制

半同步复制

所谓的半同步复制就是master每commit一个事务(简单来说就是做一个改变数据的操作),要确保slave接受完主服务器发送的binlog日志文件并写入到自己的中继日志relay log里,然后会给master信号,告诉对方已经接收完毕,这样master才能把事物成功commit。这样就保证了master-slave的数据绝对的一致(但是以牺牲master的性能为代价).但等待时间也是可以调整的。

搭建步骤:

6. 基于GTIDs的复制

1. 关于GTIDs概述
  1. GTIDs(Global transaction identifiers)全局事务标识符,是mysql 5.6新加入的一项技术

  2. 当使用GTIDs时,每一个事务都可以被识别并且跟踪

  3. 添加新的slave或者当发生故障需要将master身份或者角色迁移到slave上时,都无需考虑是哪一个二进制日志以及哪个position值,极大简化了相关操作

  4. GTIDs是完全基于事务的,因此不支持MYISAM存储引擎

  5. GTID由source_id和transaction_id组成:

    1)source_id来自于server_uuid,可以在auto.cnf中看到

    2)ransation_id是一个序列数字,自动生成.

  1. 不支持非事务引擎(MYisam),因为可能会导致多个gtid分配给同一个事务
  2. create table ... select 语句不支持(主库语法报错)
  3. create/drop temporary table 语句不支持
  4. 必须使用enforce-gtid-consistency参数
  5. sql-slave-skip-counter不支持(传统的跳过错误方式)
  6. GTID复制环境中必须要求统一开启和GTID或者关闭GTID
  7. 在mysql 5.6.7之前,使用mysql_upgrade命令会出现问题
2. 基于GTIDs的配置