面试题答案
一键面试拓扑结构设计
- 主从复制拓扑:
- 采用一主多从的基本拓扑结构。主节点负责处理所有业务模块的写操作,从节点分担读操作。对于写频率高且对数据一致性要求极高的业务模块,尽量将读操作也安排在主节点附近(如通过读写分离工具优先分配到主节点)。
- 为不同业务模块划分专门的从节点,例如,对于读频率高但对数据一致性要求相对较低的业务模块,分配一组从节点专门处理其读请求,减少对主节点及其他高一致性业务模块读操作的影响。
- 环形复制拓扑(可选):
- 在部分对数据一致性要求较高且读操作分散在不同地理位置的业务模块场景下,可以考虑引入环形复制拓扑。在环形拓扑中,每个节点既是主节点也是从节点,数据在环中依次传递,这样可以减少数据同步延迟,同时提高数据的可用性。
资源分配
- 硬件资源:
- 主节点:分配足够的CPU、内存和磁盘I/O资源,以应对大量的写操作。例如,为写频率高的业务模块,确保主节点有高性能的SSD磁盘,以降低写操作的I/O延迟。同时,根据业务量合理配置CPU核心数和内存大小,保证写操作的高效处理。
- 从节点:对于读频率高的业务模块对应的从节点,重点优化网络带宽和磁盘I/O,以快速响应读请求。可以使用大容量的机械硬盘来存储数据,同时配置高速网络连接,确保数据能快速传输给客户端。
- 数据库资源:
- 连接池:为不同业务模块配置独立的连接池。对于写频率高的业务模块,设置较小的连接池大小,避免过多的写连接占用资源;对于读频率高的业务模块,适当增大连接池大小,以满足大量读请求的并发处理。
- 缓存:在从节点上,对于读频率高且数据变化不频繁的业务模块,可以使用Memcached或Redis等缓存技术。从缓存中直接读取数据,减少对数据库的读压力。
参数调优
- 主节点参数:
innodb_flush_log_at_trx_commit
:对于对数据一致性要求极高的业务模块,设置为1,确保每次事务提交时都将日志写入磁盘;对于对一致性要求相对较低的业务模块,可以设置为2或0,提高写性能,但会增加数据丢失风险。sync_binlog
:同样,对于高一致性业务模块设置为1,保证二进制日志同步到磁盘;对于其他业务模块可设置为大于1的值,减少I/O操作。
- 从节点参数:
read_only
:设置为1,确保从节点只能进行读操作,防止误写入。relay_log_recovery
:设置为1,在从节点发生故障重启后,自动重新启动中继日志应用,保证数据复制的连续性。
故障恢复策略
- 主节点故障:
- 自动故障转移:使用MHA(Master High Availability)或Orchestrator等工具实现主节点的自动故障转移。这些工具可以监控主节点的状态,当主节点发生故障时,自动选举一个从节点晋升为主节点,并重新配置其他从节点指向新的主节点。
- 数据恢复:如果主节点故障导致数据丢失,需要根据备份和二进制日志进行数据恢复。可以定期对主节点进行全量备份,并结合二进制日志进行增量恢复,确保数据的完整性。
- 从节点故障:
- 重新加入复制:从节点故障恢复后,使用
CHANGE MASTER TO
语句重新配置其连接到主节点或其他从节点,恢复数据复制。 - 数据一致性检查:在从节点重新加入复制后,使用
pt-table-checksum
等工具检查主从节点之间的数据一致性,确保数据同步正常。如果发现数据不一致,根据具体情况进行数据修复。
- 重新加入复制:从节点故障恢复后,使用