SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
MySQL多机房容灾设计

  淘宝核心系统研发 彭立勋       	

      @plinux	

     2012-12-08  	

跨机房同步的原因

•    机房更靠近用户,提升用户体验	

•    容灾,防止整机房崩溃后系统不可用	

•    机房满载,拓展容量	

•    不同业务共享、相互推送数据	





                           2
跨机房同步的类型

•  一写多读	

•  多写一读	

•  到处可写	





                        3
跨机房同步的方案

•  应用层:	

程序写多个库,以多数成功后返回	

•  MySQL 层:	

MySQL Replication [Master-Slave]	

中间件 [Tungsten, Otter, Erosa, DRC, Transfer]	

Multi-Source Replication [MariaDB]	

•  引擎层:	

InnoDB Redo Replication [In the further]	


                                                 4
一写多读

•    一写多读符合 MySQL Master-Slave 架构模型	

•    设定一个主机房,接收所有的写请求	

•    设定多个读机房,接收就近的用户读请求	

•    场景:读多写少,或写集中的系统	


•  注意:及时性要求高的读	

      应该发生在Master	



                                         5
多写一读(1)

•  如果备机房机器数与主机房相同,则可以使用
   Master-Slave 架构 [资源利用率低]	

•  改进:单机多实例,单机利用率提升 [维护成本也
   提高]	

•  继续改进:单机可以配置多路 Master [Multi-
   Master, 中间件]	

•  场景:汇总数据进行分析 (OLAP)	

          利用大容量主机进行备份	



                              6
多写一读(2)

•  如果不同的 Master 之间存在相同的表名如何?	

•  答:只要表结构相同,没有相同的数据(例如
   唯一键相同、所有列相同),不会有任何冲突
   。建议在一个复制网络内的所有实例,ID序列
   不要相同。	

•  经过分库后不同的Master库名不同但表名相同
   如何汇总?	

•  答:Slave可以rewrite库名和表名	

     的映射关系,把不同库/表的操作	

     重写到指定的表	

                                  7
多处可写(1)

•  最常见的需求是任意机房可读可写	


•    如何规避数据冲突?	

•    1.划分ID段 [每个实例划分一段]	

•    2.错开ID序列 [每个实例取模不同]	

•    3.业务错开 [每个实例负责不同的表
     集]	




                              8
多处可写(2)

•  注意:读取及时性要求高的数据应
   该发生在写此数据的节点	


•  场景:利用公用主机作为整集群的在
   线备用主机,多机房要求写入数据
   并读取其他机房数据	





                      9
Multi-Source Replication

•  MariaDB 10.0 以上版本: Link	

•  Transfer 2.0 以上版本: Link	

•  独立Patch (5.5.18): Link	





                                10
Multi-Source Replication
•    CHANGE MASTER ["connection_name"] ...
•    FLUSH RELAY LOGS ["connection_name"]
•    MASTER_POS_WAIT(....,["connection_name"])
•    RESET SLAVE ["connection_name"]
•    SHOW RELAYLOG ["connection_name"] EVENTS
•    SHOW SLAVE ["connection_name"] STATUS
•    SHOW ALL SLAVES STATUS
•    START SLAVE ["connection_name"...]
•    START ALL SLAVES ...
•    STOP SLAVE ["connection_name"] ...
•    STOP ALL SLAVES ...                         11
Multi-Source Replication
•    set @@default_master_connection='';
•    show status like 'Slave_running';
•    set @@default_master_connection='other_connection';
•    show status like 'Slave_running';

•  兼容原生单Master命令,default_master_connection
   变量可以指定当前操作的通道,使用单通道的命令操作指
   定通道。




                                                           12
广而告之
•  Flashback 工具: Link [新增-T参数过滤表]	

•  InnoDB 建表设定初始大小: Link [CREATE TABLE 新增
   datafile_initial_size 参数]	


•  淘宝MySQL开源站点: mysql.taobao.org
•  有功能需求或报告patch bug: penglixun@gmail.com




                                            13
提问时间


  	

谢谢大家!


         14

Contenu connexe

Tendances

RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門Will Huang
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎frogd
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化Jinrong Ye
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1Drake Huang
 
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James Liu
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James Liu[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James Liu
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James LiuDrupal Taiwan
 
Openstack nova
Openstack novaOpenstack nova
Openstack novaYong Luo
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验Jinrong Ye
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管Will Huang
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结redhat9
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWill Huang
 
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110bngoogle
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)Will Huang
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2redhat9
 

