1. MyCat高可用架构概述
在分布式数据库架构中,MyCat作为数据库中间件承担着SQL路由、读写分离等重要职责。当单台MyCat节点出现故障时,整个系统的数据库访问层将完全瘫痪,因此构建高可用(HA)的MyCat集群是生产环境中的必备方案。
我们采用HAProxy+Keepalived的双层高可用架构,主要解决两个核心问题:
- MyCat节点的负载均衡与故障转移 - 由HAProxy实现
- HAProxy自身的高可用 - 由Keepalived实现
这种架构的优势在于:
- 无单点故障:从VIP到HAProxy再到MyCat都实现了冗余
- 自动故障检测:通过心跳检测实现秒级切换
- 配置简单:各组件都有成熟的配置模式
- 资源利用率高:所有节点都可处理请求
生产环境中建议至少部署2台MyCat、2台HAProxy和2台Keepalived组成完整集群
2. HAProxy安装与配置详解
2.1 编译安装HAProxy
HAProxy需要从源码编译安装以获得最佳性能。以下是详细步骤说明:
bash复制# 解压源码包到指定目录
tar -zxvf haproxy-1.5.18.tar.gz -C /usr/local/src
# 进入源码目录
cd /usr/local/src/haproxy-1.5.18
# 查看内核版本(重要!)
uname -r
# 示例输出:3.10.0-1160.el7.x86_64
# 则TARGET参数取linux310
# 编译参数说明:
# TARGET - 根据内核主版本号确定
# ARCH - 系统架构(通常x86_64)
# PREFIX - 安装路径
make TARGET=linux310 PREFIX=/usr/local/haproxy ARCH=x86_64
# 安装到指定目录
make install PREFIX=/usr/local/haproxy
关键参数选择依据:
TARGET必须与内核版本匹配,否则可能导致性能问题- 生产环境建议使用最新稳定版(本文示例版本较老,仅作演示)
- 编译前确保安装gcc等基础工具链
2.2 配置文件详解
HAProxy的核心配置文件需要包含以下关键部分:
conf复制global
log 127.0.0.1 local0 # 日志配置
maxconn 4096 # 最大连接数
chroot /usr/local/haproxy # 安全限制
pidfile /usr/data/haproxy/haproxy.pid # 进程ID文件
uid 99 # 运行用户(nobody)
gid 99
daemon # 后台运行
defaults
log global
mode tcp # 四层TCP代理
option abortonclose # 连接中断处理
retries 3 # 重试次数
timeout connect 5000 # 连接超时(ms)
timeout client 50000 # 客户端超时
timeout server 50000 # 服务端超时
listen proxy_status
bind :48066 # 服务监听端口
mode tcp
balance roundrobin # 轮询负载策略
server mycat_1 192.168.140.128:8066 check inter 10s
server mycat_2 192.168.140.127:8066 check inter 10s
frontend admin_stats
bind :7777 # 管理界面端口
mode http
stats enable # 启用统计页面
stats uri /admin # 访问路径
stats auth admin:123123 # 认证信息
配置要点说明:
mode tcp表示工作在四层,适合MySQL协议check inter 10s会定期检查后端MyCat存活状态- 管理界面端口建议修改并设置强密码
- 超时时间需要根据业务特点调整
2.3 服务启动与验证
启动HAProxy并验证服务状态:
bash复制# 启动服务(指定配置文件路径)
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
# 检查进程
ps -ef|grep haproxy
# 访问管理界面(浏览器)
http://服务器IP:7777/admin
管理界面会显示:
- 后端MyCat节点的状态(UP/DOWN)
- 当前会话数
- 流量统计等信息
常见问题:如果管理界面无法访问,检查防火墙是否放行了7777端口
3. Keepalived配置指南
3.1 Keepalived安装步骤
Keepalived提供VIP漂移能力,确保HAProxy层的高可用:
bash复制# 解压安装包
tar -zxvf keepalived-1.4.2.tar.gz -C /usr/local/src
# 安装依赖
yum install -y gcc openssl-devel popt-devel
# 配置安装路径
cd /usr/local/src/keepalived-1.4.2
./configure --prefix=/usr/local/keepalived
# 编译安装
make && make install
# 复制服务文件
cp /usr/local/src/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
3.2 主备机配置差异
主节点配置(/etc/keepalived/keepalived.conf):
conf复制vrrp_instance VI_1 {
state MASTER # 主机标识
interface ens33 # 网卡名称(需实际查看)
virtual_router_id 51 # 虚拟路由ID(集群内唯一)
priority 100 # 优先级(主机较高)
advert_int 1 # 心跳间隔
authentication {
auth_type PASS # 认证方式
auth_pass 1111 # 密码(主备需一致)
}
virtual_ipaddress {
192.168.140.200 # 虚拟IP(VIP)
}
}
备节点配置差异:
state BACKUPpriority设置为小于100的值(如90)
关键参数说明:
virtual_router_id必须相同才能组成集群- 优先级决定哪个节点获得VIP
- 心跳间隔不宜设置过小(默认1秒即可)
3.3 服务管理命令
bash复制# 启动服务
service keepalived start
# 查看VIP绑定情况
ip addr show ens33
# 检查日志(故障排查时常用)
tail -f /var/log/messages
4. 高可用测试与故障模拟
4.1 正常状态验证
bash复制# 通过VIP访问MyCat
mysql -umycat -p123456 -h 192.168.140.200 -P 48066
# 查看当前连接的MyCat节点(在MySQL中执行)
show variables like 'server_id';
4.2 故障模拟测试
- MyCat节点故障测试:
bash复制# 在MyCat主机上停止服务
mycat stop
# 观察HAProxy管理界面节点状态变化
# 验证通过VIP是否还能正常访问
- HAProxy节点故障测试:
bash复制# 在主HAProxy节点上停止服务
service haproxy stop
# 观察VIP是否漂移到备节点
ip addr show ens33
# 验证通过VIP的连接是否保持
- 网络分区测试:
bash复制# 模拟网络中断
ifconfig ens33 down
# 观察Keepalived日志
tail -f /var/log/messages
4.3 测试指标评估
- 故障检测时间:从节点故障到流量切换的时间
- 数据一致性:切换过程中是否有数据丢失
- 会话保持:现有连接是否能保持不中断
生产环境建议定期进行故障演练,验证高可用机制的有效性
5. 生产环境优化建议
5.1 性能调优参数
HAProxy优化:
conf复制global
tune.bufsize 32768 # 缓冲区大小
tune.maxrewrite 8192 # 最大重写空间
defaults
timeout http-keep-alive 300s # 长连接保持
Keepalived优化:
conf复制vrrp_instance VI_1 {
garp_master_delay 5 # VIP通告延迟
garp_master_refresh 60 # 定期通告
}
5.2 监控方案
建议监控以下指标:
-
HAProxy:
- 后端节点健康状态
- 当前并发连接数
- 请求响应时间
-
Keepalived:
- VIP绑定状态
- 主备切换次数
- 心跳延迟时间
5.3 常见问题排查
-
VIP无法访问:
- 检查防火墙规则
- 确认Keepalived日志无报错
- 测试直接访问HAProxy端口是否通
-
脑裂问题(双主):
- 检查网络连通性
- 调整心跳间隔和超时时间
- 配置仲裁机制
-
性能瓶颈:
- 监控系统资源使用率
- 调整HAProxy连接池大小
- 考虑增加更多HAProxy节点
经过多年实践,这种架构在多个生产环境中表现稳定,平均故障切换时间可控制在3秒以内。关键是要做好监控和定期演练,确保故障时能自动恢复。对于金融级应用,可以考虑引入第三方仲裁服务来避免脑裂情况。