基于mysql开放复制协议的同步扩展

45
1 简朝阳 @mbaobao.com 2011.06.12 基于MySQL开放复制协议的数据同步

Upload: sky-jian

Post on 17-Dec-2014

5.691 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 基于MySQL开放复制协议的同步扩展

1

简朝阳@mbaobao.com

2011.06.12

基于MySQL开放复制协议的数据同步

Page 2: 基于MySQL开放复制协议的同步扩展

2

基于MySQL开放复制协议的数据同步

简朝阳(sky000)

Oracle ACE (Expertise MySQL)

技术保障部 @麦包包

http://isky000.com

http://twitter.com/sky000

http://weibo.com/isky000

Page 3: 基于MySQL开放复制协议的同步扩展

3

基于MySQL开放复制协议的数据同步

主题纲要

原生现状介绍

Page 4: 基于MySQL开放复制协议的同步扩展

4

基于MySQL开放复制协议的数据同步

主题纲要

原生现状介绍

现实业务需求

Page 5: 基于MySQL开放复制协议的同步扩展

5

基于MySQL开放复制协议的数据同步

主题纲要

原生现状介绍

现实业务需求

应该如何扩展

Page 6: 基于MySQL开放复制协议的同步扩展

6

基于MySQL开放复制协议的数据同步

主题纲要

原生现状介绍

现实业务需求

应该如何扩展

架构示例展示

Page 7: 基于MySQL开放复制协议的同步扩展

7

原生 MySQL Replication 现状

原生现状

Page 8: 基于MySQL开放复制协议的同步扩展

8

原生 MySQL Replication 现状

原生现状

实现机制

Page 9: 基于MySQL开放复制协议的同步扩展

9

原生 MySQL Replication 现状

原生现状

实现机制• 3个线程:2 个 io 线程,1个 sql线程• 2种日志:binlog,relaylog

• 1种实现:全程异步

Page 10: 基于MySQL开放复制协议的同步扩展

10

原生 MySQL Replication 现状

原生现状

实现机制• 3个线程:2 个 io 线程,1个 sql线程• 2种日志:binlog,relaylog

• 1种实现:全程异步

优点

Page 11: 基于MySQL开放复制协议的同步扩展

11

原生 MySQL Replication 现状

原生现状

实现机制• 3个线程:2 个 io 线程,1个 sql线程• 2种日志:binlog,relaylog

• 1种实现:全程异步

• 稳定可靠:已经历多年实践验证• 代码集成:和 MySQL Server 绑定• 维护简单:配置简单,信息清晰• 能耗较低:单线程,Slave 端请求

优点

Page 12: 基于MySQL开放复制协议的同步扩展

12

原生 MySQL Replication 现状

原生现状

实现机制• 3个线程:2 个 io 线程,1个 sql线程• 2种日志:binlog,relaylog

• 1种实现:全程异步

• 稳定可靠:已经历多年实践验证• 代码集成:和 MySQL Server 绑定• 维护简单:配置简单,信息清晰• 能耗较低:单线程,Slave 端请求

优点

缺点

Page 13: 基于MySQL开放复制协议的同步扩展

13

原生 MySQL Replication 现状

原生现状

实现机制• 3个线程:2 个 io 线程,1个 sql线程• 2种日志:binlog,relaylog

• 1种实现:全程异步

• 稳定可靠:已经历多年实践验证• 代码集成:和 MySQL Server 绑定• 维护简单:配置简单,信息清晰• 能耗较低:单线程,Slave 端请求

优点

缺点

• 数据可能丢失:异步机制无法保证安全• 主从容易延时:单线程串行机制造成• 1从只能1个主:避免可能的数据冲突?• Master切换难:日志ID不是全局唯一

Page 14: 基于MySQL开放复制协议的同步扩展

14

现实场景对 Replication的需求

现实需求

Page 15: 基于MySQL开放复制协议的同步扩展

15

现实场景对 Replication的需求

现实需求

无丢失

Page 16: 基于MySQL开放复制协议的同步扩展

16

现实场景对 Replication的需求

现实需求

无丢失• 日志:故障情况下不丢失日志内容• 数据:故障情况下不丢失数据

