阿里数据库关键技术

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. DTCC2013 阿里数据库关键技术 2009-8-22 张瑞  @  Taobao
2. 个人介绍 •  •  •  •  •  •  •  DTCC2013 张瑞,HelloDBA,Oracle ACE 2005年加入阿里数据库团队 Oracle DBA -> MySQL DBA -> DA 2012年,参与翻译《Expert Oracle Exadata》 个人博客:Hello Database(hellodb.net) AskHelloDBA技术论坛 新浪微博:hellodba
3. 数据库关键技术 •  •  •  •  •  •  系统软硬件概况 分布式数据库访问层 数据库自动扩容工具 淘宝MySQL高可用 阿里MySQL工具集 应用和系统优化 DTCC2013
4. 双11数据 •  全天成交额:191亿 •  全天订单数:1亿笔 •  数据库峰值数据: –  单机QPS:40000 –  单机TPS:10000 –  单机逻辑读:5000000 –  单机物理读:8000 DTCC2013
5. 数据库软硬件 •  硬件 –  PC Server –  Intel E5645 –  48G或96G Memory –  12 SAS或8 SSD + 2 SAS –  PCI-E Flash卡 •  数据库 –  MySQL 5.5 DTCC2013
6. 数据库存储方案 •  存储方案 –  Flashcache –  Flash卡+SAS –  SSD+SAS –  SAS •  选择标准 –  数据大小 –  性能要求 –  应用模型 DTCC2013
7. 数据库架构 •  可扩展架构 –  分库分表 –  读写分离 •  高可用架构 –  M-M –  M-M-S •  实例管理 –  单机多实例 –  资源隔离 DTCC2013
8. MySQL 5.5 参数 •  •  •  •  •  •  •  •  •  •  •  •  •  •  •  innodb_flush_log_at_trx_commit=1 innodb_thread_concurrency=64 innodb_adaptive_hash_index_partitions=8 innodb_buffer_pool_instances=8 innodb_flush_method=O_DIRECT innodb_adaptive_flushing=1 innodb_adaptive_flushing_method=keep_average innodb_stats_on_metadata=0 innodb_use_native_aio=1 innodb_flush_neighbor_pages=0 innodb_change_buffering=inserts transaction-isolation=READ-COMMITTED Innodb_old_blocks_time=1000 sync_binlog=1 binlog-format=rows DTCC2013
9. 分布式数据中间层(TDDL) 分库分表路由 读写权重调整 主备切换 无中间层 APP TDDL Master RW ASYNC Master R-Only DTCC2013 Master RW 分库1 1.  Master和Master-Readonly的mysql部署在不同机房 2.  异步复制,有数据延迟 3.  分库分表 ASYNC 分库2 Master R-Only
10. 数据库扩容方案 •  集群扩容 –  数据库水平扩展,2主2备->4主4备 –  针对TPS容量不足的核心数据库 –  扩容后缩减比较困难 •  机器升级 –  升级为SSD,提升IO性能 –  内存扩容,提升buffer命中率 •  增加备库 –  增加MySQL备库,应用读写分离 –  针对QPS容量不足的场景 –  扩容和缩减很方便 DTCC2013
11. 数据库自动扩容 RW RW RO DTCC2013 DB1 DB2 DB1 DB2 DB1 DB2 DB1 DB2 DBFree是数据库自动扩容/缩减工具 1.  2.  3.  4.  5.  6.  7.  8.  搭建备库 主库停写 检查主备一致 停止新旧复制 修改复制关系 删除冗余DB 推送分库规则 打开主库读写
12. MySQL高可用(TMHA) App DTCC2013 SwitchManager 动态数据源(TDDL) ZooKeeper /Agent1 /Agent2 Master Slave Agent Agent 异常切换过程: 1.  Master宕机,zookeeper的agent1结点消失 2.  Agent2得知watcher事件,记录异常,创建异常结点 3.  SwitchManager获取最新的异常结点,再次确认状态 4.  主备库切换:推送TDDL配置,将新主库置为可写
13. MySQL高可用(TMHA) •  切换类型 –  正常切换 –  强制切换 –  批量切换 •  部署方式 –  MySQL主备库部署在不同机房 –  Zookeeper部署在三个机房 •  优点 –  多机房部署可实现IDC容灾 DTCC2013
14. TMHA如何保证数据一致性 •  传统思路 –  共享存储 –  半同步 •  无共享存储 –  innodb_flush_log_at_trx_commit=1 –  sync_binlog=1 –  innodb_support_xa=true DTCC2013
15. 如何保证数据一致性 DTCC2013 •  Master宕机后,三个选择: 1.  Slave立即提供服务,存在数据不一致风险 2.  Slave不提供服务,等待master恢复,保证数据一致 3.  Slave提供部分服务(比如只能新建,不许修改),等待 master恢复后,保证数据一致 •  TMHA的处理策略: 1.  2.  3.  4.  5.  Slave立即提供服务 Slave(旧) -> Master(新) Master(旧) Rollback Master(旧) -> Slave(新) Master(新) Replay
16. Rollback & Replay DTCC2013 Master Slave Rollback Replay Replay •  Rollback –  Master回滚,保证与Slave一致 –  重新恢复主备复制关系 •  Replay –  Slave重放,减少数据丢失 –  冲突检测机制
17. MySQL并行复制 •  MySQL并行复制 –  三种并发模式:事务,表或库 –  兼容原生复制,可随时切换 –  语法:start slave multi_sql_thread DTCC2013
18. MySQL并行复制 show processlist可看到多个复制线程 DTCC2013
19. 阿里工具集 DTCC2013 •  orzdba/orzcluster:MySQL实时性能监控工具 •  orztop:MySQL实时SQL监控工具 •  rollback:MySQL binlog回滚工具 •  relay-fetch:slave预读,提升复制性能 •  slave-error-handle:复制错误处理工具 •  tbsql:数据库日常管理工具集 •  tbsync:主备数据对比工具 •  myddl:在线表结构修改 ……
20. 阿里工具集 DTCC2013
21. 应用优化 •  减库存,抢红包场景 –  大量并发更新导致行锁等待严重 –  触发MySQL死锁检测,CPU耗尽 –  thread running剧烈波动,RT上升 •  MySQL补丁: –  关闭死锁检测 –  合并更新 •  应用优化: –  库存或红包拆分 –  更新cache,异步写DB DTCC2013
22. 系统优化 •  无处不在的cache –  降低DB的读压力 –  Cache失效怎么办 •  系统解耦 –  减少系统依赖 –  保护核心应用 •  系统保护 –  降级开关 –  自动限流 DTCC2013
23. 结束语 DTCC2013 路走对了,就不怕远! 我的联系方式: 微博:hellodba 博客:www.hellodb.net 邮件:freezr@gmail.com
24. DTCC2013 谢谢

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-23 07:08
浙ICP备14020137号-1 $Map of visitor$