Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,800 views

Published on

  • Was a little hesitant about using ⇒⇒⇒WRITE-MY-PAPER.net ⇐⇐⇐ at first, but am very happy that I did. The writer was able to write my paper by the deadline and it was very well written. So guys don’t hesitate to use it.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • ⇒⇒⇒WRITE-MY-PAPER.net ⇐⇐⇐ has really great writers to help you get the grades you need, they are fast and do great research. Support will always contact you if there is any confusion with the requirements of your paper so they can make sure you are getting exactly what you need.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×