Page 17: 基于MySQL开放复制协议的同步扩展

17

现实场景对 Replication的需求

现实需求

无丢失• 日志:故障情况下不丢失日志内容• 数据:故障情况下不丢失数据

低延时

Page 18: 基于MySQL开放复制协议的同步扩展

18

现实场景对 Replication的需求

现实需求

无丢失• 日志:故障情况下不丢失日志内容• 数据:故障情况下不丢失数据

低延时• 主从延时小:希望Master 与Slave 之间数据延时较小,更有效的提升扩展性

Page 19: 基于MySQL开放复制协议的同步扩展

19

现实场景对 Replication的需求

现实需求

无丢失• 日志:故障情况下不丢失日志内容• 数据:故障情况下不丢失数据

低延时• 主从延时小:希望Master 与Slave 之间数据延时较小,更有效的提升扩展性

易切换

Page 20: 基于MySQL开放复制协议的同步扩展

20

现实场景对 Replication的需求

现实需求

无丢失• 日志:故障情况下不丢失日志内容• 数据:故障情况下不丢失数据

低延时• 主从延时小:希望Master 与Slave 之间数据延时较小,更有效的提升扩展性

易切换• 异常切换快:Slave能够在无人工干预的环境下快速更换 Master的,并确保数据无丢失

Page 21: 基于MySQL开放复制协议的同步扩展

21

现实场景对 Replication的需求

现实需求

无丢失• 日志:故障情况下不丢失日志内容• 数据:故障情况下不丢失数据

低延时• 主从延时小:希望Master 与Slave 之间数据延时较小,更有效的提升扩展性

易切换

多个主

• 异常切换快:Slave能够在无人工干预的环境下快速更换 Master的,并确保数据无丢失

Page 22: 基于MySQL开放复制协议的同步扩展

22

现实场景对 Replication的需求

现实需求

无丢失• 日志:故障情况下不丢失日志内容• 数据:故障情况下不丢失数据

低延时• 主从延时小:希望Master 与Slave 之间数据延时较小,更有效的提升扩展性

易切换

多个主

• 异常切换快:Slave能够在无人工干预的环境下快速更换 Master的,并确保数据无丢失

• 多主复制:能够让1个 Slave 从多个 Master 复制数据,实现数据合并

Page 23: 基于MySQL开放复制协议的同步扩展

23

我们该如何对 Replication 进行扩展

如何扩展

Page 24: 基于MySQL开放复制协议的同步扩展

24

我们该如何对 Replication 进行扩展

如何扩展

自行解析

Page 25: 基于MySQL开放复制协议的同步扩展

25

我们该如何对 Replication 进行扩展

如何扩展

自行解析• 可行性:协议开源• 目的性:易于控制(分拆/合并/持久化…)

• 必要性:避免入侵原生代码,方便后续升级

Page 26: 基于MySQL开放复制协议的同步扩展

26

我们该如何对 Replication 进行扩展

如何扩展

自行解析• 可行性:协议开源• 目的性:易于控制(分拆/合并/持久化…)

• 必要性:避免入侵原生代码,方便后续升级

中继缓冲

Page 27: 基于MySQL开放复制协议的同步扩展

27

我们该如何对 Replication 进行扩展

如何扩展

自行解析• 可行性:协议开源• 目的性:易于控制(分拆/合并/持久化…)

• 必要性:避免入侵原生代码,方便后续升级

• 易控制:合并,分拆,转发…

• 降低能耗:一个请求多个解析,解放主节点• 持久化:集中处理变更(备份/转发…)

• 易切换:日志不丢失,可全局控制

中继缓冲

Page 28: 基于MySQL开放复制协议的同步扩展

28

我们该如何对 Replication 进行扩展

如何扩展

自行解析• 可行性:协议开源• 目的性:易于控制(分拆/合并/持久化…)

• 必要性:避免入侵原生代码,方便后续升级

• 易控制:合并,分拆,转发…

• 降低能耗:一个请求多个解析,解放主节点• 持久化:集中处理变更(备份/转发…)

• 易切换:日志不丢失,可全局控制

中继缓冲

并行加载

