一:Keepalived 部署
1.1: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 允许用户编写自定义脚本,用于执行特定的检查或操作,增加了系统的灵活性和可扩展性。
1.2:Keepalived 架构
1:用户空间核心组件:
(1):vrrp stack:VIP消息通告
(2):checkers:监测real server
(3):system call:实现 vrrp 协议状态转换时调用脚本的功能
(4):SMTP:邮件组件
(5):IPVS wrapper:生成IPVS规则
(6):Netlink Reflector:网络接口
(7):WatchDog:监控进程
2: 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置。
3:IO复用器:针对网络目的而优化的自己的线程抽象。
4:内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限。
1.3:Keepalived 环境准备
web1 web2
KA1 KA2
关闭防火墙及SELinux
1.4:安装keepalived
1.5:KeepAlived 配置
1.5.1:配置master端
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
将vrrp_mcast_group4 224.0.0.18前的#去掉
1.5.2:配置slave端
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf
将vrrp_mcast_group4 224.0.0.18前的#去掉
1.5.3:测试
1.5.4:启用keepalived日志功能
[root@ka1 ~]# vim /etc/sysconfig/keepalived
[root@ka1 ~]# vim /etc/rsyslog.conf
二:Keepalived企业应用示例
2.1:非抢占模式 nopreempt
关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP
priority 100 #优先级高
nopreempt #非抢占模式
ka1主机配置:
KA2主机配置
非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机。
2.2:VIP单播配置
master主机配置:
#vrrp_strict #注释此参数,与vip单播模式冲突
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
在slave主机中:
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf
抓包查看单播效果:
2.3:Keepalived 通知脚本配置
1:脚本的调用方法:
创建通知脚本
安装邮件发送工具:
QQ邮箱配置:
[root@ka1 ~]# vim /etc/mail.rc
发送测试邮件:
2.4: 实现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
2.4.1:配置keepalived:
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
2.5:高可用性 VRRP Script
2.5.1:利用脚本实现主从角色切换
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
[root@ka1 ~]# touch /mnt/lee
[root@ka1 ~]# tail -f /var/log/messages