面试题答案
一键面试架构设计
- 读写分离:
- 在大多数Web应用场景中,读操作通常远多于写操作。例如新闻网站,用户大量浏览新闻(读操作),而编辑发布新闻(写操作)相对较少。通过读写分离,主库负责写操作,从库负责读操作。可以根据读请求的负载情况,合理分配从库数量。比如在流量高峰时段,增加从库分担读压力,保证读性能。同时,从库间采用负载均衡技术(如HAProxy),均匀分配读请求,避免单个从库压力过大。
- 级联复制:
- 对于大型分布式系统,数据中心分布在不同地域时,可采用级联复制。例如一个跨国公司,在全球多个地区有数据中心。主库在总部数据中心,一级从库分布在各区域数据中心,二级从库再在区域内进一步部署。这样既减少了主库直接连接的从库数量,降低主库压力,又保证了各地区数据的高可用性和相对低延迟的复制。
- 双活或多活架构:
- 在对可用性要求极高的金融交易系统中,可构建双活或多活架构。例如两个数据中心都可同时处理读写操作,数据通过双向复制保持同步。当一个数据中心出现故障时,另一个数据中心能无缝接管全部业务,保证业务的连续性。但这种架构需要解决数据冲突问题,可通过设置唯一ID生成策略等方式避免。
参数调优
- 主库参数:
sync_binlog
参数,对于高可用性要求极高且性能允许一定延迟的场景,如银行核心交易系统,可设置为1,确保每次事务提交都同步二进制日志到磁盘,保证数据不丢失。而对于性能敏感且能承受一定数据丢失风险的场景,如一些小型电商的非核心业务,可设置为0或较大数值,减少I/O操作提升性能。innodb_flush_log_at_trx_commit
参数,类似地,对于高可用性优先场景设为1,每次事务提交都将日志写入磁盘;性能优先场景可设为2,每秒写入磁盘一次,或者设为0,由操作系统控制写入时机。
- 从库参数:
slave_parallel_workers
参数,在从库配置多线程复制时,根据服务器CPU核数和负载情况合理设置。例如在多核服务器且复制任务较重的情况下,可适当增大此参数值,让从库并行应用中继日志中的事件,提高复制效率,减少主从延迟,提升性能同时保证数据一致性和高可用性。
运维策略
- 监控与预警:
- 建立完善的监控体系,监控主从延迟、数据库负载、复制状态等关键指标。例如使用Zabbix监控主从库的
Seconds_Behind_Master
值,当主从延迟超过一定阈值(如30秒)时,通过邮件或短信及时通知运维人员。这样能在影响业务前及时发现并处理潜在问题,保障高可用性。
- 建立完善的监控体系,监控主从延迟、数据库负载、复制状态等关键指标。例如使用Zabbix监控主从库的
- 定期巡检与优化:
- 定期对数据库进行巡检,检查数据库文件系统空间、索引健康状况等。例如定期使用
CHECK TABLE
语句检查表的完整性,使用ANALYZE TABLE
优化表统计信息,确保查询性能。对于从库,可以定期进行数据一致性校验,如使用pt-table-checksum
工具,发现数据不一致及时修复,保证高可用性和数据准确性。
- 定期对数据库进行巡检,检查数据库文件系统空间、索引健康状况等。例如定期使用
- 故障切换与恢复:
- 制定详细的故障切换预案,当主库发生故障时,能快速将业务切换到从库。例如使用MHA(Master High Availability)工具,自动检测主库故障并进行主从切换,选举新的主库,同时将其他从库重新指向新主库,尽量缩短业务中断时间,保障高可用性。同时,对故障主库进行修复后,可重新加入复制架构作为从库,通过全量复制和增量复制快速同步数据。