一、KeepAlived的原理及安装
Keepalived 是一个常用的高可用性解决方案,主要用于通过 VRRP (Virtual Router Redundancy Protocol) 实现高可用集群。它主要用于提供负载均衡和故障切换功能。
1、主要功能
-
虚拟路由器:使用 VRRP 协议创建一个虚拟 IP(VIP),多个节点共同维护这个 IP。一个节点被选为主节点,其它节点作为备份节点。
-
故障检测:Keepalived 定期检查主节点的健康状态。如果主节点发生故障,其他节点可以自动接管,确保服务的可用性。
-
负载均衡:可以与 HAProxy 或 Nginx 等负载均衡器结合使用,将流量分配到多个后端服务器,提高系统的整体性能。
2、主要组件
- 主节点(Master):负责处理流量并响应请求。
- 备节点(Backup):监控主节点的状态。一旦主节点故障,备节点会自动接管其 IP 地址,成为新的主节点。
- 虚拟 IP 地址(VIP):客户端访问时使用的 IP 地址。保证了访问时不会受到节点切换的影响。
3、Keepalived 环境准备
- 各节点时间必须同步:ntp, chrony
- 关闭防火墙及SELinux
- 各节点之间可通过主机名互相通信:非必须
- 建议使用/etc/hosts文件实现:非必须
- 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须
4、Keepalived 相关文件
- 软件包名:keepalived
- 主程序文件:/usr/sbin/keepalived
- 主配置文件:/etc/keepalived/keepalived.conf
- 配置文件示例:/usr/share/doc/keepalived/
- Unit File:/lib/systemd/system/keepalived.service
- Unit File的环境配置文件:/etc/sysconfig/keepalived
5、Keepalived 安装
在KA中测试并下载keepalived服务
yum install keepalived -y
二、 KeepAlived 配置说明
1、全局配置
vim /etc/keepalived/keepalived.conf
2、配置虚拟路由器
systemctl enable --now keepalived.service
查看:虚拟路由器的 IP 地址(VIP)
注:1、本文章中KA1的IP是172.25.253.10 ; KA2的IP是172.25.254.20
2、每次更改配置文件后都要重启服务
测试:
将KA1的配置文件cp给KA2
scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf
修改KA2中的部分参数
节点作为备份 BACKUP ;优先级为 80
systemctl enable --now keepalived.service
重启后并没有出现vip,这是因为优先级低的缘故(VRRP 默认是抢占模式)
抓包过程中停掉KA1的keepalived服务,就会转到KA2主机
这时用ifconfig查看KA2时vip出现
3、虚拟路由的通信设定
此时172.25.254.100是ping不通的
vim /etc/keepalived/keepalived.conf
第一种方法:都开
第二种:都注释
systemctl restart keepalived.service
这时ping就可以通
4、启用keepalived日志功能
vim /etc/sysconfig/keepalived
vim /etc/rsyslog.conf
systemctl restart rsyslog.service
systemctl restart keepalived.service
5、 实现独立子配置文件
mkdir -p /etc/keepalived/conf.d
vim /etc/keepalived/conf.d/172.25.254.100.conf
三.Keepalived 企业应用示例
2、非抢占模式 nopreempt
vrrp默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色。非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机
systemctl restart keepalived.service
此时vip在ks1,若ks1重启keepalived.service,vip就会到ks2中,并且不会被抢占
3、 抢占延迟模式 preempt_delay
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回 VIP
重启后5s后抢占
4、单播模式设定
tcpdump -i ens33 -nn src host 172.25.254.10 and dst 172.25.254.20
有vip的主机指向没有vip的主机
5、 Keepalived 通知脚本配置 --邮件通知
yum install mailx -y
vim /etc/mail.rc
echo nihao,kaka | mail -s test 171324xxxx@qq.com
echo hello,kaka | mail -s test 171324xxxx@qq.com
脚本
vim /etc/keepalived/mail.sh
chmod +x /etc/keepalived/mail.sh
vim /etc/keepalived/keepalived.conf
/etc/keepalived/mail.sh fault
6、双主架构
KA2中添加第二个VIP,并设置为备用设备backup,优先级为80
KA2中添加第二个VIP,并设置为主设备master,优先级为100
7、双主的 LVS-DR 模式
server端
在服务端下载httpd
echo 172.25.254.110 > /var/www/html/index.html
echo 172.25.254.120 > /var/www/html/index.html
systemctl enable --now httpd.service
systemctl disable --now firewalld.service
在两个server中分别添加ip 172.25.254.100
ip a a 172.25.254.100/32 dev lo
调整server端的arp配置
vim /etc/sysctl.d/arp.conf
systemctl restart httpd.service
在两个KA中
yum install ipvsadm -y
vim /etc/keepalived/keepalived.conf
这时策略添加成功了
8、实现HAProxy高可用
yum install haproxy
在两个ka1和ka2先实现haproxy的配置
vim /etc/haproxy/haproxy.cfg
在两个ka1和ka2两个节点启用内核参数
vim /etc/sysctl.conf
在KA1中添加ip
ip a d 172.25.254.100/32 dev lo
在KA1中编写检测脚本
vim /etc/keepalived/test.sh
chmod +x /etc/keepalived/test.sh
在KA1中配置keepalived
vim /etc/keepalived/keepalived.conf
调整server端的arp配置
vim /etc/sysctl.d/arp.conf
测试:
关掉KA1的haproxy后,服务没有中断