一、概述
- 定义:Keepalived是一个用于实现服务器高可用性和负载均衡的软件,通过VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)实现故障转移。
- 主要功能:
- 高可用系统网络服务:能够在两台或多台主机之间实现故障切换转移,确保服务的连续性。
- 健康状态检测:对后端服务器进行健康状态检测,确保只有健康的服务器才会接收用户请求。
- 管理LVS负载均衡软件:可以读取配置文件,并通过一个更为底层的接口来管理IPVS并生成IPVS规则。
二、工作原理
- VRRP协议:Keepalived的高可用功能是通过VRRP协议实现的。VRRP协议通过竞选机制将路由任务交给某一台VRRP路由器,当主路由器故障时,备份路由器会接管路由任务,确保网络服务的连续性。
- 心跳机制:主节点(Master)会定期向备份节点(Backup)发送心跳消息,以告知其自己还在运行。如果备份节点在一段时间内未收到心跳消息,则认为主节点已经故障,并启动故障转移过程。
- 健康检查:Keepalived通过ICMP、TCP端口状态、HTTP GET等方式对后端服务器进行健康检查,确保服务的可用性。
三、应用场景
- LVS+Keepalived:在LVS负载均衡集群中,Keepalived可以实现调度器(Director)的高可用,并解决单点故障问题。
- Nginx、Haproxy等高可用:Keepalived不仅限于LVS,还可以作为Nginx、Haproxy等其他系统网络服务的高可用解决方案。
四、特点
- 自动完成:Keepalived的所有操作都是自动完成的,不需要人工干涉。
- 支持多层检测:Keepalived支持网络层(Layer 3)、传输层(Layer 4)和应用层(Layer 7)的健康状态检测。
- 配置灵活:用户可以通过配置文件灵活设置Keepalived的各项参数,以满足不同的需求。
五、组件与框架
- 控制组件:负责配置文件的解析和编译。
- 内存管理:提供访问内存的通用方法。
- I/O复用:负责安排Keepalived内部的任务请求。
- 核心组件:包含一系列功能模块,如WatchDog(监控checkers和VRRP进程的状况)、Checkers(真实服务器的健康检查)、VRRP Stack(负载均衡器之间的切换)等。
六、使用注意事项
- 配置正确性:确保Keepalived的配置文件正确无误,以避免不必要的故障。
- 监控与日志:定期监控Keepalived的运行状态,并查看日志文件以诊断问题。
- 备份与恢复:定期备份Keepalived的配置文件和重要数据,以便在出现故障时能够快速恢复。
实验:
环境准备:
实验工具:虚拟机,四台rhel7
使用脚本如上图修改对应的IP:
realserver1:
vmseet.sh eth0 172.25.254.110 realserver1.timinglee.org
realserver2:
vmset.sh eth0 172.25.254.120 realserver2.timinglee.org
KA1:
vmset.sh 172.25.254.10 ka1.timinglee.org
KA2:
vmset.sh eth0 172.25.254.20 ka2.timinglee.org
查看SELinux是否关闭(Disabled):
getenforce
查看防火墙是否关闭:
systemctl status firewalld
server:
下载httpd:
yum install httpd -y
将IP写入HTML文档
#realserver1:
echo 172.25.254.110 > /var/www/index.html
#realserver2:
echo 172.25.254.120 > /var/www/index.html
启动HTTPD服务
systemctl enable --now httpd
KA:
访问server:
curl 172.25.254.110
curl 172.25.254.120
开始实验:
配置说明:
yum install keepalived -y
帮助:
man keepalived.conf
打开文档:
vim /etc/keepalived/keepalived.conf
全局设定:
配置虚拟路由器(设置VIP):
开启keepalived:
systemctl enable --now keepalived.service
查看VIP设置是否成功:
ifconfig
若启动失败:
清空日志:
> /var/log/messages
重启:
systemctl restart keepalived.service
查看日志:
cat /var/log/messages
发现问题,并修改,再次重启。
KA2:
进行与KA1相同配置
复制KA1的配置文件到KA2:
scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf
输入KA2的密码,等待传输。
修改文档部分内容:
vim /etc/keepalived/keepalived.conf
使用抓包命令对KA进行测试:
tcpdump -i eth0 -nn host 224.0.0.18
KA2启动:
systemctl enable --now keepalived.service
查看IP:
ifconfig
【KA2的优先级=80 < KA1的优先级=100 ,所以KA2没有VIP】
测试KA2:
realserver1远程连接KA1:
ssh -l 172.25.54.10
关闭KA1,模拟故障:
systemctl stop keepalived.service
tcpdump -i eth0 -nn host 224.0.0.18
【KA1故障,断开连接。KA2开始连接】
查看KA2的IP:
ifconfig
【由于KA1故障,VIP从KA1转移到KA2】
查看哪些网络流量被允许或拒绝通过系统:
iptables -nL
【DROP math-set keepalived dst:意思是172.25.254.100 过来一个丢弃一个,无法ping通】
修改现状方法:
KA:
进入文档:
vim /etc/keepalived/keepalived.conf
添加内容:
vrrp_iptables
重启:
systemctl restart keepalived.service
ping 172.25.254.100
查看哪些网络流量被允许或拒绝通过系统:
【DROP改为ACCEPT,同时也显示出了tcp】
注意:
【这两要不都开,要不注释掉都关】
【不管如何选择,最后记住重启KA的keepalived】
【全部注释后,依旧可以ping通,但是查看iptables,第一组最后一行消失】
keepalived日志分离(独立日志):
KA1:
编写日志级别:
vim /etc/sysconfig/keepalived
【日志范围0-7】
重启keepalived:
systemctl restart keepalived.service
打开采集日志设置文档:
vim /etc/rsyslog.conf
指定采集方法:
local6.* /var/log/keepalived.log
重启rsyslog:
systemctl restart rsyslog.service
重启keepalived:
systemctl restart keepalived.service
查看生成日志:
cat /var/log/keepalived.log
【全部都是keepalived】
独立子配置文件:
进入keepalived配置文件:
vim /etc/keepalived/keepalived.conf
注释掉虚拟路由:
添加文件:
include "/etc/keepalived/conf.d/*.conf"
添加后无法重启keepalived:
查看原因;
journalctl -xe
【告诉我们,找不到添加的文件】
没有就创建一个:
mkdir -p /etc/keepalived/conf.d
创建并进入子配置文件:
vim /etc/keepalived/conf.d/172.25.254.100.conf
添加VIP内容:
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:1}
重启keepalived:
systemctl restart keepalived.service
查看VIP: