各位观众老爷们,晚上好!我是老码农,今天给大家带来的MySQL高阶讲座,主题是“MySQL集群的Load Balancer:HAProxy与LVS的选型与配置”。别怕,虽然是高阶,但保证通俗易懂,让大家听完都能回去撸起袖子直接干!
咱们都知道,MySQL单机再牛逼,也有扛不住的时候。为了应对高并发、高可用,搞MySQL集群那是必须的。集群有了,问题也来了,一大堆MySQL服务器,客户端怎么知道该连哪一台?这时候,就需要一个“带路党”,也就是Load Balancer(负载均衡器)。今天就来说说两个常用的带路党:HAProxy和LVS。
第一回合:HAProxy vs LVS,谁是你的菜?
首先,咱们先来个简单的对比,让大家对这两个家伙有个初步的印象。
特性 | HAProxy | LVS |
---|---|---|
工作层次 | 应用层(HTTP/HTTPS) & 传输层(TCP) | 传输层(TCP/UDP) |
功能 | 负载均衡、健康检查、会话保持、HTTP头部修改等 | 负载均衡、健康检查 |
性能 | 相对LVS较低,但足够应对大部分场景 | 性能极高,尤其擅长处理大规模并发连接 |
配置复杂度 | 相对LVS较高,但更灵活可配置 | 相对LVS较低,但配置灵活性稍差 |
适用场景 | Web应用、API接口等,需要HTTP层面处理的场景 | 高并发、高吞吐量的TCP/UDP应用,如数据库、缓存等 |
健康检查方式 | HTTP/TCP/SSL等多种方式 | TCP/HTTP等方式 |
简单来说,HAProxy更像一个“万金油”,什么都能干一点,HTTP层面的特性支持得更好。LVS则像一个“肌肉猛男”,专注于TCP/UDP流量的转发,性能是它的强项。
第二回合:HAProxy,小巧玲珑,功能强大
HAProxy,全称High Availability Proxy,听名字就知道它的目标是“高可用”。它是一个开源的、高性能的TCP/HTTP负载均衡器。
1. HAProxy的安装
这个就比较简单了,根据你的系统选择合适的安装方式。比如,在CentOS上:
sudo yum install -y haproxy
或者在Ubuntu上:
sudo apt-get update
sudo apt-get install -y haproxy
2. HAProxy的配置
HAProxy的配置文件是/etc/haproxy/haproxy.cfg
。咱们来个简单的配置示例,假设有两台MySQL服务器,IP分别是192.168.1.101和192.168.1.102,端口都是3306。
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode tcp # 使用TCP模式,因为是MySQL
log global
option tcplog
option dontlognull
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
frontend mysql_frontend
bind *:3306 # 监听所有IP的3306端口
default_backend mysql_backend # 默认后端服务器组
backend mysql_backend
balance roundrobin # 轮询算法
server mysql1 192.168.1.101:3306 check inter 2000 rise 2 fall 3 # MySQL服务器1
server mysql2 192.168.1.102:3306 check inter 2000 rise 2 fall 3 # MySQL服务器2
- global: 全局配置,比如日志、进程ID等。
- defaults: 默认配置,比如超时时间、日志等。
- frontend: 前端配置,定义HAProxy监听的端口和默认后端服务器组。
- backend: 后端配置,定义实际的MySQL服务器,以及负载均衡算法。
配置解释:
mode tcp
: 指定使用TCP模式,因为MySQL是基于TCP协议的。balance roundrobin
: 指定使用轮询算法,HAProxy会依次将请求转发给后端服务器。server mysql1 192.168.1.101:3306 check inter 2000 rise 2 fall 3
: 定义一个MySQL服务器,mysql1
是服务器的名称,192.168.1.101:3306
是服务器的IP地址和端口,check
表示开启健康检查,inter 2000
表示每2000毫秒检查一次,rise 2
表示连续2次健康检查成功才认为服务器恢复正常,fall 3
表示连续3次健康检查失败才认为服务器不可用。
3. HAProxy的常用命令
配置好之后,需要重启HAProxy服务:
sudo systemctl restart haproxy
查看HAProxy状态:
sudo systemctl status haproxy
还可以通过HAProxy的统计页面查看服务器的运行状态。需要在配置文件中添加以下内容:
listen stats
bind *:8080 # 监听8080端口
mode http
stats enable
stats uri /stats # 统计页面URL
stats refresh 5s
stats realm Haproxy Statistics
stats auth admin:password # 用户名和密码
然后,重启HAProxy服务,在浏览器中输入http://你的IP:8080/stats
,就可以看到HAProxy的统计页面了。
4. HAProxy的高级玩法
- 会话保持(Session Persistence): 如果你的应用需要会话保持,可以使用
cookie insert
指令。例如:
backend mysql_backend
balance roundrobin
cookie SRV insert indirect nocache # 插入Cookie
server mysql1 192.168.1.101:3306 check inter 2000 rise 2 fall 3 cookie mysql1
server mysql2 192.168.1.102:3306 check inter 2000 rise 2 fall 3 cookie mysql2
这样,HAProxy会在客户端的Cookie中插入服务器的信息,下次客户端请求时,HAProxy会根据Cookie将请求转发到同一台服务器。
- HTTP Header修改: HAProxy可以修改HTTP头部,比如添加
X-Forwarded-For
头,方便后端服务器获取客户端的真实IP地址。
frontend web_frontend
bind *:80
http-request add-header X-Forwarded-For %[src]
default_backend web_backend
第三回合:LVS,性能怪兽,简单粗暴
LVS,全称Linux Virtual Server,是Linux内核自带的负载均衡器。它工作在传输层,直接转发TCP/UDP流量,性能非常高。
1. LVS的工作模式
LVS有三种常用的工作模式:
- DR(Direct Routing): 直接路由模式,Real Server直接将响应返回给客户端,性能最高。
- NAT(Network Address Translation): 网络地址转换模式,Real Server的IP地址可以和VIP(Virtual IP)不在同一个网段。
- TUN(Tunneling): 隧道模式,Real Server将响应通过隧道返回给客户端。
咱们这里主要介绍DR模式,因为它性能最好,也是最常用的。
2. LVS的安装
LVS依赖ipvsadm
工具进行配置。在CentOS上:
sudo yum install -y ipvsadm
或者在Ubuntu上:
sudo apt-get update
sudo apt-get install -y ipvsadm
3. LVS的配置
LVS的配置相对HAProxy来说,稍微复杂一些,需要配置VIP、Real Server等。
假设有两台MySQL服务器,IP分别是192.168.1.101和192.168.1.102,端口都是3306。VIP是192.168.1.100。
(1)在LVS服务器上配置VIP
sudo ip addr add 192.168.1.100/32 dev eth0 # 将VIP绑定到网卡eth0上
sudo ip link set dev eth0 arp off
sudo echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
sudo echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
(2)在LVS服务器上配置LVS规则
sudo ipvsadm -A -t 192.168.1.100:3306 -s rr # 添加虚拟服务,使用轮询算法
sudo ipvsadm -a -t 192.168.1.100:3306 -r 192.168.1.101:3306 -g # 添加Real Server 1,使用DR模式
sudo ipvsadm -a -t 192.168.1.100:3306 -r 192.168.1.102:3306 -g # 添加Real Server 2,使用DR模式
-A
: 添加虚拟服务。-t
: 指定虚拟服务的IP地址和端口。-s
: 指定负载均衡算法,rr
表示轮询。-a
: 添加Real Server。-r
: 指定Real Server的IP地址和端口。-g
: 指定使用DR模式。
(3)在Real Server上配置VIP
为了让Real Server能够接收到发往VIP的请求,需要在Real Server上也配置VIP。
sudo ip addr add 192.168.1.100/32 dev lo # 将VIP绑定到lo(loopback)网卡上
sudo ip link set dev lo arp off
sudo echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
sudo echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
注意: 一定要在Real Server上禁用ARP响应,否则LVS服务器可能会无法正常工作。
4. LVS的常用命令
查看LVS规则:
sudo ipvsadm -L -n
清空LVS规则:
sudo ipvsadm -C
5. LVS的持久连接
LVS也支持持久连接,可以使用-p
参数。例如:
sudo ipvsadm -A -t 192.168.1.100:3306 -s rr -p 3600 # 添加虚拟服务,使用轮询算法,持久连接时间为3600秒
sudo ipvsadm -a -t 192.168.1.100:3306 -r 192.168.1.101:3306 -g
sudo ipvsadm -a -t 192.168.1.100:3306 -r 192.168.1.102:3306 -g
6. Keepalived + LVS,打造高可用集群
LVS本身没有高可用功能,如果LVS服务器宕机,整个集群就挂了。为了解决这个问题,可以使用Keepalived。Keepalived可以监控LVS服务器的状态,并在LVS服务器宕机时,自动将VIP切换到备用LVS服务器上。
Keepalived的配置比较复杂,这里就不详细介绍了,大家可以自行查阅相关资料。
第四回合:选型建议
说了这么多,到底该选哪个呢?我的建议是:
- 如果你的应用是Web应用、API接口等,需要HTTP层面的处理,或者对配置的灵活性要求较高,那就选择HAProxy。
- 如果你的应用是高并发、高吞吐量的TCP/UDP应用,比如数据库、缓存等,对性能要求极高,那就选择LVS。
当然,也可以结合使用,比如用HAProxy做Web应用的负载均衡,用LVS做数据库的负载均衡。
总结
HAProxy和LVS都是优秀的负载均衡器,各有优缺点。选择哪个,取决于你的实际需求。希望今天的讲座能帮助大家更好地理解和使用这两个工具,打造高可用、高性能的MySQL集群。
最后,记住一点:没有银弹! 选择最适合你的,才是最好的。
今天的讲座就到这里,谢谢大家! 别忘了点赞收藏哦! 咱们下期再见!