MySQL从库负载均衡架构设计与LVS+Keepalived实践 1. 项目概述MySQL从库负载均衡架构设计在数据库高可用架构中MySQL主从复制是常见的部署方案。但随着业务增长单一的从库往往难以承受大量读请求压力。我们采用LVSKeepalived组合方案实现了MySQL从库的负载均衡与高可用。这套架构的核心价值在于通过LVS的DR模式实现高性能流量分发避免NAT模式下的性能瓶颈利用Keepalived的VRRP协议实现Director节点的高可用结合TCP_CHECK机制实现后端MySQL节点的健康检测整套方案对应用完全透明无需修改业务代码实际生产环境中这套架构可以轻松支撑每秒5000的读请求且故障切换时间控制在3秒以内。某电商平台采用该方案后报表查询响应时间从原来的1.2秒降低到0.3秒。2. 核心组件解析2.1 LVS工作模式选型LVS支持三种工作模式我们选择DR模式主要基于以下考量模式优点缺点适用场景NAT配置简单性能瓶颈小规模集群TUN跨机房支持需要隧道支持异地多活DR性能最优ARP配置复杂同机房高并发DR模式的数据流向特别适合MySQL这类请求-响应不对称的服务客户端请求通过Director转发到Real ServerReal Server直接响应客户端不经过Director只有SYN包需要Director处理大大减轻负载2.2 Keepalived关键参数Keepalived配置中需要特别注意以下参数vrrp_instance VI_1 { state MASTER # 初始状态实际由priority决定 interface eth0 # 必须指定物理网卡 virtual_router_id 51 # 同一组集群必须相同 priority 100 # 备份节点设为90 advert_int 1 # 心跳间隔(秒) authentication { auth_type PASS # 认证方式 auth_pass 1111 # 集群节点需一致 } }关键提示virtual_router_id在不同VLAN中可能重复建议用VLAN ID业务编号组合如VLAN100的MySQL集群可设为100513. 详细部署指南3.1 基础环境准备典型部署需要4台服务器LVS-Master: 182.148.15.237LVS-Backup: 182.148.15.236MySQL-Slave1: 182.148.15.233MySQL-Slave2: 182.148.15.238VIP: 182.148.15.2393.1.1 内核参数调优在所有Real Server上设置echo net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 net.ipv4.conf.lo.arp_ignore 1 net.ipv4.conf.lo.arp_announce 2 /etc/sysctl.conf sysctl -p3.2 LVS安装配置3.2.1 安装ipvsadm在Director节点执行yum install -y ipvsadm libnl* popt* modprobe ip_vs3.2.2 Real Server配置统一的realserver管理脚本#!/bin/bash VIP182.148.15.239 case $1 in start) ifconfig lo:0 $VIP netmask 255.255.255.255 up route add -host $VIP dev lo:0 ;; stop) ifconfig lo:0 down route del $VIP ;; *) echo Usage: $0 {start|stop} exit 1 esac3.3 Keepalived配置精讲3.3.1 Master节点配置virtual_server 182.148.15.239 3306 { delay_loop 6 lb_algo wrr # 加权轮询 lb_kind DR # 直接路由模式 persistence_timeout 50 # 会话保持(秒) real_server 182.148.15.233 3306 { weight 3 TCP_CHECK { connect_timeout 3 connect_port 3306 nb_get_retry 3 delay_before_retry 3 } } }3.3.2 健康检查机制Keepalived支持多种健康检查方式TCP_CHECK基础端口检测HTTP_GET适用于Web服务SSL_GETHTTPS服务检测MISC_CHECK自定义脚本检测对于MySQL建议增加MISC_CHECKMISC_CHECK { misc_path /usr/bin/mysql -h127.0.0.1 -uroot -p密码 -e SELECT 1 misc_timeout 5 }4. 高级调优与故障排查4.1 性能优化参数4.1.1 LVS内核参数echo net.ipv4.vs.conntrack 1 net.ipv4.vs.expire_nodest_conn 1 net.ipv4.vs.expire_quiescent_template 1 /etc/sysctl.conf4.1.2 连接池配置在my.cnf中增加[mysqld] slave_parallel_workers 8 slave_parallel_type LOGICAL_CLOCK4.2 常见故障排查4.2.1 VIP无法访问排查步骤检查ipvsadm -ln是否有Real Server验证Real Server的lo:0接口配置测试Director到Real Server的3306端口连通性4.2.2 脑裂问题处理预防措施配置多播防火墙规则iptables -A INPUT -d 224.0.0.18 -j ACCEPT使用vrrp_script增加第三方检测vrrp_script chk_mysqld { script /usr/bin/pgrep mysqld interval 2 weight -5 }5. 生产环境实践心得5.1 监控指标建议关键监控项LVS连接数ipvsadm -ln --stats每秒新建连接watch -n1 ipvsadm -ln --rateMySQL从库延迟SHOW SLAVE STATUS5.2 版本选择建议推荐组合CentOS 7.6内核3.10Keepalived 2.0支持脚本预处理MySQL 5.7GTID复制更稳定5.3 扩展方案对于超大规模集群可增加LVS层级实现二级负载结合ProxySQL实现SQL路由使用Consul实现服务自动注册这套架构经过多个金融级项目验证在保证数据一致性的前提下读性能可线性扩展。实际部署时建议先在小规模环境测试ARP相关问题特别是当网络中存在多层VLAN时需要特别注意广播域划分。