一、keepalived 简介
Keepalived 是一个用 C 语言编写的路由软件,主要用于实现高可用性(HA)和负载均衡。它最初是为 Linux 虚拟服务器(LVS)项目设计的,用于管理 LVS 集群中的 IP 虚拟服务器。Keepalived 通过 VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)协议来实现 IP 层和数据链路层的高可用性。
Keepalived 的关键特性有:
高可用性(HA):Keepalived 通过 VRRP 协议实现主备模式的故障转移。当主节点发生故障时,备份节点会自动接管虚拟 IP(VIP),确保服务的连续性。
负载均衡:Keepalived 可以与 LVS 结合使用,通过配置不同的负载均衡算法(如轮询、最少连接等)来分发流量到后端服务器。
健康检查:Keepalived 可以定期检查后端服务器的健康状态,如果发现某个服务器不可用,会将其从负载均衡池中移除
灵活的配置:Keepalived 的配置文件(通常是 keepalived.conf)非常灵活,允许用户根据需要定义复杂的规则和策略。
多层检查:Keepalived 不仅可以在 IP 层进行检查,还可以在应用层进行检查,确保服务的可用性和性能。
脚本支持:Keepalived 允许用户编写自定义脚本,用于执行特定的检查或操作,增加了系统的灵活性和可扩展性。
二、Keepalived 架构
1、用户空间核心组件:
vrrp stack:VIP消息通告
checkers:监测real server
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件
IPVS wrapper:生成IPVS规则
Netlink Reflector:网络接口
WatchDog:监控进程
2、 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置。
3、IO复用器:针对网络目的而优化的自己的线程抽象。
4、内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限。 Keepalived 环境准备
web1 | web2 |
KA1 | KA2 |
关闭防火墙及SELinux
三、KeepAlived 配置
配置master端
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_mcast_group4 224.0.0.18前的#去掉
配置slave
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf
vrrp_mcast_group4 224.0.0.18前的#去掉
测试
启用keepalived日志功能
[root@ka1 ~]# vim /etc/sysconfig/keepalived
四、KeepAlived 应用示例
非抢占模式nopreempt
关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP
priority 100 #优先级高
nopreempt #非抢占模式
非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机
vip单播模式
master主机配置:
#vrrp_strict #注释此参数,与vip单播模式冲突
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
在slave主机中:
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf
抓包
Keepalived通知脚本配置
创建
邮件发送装置
QQ邮箱配置
[root@ka1 ~]# vim /etc/mail.rc
测试
实现IPVS的高可用性
准备web1和web2
[root@web1~]# yum install httpd -y
[root@web1 ~]# echo web1 - 192.168.32.101 > /var/www/html/index.html
[root@web1~]# ip addr add 192.168.32.100/24 dev lo
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web2 ~]# yum install httpd -y
[root@web1 ~]# echo web1 - 192.168.32.101 > /var/www/html/index.html
[root@web2 ~]# ip addr add 192.168.32.100/24 dev lo
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node30 ~]# yum install httpd -y
[root@node ~]# echo web1 - 192.168.32.101 > /var/www/html/index.html
[root@node ~]# ip addr add 192.168.32.100/24 dev lo
[root@node ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ka1节点
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
ka2
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf
访问测试结果
[root@ka1 ~] for i in {1..6}; do curl 172.25.254.100; done
web1 - 192.168.32.101
web2 - 192.168.32.102
web1 - 192.168.32.101
web2 - 192.168.32.102
web1 - 192.168.32.101
web2 - 192.168.32.102
高可用性VRRP Script
用脚本实现主从切换
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
[root@ka1 ~]# touch /mnt/lee
[root@ka1 ~]# tail -f /var/log/messages