面试题答案
一键面试主从复制延迟对系统高可用性的具体影响
- 数据一致性问题:
- 从库数据滞后于主库,在读取从库数据时,可能获取到旧数据,导致业务逻辑出现偏差。例如在电商系统中,用户下单后,从库可能还未更新库存数据,其他用户查询时仍显示有库存,引发超卖问题。
- 读操作负载均衡失效:
- 若系统依赖从库分担读压力,复制延迟可能使从库数据不准确,影响读性能。如大型网站的内容展示,从库延迟可能导致部分用户看到旧的文章或图片。
- 故障切换复杂:
- 当主库发生故障,需要切换到从库时,延迟的从库可能丢失部分数据,导致业务数据不完整。比如在金融交易系统中,主库故障切换到延迟的从库,可能造成部分交易记录丢失。
不同场景下复制延迟问题的优化措施
- 网络配置方面:
- 提升网络带宽:增加主从服务器之间的网络带宽,减少数据传输时间。例如将 100Mbps 网络升级到 1Gbps 或更高。
- 优化网络拓扑:简化网络架构,减少网络节点和跳数,降低网络延迟。避免复杂的多级路由,采用扁平化网络结构。
- 使用高速网络协议:例如使用 RDMA(远程直接内存访问)协议,可显著减少网络传输的 CPU 开销,加快数据传输。
- 数据库参数调整方面:
- 调整复制线程参数:
slave_parallel_workers
参数,增加从库并行复制线程数,MySQL 5.7 引入的并行复制功能可按库、按表或按事务组并行应用中继日志,加快复制速度。例如设置为 8,让从库同时处理 8 个复制任务。innodb_flush_log_at_trx_commit
参数,该参数控制 InnoDB 存储引擎将日志缓冲区写入日志文件并同步到磁盘的频率。将其设置为 2(每秒一次同步),可在一定程度上提高性能,但会增加崩溃时丢失数据的风险,需权衡利弊。
- 调整缓存参数:
- 增大
innodb_buffer_pool_size
,提高 InnoDB 存储引擎的数据缓存能力,减少磁盘 I/O。根据服务器内存大小,可将其设置为物理内存的 60% - 80%。 - 合理设置
query_cache_type
和query_cache_size
,对频繁执行且结果不常变化的查询进行缓存,减少查询执行时间,但要注意查询缓存的维护开销,避免过度使用。
- 增大
- 调整复制线程参数:
- 架构设计方面:
- 采用多主多从架构:部署多个主库和从库,将不同业务数据分布在不同主库上,从库同时复制多个主库的数据,分散复制压力。例如电商系统中,商品数据和用户数据分别放在不同主库,各自有对应的从库。
- 引入中间件:使用如 MyCAT、ShardingSphere 等数据库中间件,实现读写分离、负载均衡和数据分片。中间件可根据从库复制状态动态分配读请求,避免请求到延迟高的从库。
- 优化业务逻辑:对于对数据一致性要求极高的业务操作,直接读主库,确保数据实时性。例如金融交易的关键信息查询,优先读主库,而对于一些允许一定延迟的统计类业务读从库。