MST

星途 面试题库

面试题:MySQL 高可用复制配置策略要点

假设要构建一个高可用的 MySQL 复制环境,从推荐的配置策略角度,说明如何配置半同步复制以及遇到网络波动时怎样确保数据一致性和服务可用性。
41.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

配置半同步复制

  1. 安装插件: 在主库和从库上都需要安装半同步复制插件。在 MySQL 5.7 及以上版本中,半同步复制插件默认已经包含在安装包中。使用以下命令安装:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  1. 主库配置: 修改主库的配置文件(一般是 my.cnfmy.ini),添加或修改以下参数:
[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 10000 # 等待从库确认的超时时间,单位毫秒

重启 MySQL 服务使配置生效。然后可以通过以下命令确认配置是否生效:

SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';
SHOW VARIABLES LIKE 'rpl_semi_sync_master_timeout';
  1. 从库配置: 修改从库的配置文件,添加或修改以下参数:
[mysqld]
rpl_semi_sync_slave_enabled = 1

重启 MySQL 服务后,在从库上执行以下命令启动半同步复制:

CHANGE MASTER TO
    MASTER_HOST='主库IP',
    MASTER_USER='复制账号',
    MASTER_PASSWORD='复制密码',
    MASTER_LOG_FILE='主库二进制日志文件',
    MASTER_LOG_POS=主库二进制日志位置;
START SLAVE;

同样可以通过以下命令确认配置是否生效:

SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';

网络波动时确保数据一致性和服务可用性

  1. 设置合理的超时时间: 在配置半同步复制时,主库的 rpl_semi_sync_master_timeout 参数非常关键。当网络波动时,如果设置的超时时间过短,可能导致主库过早判定从库不可达而切换为异步复制,增加数据不一致风险;如果设置过长,又可能导致主库长时间等待从库确认,影响服务性能。需要根据实际网络情况进行合理调整,一般建议在几秒到几十秒之间,通过测试确定最佳值。
  2. 监控和预警: 使用 MySQL 自带的状态监控命令以及外部监控工具(如 Prometheus + Grafana)来实时监控复制状态。例如,通过 SHOW STATUS LIKE 'Rpl_semi_sync%'; 命令查看半同步复制相关状态变量,如 Rpl_semi_sync_master_clients 表示当前连接的半同步从库数量,Rpl_semi_sync_master_timeout_count 表示主库等待从库确认超时的次数等。设置合理的阈值,当状态指标异常时及时发出预警,以便运维人员及时处理。
  3. 故障转移策略: 当网络波动导致部分从库长时间无法响应时,可考虑采用多从库架构。主库可以等待多个从库中的部分从库确认写操作,而不是等待所有从库。例如,如果有 3 个从库,配置为只要 2 个从库确认即可,这样在其中一个从库因网络问题暂时不可用时,主库仍能正常工作,保证服务可用性。同时,对于故障的从库,当网络恢复后,要确保其能快速追赶上主库的数据,这可以通过优化从库的复制线程设置,如调整 slave_parallel_workers 参数来提高从库应用中继日志的并行度。
  4. 数据恢复和校验: 在网络波动结束后,对主从库的数据一致性进行校验。可以使用工具如 pt-table-checksum 来对比主从库的数据表,检测是否存在不一致的情况。如果发现不一致,根据具体情况可以使用 pt-table-sync 工具进行数据同步修复,确保数据的最终一致性。