面试题答案
一键面试主从切换基本流程
- 故障检测:通过监控系统(如Zabbix、Prometheus等)持续监测主库的关键指标,如数据库服务状态、网络连接、磁盘I/O等。一旦发现主库出现故障(如进程崩溃、网络中断等),监控系统发出警报。
- 确认故障:自动化脚本或运维人员收到警报后,进行二次确认,避免误报。例如,尝试重新连接主库,检查相关日志等。
- 选择新主库:从当前的从库节点中选择一个合适的节点作为新的主库。选择标准可以包括从库的延迟情况(通过SHOW SLAVE STATUS查看Seconds_Behind_Master值)、硬件性能、负载情况等。一般选择延迟最小且性能较好的从库。
- 提升从库为主库:在选定的从库上执行命令停止复制(STOP SLAVE),然后将其设置为主库(如执行RESET MASTER,不同版本命令可能略有差异)。
- 重新配置从库:对于其他从库,需要重新配置它们指向新的主库。这包括获取新主库的二进制日志文件名和位置(SHOW MASTER STATUS),然后在从库上使用CHANGE MASTER TO命令重新设置主库信息,最后启动复制(START SLAVE)。
- 通知应用:告知应用程序新主库的地址和端口等连接信息。这可以通过修改配置文件、使用配置中心(如Apollo、Nacos)动态更新配置等方式实现。
常用技术手段
- MHA(Master High Availability):是一套优秀的MySQL高可用方案,由MHA Manager和MHA Node组成。Manager负责监控和管理整个集群,Node部署在各个MySQL节点上。当主库发生故障时,MHA Manager能快速检测到,并自动选择合适的从库提升为主库,同时协调其他从库重新指向新主库。
- Orchestrator:是由GitHub开源的MySQL集群管理工具,具备自动故障检测、主从切换、拓扑管理等功能。它通过在每个MySQL节点上部署Agent来收集信息,实现对集群的统一管理。可以通过Web界面方便地查看集群状态和执行相关操作。
- Keepalived + VIP:Keepalived是一个基于VRRP协议的高可用软件。在MySQL主从架构中,可以为MySQL主库配置一个虚拟IP(VIP)。主库正常时,VIP绑定在主库服务器上;当主库故障时,Keepalived通过VRRP协议将VIP漂移到新的主库节点,应用程序通过访问VIP来连接MySQL,无需修改配置中的IP地址,实现透明切换。
- 基于脚本实现:可以编写自定义的Shell脚本或Python脚本,结合监控工具(如Nagios、Ganglia)的告警机制,实现主从切换。脚本中包含故障检测逻辑、从库选择逻辑、主从切换命令执行等部分。这种方式灵活性高,但开发和维护成本相对较高,需要对MySQL和脚本编程有深入了解。