面试题答案
一键面试网络拓扑优化
- 专线连接:在主从服务器之间采用专线网络连接,减少网络延迟和丢包率,提高数据传输的稳定性和速度。相比普通公网,专线网络能够提供更可靠的网络环境,保障主从服务器之间复制数据的快速传输。
- 分布式部署:如果业务覆盖范围广,考虑将从服务器分布式部署在不同地理位置,靠近主要用户群体。这样可以降低客户端访问延迟,同时避免因单点网络故障导致数据复制中断。例如,对于全球业务,可在不同大洲设置从服务器节点。
- 冗余网络:为主从服务器之间的网络链路配置冗余,如采用双网卡、双交换机等方式。当一条链路出现故障时,备用链路能够迅速接管,确保数据复制不受影响,维持系统的高可用性。
复制参数调优
- sync_binlog:将该参数设置为1,确保每次事务提交时,MySQL都将二进制日志同步到磁盘。虽然这会略微降低写入性能,但能保证在系统崩溃时,二进制日志不会丢失,从而保障数据复制的完整性。
- innodb_flush_log_at_trx_commit:设置为1,每次事务提交时,InnoDB存储引擎将日志缓冲区的数据刷新到磁盘。这与sync_binlog配合,最大程度保证数据的持久性和一致性。
- slave_parallel_workers:根据从服务器的CPU核心数,合理设置该参数。开启并行复制,能够充分利用多核CPU的性能,加快从服务器应用中继日志的速度,提高复制效率。例如,如果从服务器是8核CPU,可以适当设置为4 - 6。
- master_info_repository 和 relay_log_info_repository:设置为TABLE,将主服务器信息和中继日志信息存储在表中,相比文件存储方式,在崩溃恢复时更可靠,能够减少复制失败的风险。
一致性校验机制
- 定期全量数据比对:在业务低峰期,定期对主从服务器的数据进行全量比对。可以使用工具如pt-table-checksum,它通过计算表的校验和来检测主从数据是否一致。一旦发现不一致,及时进行修复。
- 实时校验:在主服务器上,对每次数据更新操作,记录额外的校验信息(如哈希值),并将这些信息同步到从服务器。从服务器在应用中继日志时,重新计算校验信息并与主服务器传来的进行比对,实时发现数据不一致情况。
- 双写一致性校验:对于一些关键数据,在主服务器写入数据后,同时写入到一个可靠的第三方存储(如分布式缓存Redis),并记录版本号。从服务器在应用复制日志后,读取第三方存储中的数据和版本号进行比对,确保数据一致性。
- 心跳检测:主从服务器之间定期发送心跳包,以检测彼此的状态。如果从服务器长时间未收到主服务器的心跳,或主服务器发现从服务器心跳异常,及时进行告警并采取相应措施,如重新建立复制连接等,避免因连接问题导致数据不一致。