一、Keepalived 核心概述
Keepalived 是一款基于 LVS(Linux Virtual Server)和 VRRP(虚拟路由冗余协议)的开源软件,核心作用有两个:高可用(HA) 和 负载均衡(LB),常用来保障服务器集群的稳定性,避免单点故障,同时优化请求分发,提升服务响应效率。
核心特性:轻量、配置简单、无需额外硬件支持,依赖网络层(VRRP)和传输层(TCP/IP)协议,可与 Nginx、Apache 等Web服务器配合使用,适用于中小规模集群场景。
二、高可用(HA)核心原理与实例
2.1 高可用核心逻辑
高可用的核心是 消除单点故障,通过 VRRP 协议实现两台(或多台)服务器的主从切换。VRRP 会在集群中选举一台"主服务器(Master)",其余为"备份服务器(Backup)",所有服务器共享一个虚拟IP(VIP),客户端通过VIP访问服务。
工作机制:主服务器正常运行时,会周期性向备份服务器发送"心跳包"(默认每1秒一次);若备份服务器长时间(默认3秒)未收到心跳包,判定主服务器故障,自动将VIP切换到备份服务器,实现"无缝切换",客户端无感知。
2.2 高可用实例(双机热备)
场景:搭建两台Web服务器(Nginx),通过Keepalived实现双机热备,确保Web服务不中断。
环境准备(两台服务器,系统CentOS 7):
-
主服务器(Master):IP 192.168.1.100,安装 Nginx + Keepalived
-
备份服务器(Backup):IP 192.168.1.101,安装 Nginx + Keepalived
-
虚拟IP(VIP):192.168.1.200(客户端访问地址)
实例流程:
-
初始状态:主服务器(192.168.1.100)正常运行,持有VIP(192.168.1.200),Nginx提供Web服务,客户端通过VIP访问主服务器。
-
故障触发:人为停止主服务器的Nginx服务或直接关闭主服务器,主服务器停止发送心跳包。
-
切换过程:备份服务器(192.168.1.101)超过3秒未收到心跳,判定主服务器故障,自动接管VIP(192.168.1.200),启动自身Nginx服务。
-
故障恢复:主服务器修复后重新启动,会自动发送心跳包,此时备份服务器检测到主服务器恢复,会主动释放VIP,主服务器重新接管VIP,恢复主从状态(默认主服务器优先级更高)。
关键说明:Keepalived 不仅能检测服务器本身的存活,还能检测服务(如Nginx、MySQL)的状态,若服务故障,也会触发主从切换(需配置服务检测脚本)。
三、负载均衡(LB)核心原理与实例
3.1 负载均衡核心逻辑
Keepalived 本身不直接实现负载均衡,而是 结合 LVS 实现四层负载均衡(基于IP和端口,如TCP、UDP),将客户端请求分发到后端多台应用服务器,实现负载分担,提升服务并发能力。
核心概念:
-
调度器(Director):运行Keepalived的服务器,接收客户端请求,通过调度算法分发到后端服务器。
-
后端服务器(Real Server):实际提供应用服务的服务器(如Web、MySQL)。
-
调度算法:默认轮询(RR),还有加权轮询(WRR)、最小连接数(LC)等,可根据后端服务器性能调整。
3.2 负载均衡实例(LVS+Keepalived)
场景:搭建1台调度器(Keepalived+LVS),2台后端Web服务器,实现客户端请求的负载分发,同时通过Keepalived保障调度器的高可用(避免调度器单点故障)。
环境准备(4台服务器,系统CentOS 7):
-
调度器1(Master):IP 192.168.1.100,安装 Keepalived + LVS
-
调度器2(Backup):IP 192.168.1.101,安装 Keepalived + LVS(保障调度器高可用)
-
后端服务器1:IP 192.168.1.102,安装 Nginx(Web服务,页面内容为"Server A")
-
后端服务器2:IP 192.168.1.103,安装 Nginx(Web服务,页面内容为"Server B")
-
虚拟IP(VIP):192.168.1.200(客户端访问地址)
实例流程:
-
初始状态:调度器1(Master)持有VIP,LVS配置轮询算法,后端两台Web服务器正常运行。
-
请求分发:客户端通过VIP(192.168.1.200)访问Web服务,调度器1接收请求后,按轮询算法将第一个请求分发到后端1(192.168.1.102),第二个请求分发到后端2(192.168.1.103),依次循环。
-
调度器故障:停止调度器1的Keepalived服务,调度器2(Backup)未收到心跳,接管VIP,继续通过LVS分发请求,客户端访问不受影响。
-
后端服务器故障:若后端1(192.168.1.102)故障,LVS会检测到后端服务不可用,自动将所有请求分发到后端2(192.168.1.103);待后端1修复后,自动恢复轮询分发。
关键说明:四层负载均衡(LVS)的优势是性能高(基于内核层转发),适合高并发场景;缺点是不支持七层协议(如HTTP、HTTPS)的解析,若需七层负载均衡,可配合Nginx实现(Keepalived保障Nginx高可用,Nginx实现七层负载)。
四、高可用与负载均衡的结合场景(实战常用)
实际生产环境中,Keepalived 常同时实现"调度器高可用"和"后端负载均衡",架构如下:
客户端 → VIP(Keepalived 虚拟IP)→ 主调度器(Keepalived+LVS)→ 后端服务器集群(多台应用服务器)
备份调度器实时监控主调度器,后端服务器集群通过LVS实现负载分担,双重保障服务的稳定性和高并发能力。
举例:某小型电商网站,采用"2台调度器(Keepalived+LVS)+ 4台Web服务器(Nginx)+ 2台MySQL服务器(主从)"架构,其中:
-
Keepalived 保障调度器和MySQL主从的高可用,避免单点故障;
-
LVS 实现Web服务器的负载均衡,将用户请求分发到4台Web服务器,提升页面加载速度;
-
即使其中1台调度器、1台Web服务器故障,服务仍能正常运行,客户端无感知。
五、常见问题与注意事项
-
VIP冲突:确保集群中只有主服务器持有VIP,备份服务器仅在主服务器故障时接管,避免多台服务器同时绑定VIP导致网络异常。
-
心跳包配置:心跳包的发送间隔和超时时间需合理配置(默认即可),间隔过短会增加网络负担,过长会导致切换延迟。
-
服务检测:必须配置服务检测脚本(如检测Nginx、MySQL是否运行),否则仅检测服务器存活,服务故障时不会触发切换。
-
后端服务器一致性:后端服务器的应用服务(如Web页面、接口)需保持一致,避免负载分发后客户端看到不同内容。
六、核心总结
-
Keepalived 的核心价值:解决单点故障(高可用)、分担服务器压力(负载均衡),是服务器集群稳定性的"守护者"。
-
高可用依赖 VRRP 协议,实现主从切换;负载均衡依赖 LVS 协议,实现请求分发,二者可单独使用,也可结合使用。
-
实战中,常与 Nginx、MySQL 等服务配合,搭建高可用、高并发的集群架构,适用于Web服务、数据库服务等各类场景。