Page 29: 基于MySQL开放复制协议的同步扩展

29

我们该如何对 Replication 进行扩展

如何扩展

自行解析• 可行性:协议开源• 目的性:易于控制(分拆/合并/持久化…)

• 必要性:避免入侵原生代码,方便后续升级

• 易控制:合并,分拆,转发…

• 降低能耗:一个请求多个解析,解放主节点• 持久化:集中处理变更(备份/转发…)

• 易切换:日志不丢失,可全局控制

中继缓冲

并行加载 • 高性能:多线程提高处理能力• 低延时:避免大事务阻塞问题• 易排错:一个错误不影响整体复制进度

Page 30: 基于MySQL开放复制协议的同步扩展

30

复制扩展后架构示例

示例扩展

Page 31: 基于MySQL开放复制协议的同步扩展

31

复制扩展后架构示例

示例扩展

准实时数据分析

Page 32: 基于MySQL开放复制协议的同步扩展

32

复制扩展后架构示例

示例扩展

准实时数据分析• 实时反映数据变化至数据分析中心• 合并多个数据源至单个目的数据库• 目标端可能不是 MySQL 数据库

Page 33: 基于MySQL开放复制协议的同步扩展

33

准实时数据分析系统架构示例

app1 app2 app3 app4… … … …App Cluster

Page 34: 基于MySQL开放复制协议的同步扩展

34

准实时数据分析系统架构示例

app1 app2 app3 app4… … … …App Cluster

… … …DB Cluster db1 db2 db3

Page 35: 基于MySQL开放复制协议的同步扩展

35

准实时数据分析系统架构示例

app1 app2 app3 app4… … … …App Cluster

… … …DB Cluster

Data Analyze Center

db1 db2 db3

昨日数据报表

凌晨低峰时期提取数据

Page 36: 基于MySQL开放复制协议的同步扩展

36

准实时数据分析系统架构示例

app1 app2 app3 app4… … … …App Cluster

… … …DB Cluster

Data Analyze Center

db1 db2 db3

Page 37: 基于MySQL开放复制协议的同步扩展

37

准实时数据分析系统架构示例

app1 app2 app3 app4… … … …App Cluster

… … …DB Cluster

Data Analyze Center

db1 db2 db3

BinlogSyncer

实时分析报表

Page 38: 基于MySQL开放复制协议的同步扩展

38

复制扩展后架构示例

示例扩展

准实时数据分析• 实时反映数据变化至数据分析中心• 合并多个数据源至单个目的数据库• 目标端可能不是 MySQL 数据库

高并发主读应用 • 写入量相对较少,数据相对静止• 读取请求特别多,并发量很高

Page 39: 基于MySQL开放复制协议的同步扩展

39

高并发主读系统架构示例

app1 app2 app3 app4… … … …App Cluster

Page 40: 基于MySQL开放复制协议的同步扩展

40

高并发主读系统架构示例

app1 app2 app3 app4… … … …App Cluster

Master

write

(all data)

Page 41: 基于MySQL开放复制协议的同步扩展

41

高并发主读系统架构示例

app1 app2 app3 app4… … … …App Cluster

Master

db3db2 db…db1

write

(all data)

each db with part of all dataRead DB Cluster :

同步所有日志

Page 42: 基于MySQL开放复制协议的同步扩展

42

高并发主读系统架构示例

app1 app2 app3 app4… … … …App Cluster

Master

db3db2 db…db1

write

(all data)

each db with part of all dataRead DB Cluster :

同步所有日志

read read

Page 43: 基于MySQL开放复制协议的同步扩展

43

高并发主读系统架构示例

app1 app2 app3 app4… … … …App Cluster

Master

db3db2 db…db1

write

(all data)

each db with part of all dataRead DB Cluster :

read read

Page 44: 基于MySQL开放复制协议的同步扩展

44

高并发主读系统架构示例

app1 app2 app3 app4… … … …App Cluster

Master

db3db2 db…db1

write

BinlogSyncer

read read

(all data)

each db with part of all dataRead DB Cluster :

Page 45: 基于MySQL开放复制协议的同步扩展

45

互动环节

Q & A

http://isky000.com

Thanks!