2013-04 淘宝张瑞:阿里数据库关键技术(DTCC2013)

文字内容
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 谢谢