Tendances (20)

RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
 
Mesos intro
Mesos introMesos intro
Mesos intro
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1
 
Mysql Replication
Mysql ReplicationMysql Replication
Mysql Replication
 
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James Liu
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James Liu[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James Liu
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--James Liu
 
Openstack nova
Openstack novaOpenstack nova
Openstack nova
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
Kafka in Depth
Kafka in DepthKafka in Depth
Kafka in Depth
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, Kubernetes
 
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 

En vedette

DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort Lixun Peng
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复Lixun Peng
 
内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用Lixun Peng
 
内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能Lixun Peng
 
MySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APIMySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APILixun Peng
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程Lixun Peng
 
Performance of fractal tree databases
Performance of fractal tree databasesPerformance of fractal tree databases
Performance of fractal tree databasesLixun Peng
 
Alibaba patches in MariaDB
Alibaba patches in MariaDBAlibaba patches in MariaDB
Alibaba patches in MariaDBLixun Peng
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践Lixun Peng
 
Multi Data Center Strategies
Multi Data Center StrategiesMulti Data Center Strategies
Multi Data Center StrategiesSteven Francia
 
Art tattoo.....
Art tattoo.....Art tattoo.....
Art tattoo.....verka 123
 
Which Customers are You Building the Right Product For PCA9
Which Customers are You Building the Right Product For PCA9Which Customers are You Building the Right Product For PCA9
Which Customers are You Building the Right Product For PCA9Paul Teich
 
Vabatahtlik - ori või liider?
Vabatahtlik - ori või liider?Vabatahtlik - ori või liider?
Vabatahtlik - ori või liider?Aljona Galazan
 
Total learning: Repicturing learning at Getty Images
Total learning: Repicturing learning at Getty Images Total learning: Repicturing learning at Getty Images
Total learning: Repicturing learning at Getty Images Brightwave Group
 
Maya research program field school photo album
Maya research program field school photo albumMaya research program field school photo album
Maya research program field school photo albumMaya Research Program
 

En vedette (19)

DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort
 
Time Machine
Time MachineTime Machine
Time Machine
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
 
内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用
 
内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能
 
MySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APIMySQL源码分析.02.Handler API
MySQL源码分析.02.Handler API
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
 
Performance of fractal tree databases
Performance of fractal tree databasesPerformance of fractal tree databases
Performance of fractal tree databases
 
Alibaba patches in MariaDB
Alibaba patches in MariaDBAlibaba patches in MariaDB
Alibaba patches in MariaDB
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践
 
Multi Data Center Strategies
Multi Data Center StrategiesMulti Data Center Strategies
Multi Data Center Strategies
 
Focus on Simplicity
Focus on Simplicity Focus on Simplicity
Focus on Simplicity
 
Han 315 En
Han 315 EnHan 315 En
Han 315 En
 
Art tattoo.....
Art tattoo.....Art tattoo.....
Art tattoo.....
 
Nhkc
NhkcNhkc
Nhkc
 
Which Customers are You Building the Right Product For PCA9
Which Customers are You Building the Right Product For PCA9Which Customers are You Building the Right Product For PCA9
Which Customers are You Building the Right Product For PCA9
 
Vabatahtlik - ori või liider?
Vabatahtlik - ori või liider?Vabatahtlik - ori või liider?
Vabatahtlik - ori või liider?
 
Total learning: Repicturing learning at Getty Images
Total learning: Repicturing learning at Getty Images Total learning: Repicturing learning at Getty Images
Total learning: Repicturing learning at Getty Images
 
Maya research program field school photo album
Maya research program field school photo albumMaya research program field school photo album
Maya research program field school photo album
 

Similaire à MySQL多机房容灾设计(with Multi-Master)

Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换mysqlops
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3redhat9
 
Mysql调优
Mysql调优Mysql调优
Mysql调优ken shin
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,DbaCevin Cheung
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 
MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用Michael Zhang
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面Tianwei Liu
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰Paul Chao
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul Chao
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践锐 张
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践jackbillow
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy clusterYiwei Ma
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 

Similaire à MySQL多机房容灾设计(with Multi-Master) (20)

Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3
 
Mysql调优
Mysql调优Mysql调优
Mysql调优
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面
 
Why use MySQL
Why use MySQLWhy use MySQL
Why use MySQL
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
A
AA
A
 

Plus de Lixun Peng

Double Sync Replication
Double Sync ReplicationDouble Sync Replication
Double Sync ReplicationLixun Peng
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理Lixun Peng
 
对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究Lixun Peng
 
A binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionA binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionLixun Peng
 
一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法Lixun Peng
 
中文分词算法设计
中文分词算法设计中文分词算法设计
中文分词算法设计Lixun Peng
 
DB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeDB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeLixun Peng
 

Plus de Lixun Peng (7)

Double Sync Replication
Double Sync ReplicationDouble Sync Replication
Double Sync Replication
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理
 
对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究
 
A binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionA binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting function
 
一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法
 
中文分词算法设计
中文分词算法设计中文分词算法设计
中文分词算法设计
 
DB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeDB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTree
 

MySQL多机房容灾设计(with Multi-Master)

  • 1. MySQL多机房容灾设计 淘宝核心系统研发 彭立勋  @plinux  2012-12-08 
  • 2. 跨机房同步的原因 •  机房更靠近用户,提升用户体验  •  容灾,防止整机房崩溃后系统不可用  •  机房满载,拓展容量  •  不同业务共享、相互推送数据  2
  • 4. 跨机房同步的方案 •  应用层:  程序写多个库,以多数成功后返回  •  MySQL 层:  MySQL Replication [Master-Slave]  中间件 [Tungsten, Otter, Erosa, DRC, Transfer]  Multi-Source Replication [MariaDB]  •  引擎层:  InnoDB Redo Replication [In the further]  4
  • 5. 一写多读 •  一写多读符合 MySQL Master-Slave 架构模型  •  设定一个主机房,接收所有的写请求  •  设定多个读机房,接收就近的用户读请求  •  场景:读多写少,或写集中的系统  •  注意:及时性要求高的读  应该发生在Master  5
  • 6. 多写一读(1) •  如果备机房机器数与主机房相同,则可以使用 Master-Slave 架构 [资源利用率低]  •  改进:单机多实例,单机利用率提升 [维护成本也 提高]  •  继续改进:单机可以配置多路 Master [Multi- Master, 中间件]  •  场景:汇总数据进行分析 (OLAP)  利用大容量主机进行备份  6
  • 7. 多写一读(2) •  如果不同的 Master 之间存在相同的表名如何?  •  答:只要表结构相同,没有相同的数据(例如 唯一键相同、所有列相同),不会有任何冲突 。建议在一个复制网络内的所有实例,ID序列 不要相同。  •  经过分库后不同的Master库名不同但表名相同 如何汇总?  •  答:Slave可以rewrite库名和表名  的映射关系,把不同库/表的操作  重写到指定的表  7
  • 8. 多处可写(1) •  最常见的需求是任意机房可读可写  •  如何规避数据冲突?  •  1.划分ID段 [每个实例划分一段]  •  2.错开ID序列 [每个实例取模不同]  •  3.业务错开 [每个实例负责不同的表 集]  8
  • 9. 多处可写(2) •  注意:读取及时性要求高的数据应 该发生在写此数据的节点  •  场景:利用公用主机作为整集群的在 线备用主机,多机房要求写入数据 并读取其他机房数据  9
  • 10. Multi-Source Replication •  MariaDB 10.0 以上版本: Link  •  Transfer 2.0 以上版本: Link  •  独立Patch (5.5.18): Link  10
  • 11. Multi-Source Replication •  CHANGE MASTER ["connection_name"] ... •  FLUSH RELAY LOGS ["connection_name"] •  MASTER_POS_WAIT(....,["connection_name"]) •  RESET SLAVE ["connection_name"] •  SHOW RELAYLOG ["connection_name"] EVENTS •  SHOW SLAVE ["connection_name"] STATUS •  SHOW ALL SLAVES STATUS •  START SLAVE ["connection_name"...] •  START ALL SLAVES ... •  STOP SLAVE ["connection_name"] ... •  STOP ALL SLAVES ... 11
  • 12. Multi-Source Replication •  set @@default_master_connection=''; •  show status like 'Slave_running'; •  set @@default_master_connection='other_connection'; •  show status like 'Slave_running'; •  兼容原生单Master命令,default_master_connection 变量可以指定当前操作的通道,使用单通道的命令操作指 定通道。 12
  • 13. 广而告之 •  Flashback 工具: Link [新增-T参数过滤表]  •  InnoDB 建表设定初始大小: Link [CREATE TABLE 新增 datafile_initial_size 参数]  •  淘宝MySQL开源站点: mysql.taobao.org •  有功能需求或报告patch bug: penglixun@gmail.com 13