Keepalived 是一款基于 VRRP 协议的高可用性解决方案,主要用于解决单点故障问题,提高系统可用性。它通过将多个服务器组成一个集群,并使用虚拟 IP 地址进行访问,从而实现服务的高可用性。
一、高可用集群
1.1 集群类型
- LB (负载均衡): 通过分配请求到多个服务器,提高系统性能和可用性。
- HA (高可用性): 通过冗余机制,确保系统在发生故障时仍能正常提供服务。
- HPC (高性能计算): 通过将多个计算节点连接在一起,提高计算能力。
1.2 系统可用性
- SLA (服务等级协议): 定义服务质量和性能指标。
- A (可用性): 系统正常运行时间与总运行时间的比率。
- MTBF (平均故障间隔时间): 系统发生故障的平均间隔时间。
- MTTR (平均修复时间): 系统从发生故障到恢复正常运行的平均时间。
1.3 系统故障
- 硬件故障: 设计缺陷、损耗、自然灾害等。
- 软件故障: 设计缺陷、bug 等。
1.4 实现高可用
- 冗余机制: 建立多个服务器,互为备份。
- 主/备模式: 一台服务器为主,其他服务器为备。
- 双主模式: 两台服务器同时提供服务,互为备份。
1.5 VRRP
- 虚拟路由冗余协议: 解决静态网关单点风险。
- 工作方式: 抢占式、非抢占式。
- 安全认证: 无认证、简单字符认证、MD5。
- 工作模式: 主/备、主/主。
二、Keepalived 部署
2.1 简介
- Keepalived 是 VRRP 协议的软件实现。
- 功能: 地址流动、IPVS 规则生成、RS 健康状态检测、脚本调用。
2.2 架构
- 用户空间核心组件: VRRP stack、checkers、system call、SMTP、IPVS wrapper、Netlink Reflector、WatchDog。
- 控制组件: 解析 keepalived.conf 配置文件。
- IO 复用器: 网络优化。
- 内存管理组件: 内存管理功能。
2.3 环境准备
主机名 | IP | VIP | 角色 |
KA1 | 172.25.254.10 | 172.25.254.100 | 主节点(MASTER) |
KA2 | 172.25.254.20 | 172.25.254.100 | 备份节点(BACKUP) |
realserver1 | 172.25.254.110 | 172.25.254.100 | 真实服务器 |
realserver2 | 172.25.254.120 | 172.25.254.100 | 真实服务器 |
[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@realserver1 ~]# systemctl enable --now httpd
[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html
[root@realserver2 ~]# systemctl enable --now httpd
- 各节点时间同步。
- 关闭防火墙和 SELinux。
- 主机名通信。
- root 用户 SSH 互信。
2.4 相关文件
- 软件包名: keepalived
- 主程序文件: /usr/sbin/keepalived
- 主配置文件: /etc/keepalived/keepalived.conf
- 配置文件示例: /usr/share/doc/keepalived/
- Unit File: /lib/systemd/system/keepalived.service
- Unit File 的环境配置文件: /etc/sysconfig/keepalived
2.5 安装
在ka1和ka2中安装
[root@ka1 ~]# yum install keepalived -y
[root@ka1 ~]# systemctl enable --now keepalived.service
[root@ka1 ~]# systemctl start keepalived
[root@ka2 ~]# yum install keepalived -y
[root@ka2 ~]# systemctl enable --now keepalived.service
[root@ka2 ~]# systemctl start keepalived
2.6 配置说明
2.6.1 配置文件组成部分
配置文件:/etc/keepalived/keepalived.conf
配置文件组成:
- Global definitions: 全局定义,如邮件配置、router_id、VRRP 配置、多播地址等。
- VRRP instance(s): 定义每个 VRRP 虚拟路由器。
- LVS CONFIGURATION: 定义 LVS 集群的 VS 和 RS。
2.6.2 配置语法说明
- 使用
man keepalived.conf
查看帮助文档。 - 使用
systemctl restart keepalived
重启服务使新配置生效。
2.6.2.1 全局配置
- notification_email: 故障切换时发送邮件的目标邮箱。
- notification_email_from: 发送邮件的地址。
- smtp_server: 邮件服务器地址。
- smtp_connect_timeout: 邮件服务器连接超时时间。
- router_id: Keepalived 主机的唯一标识。
- vrrp_skip_check_adv_addr: 跳过检查重复通告报文。
- vrrp_strict: 严格遵循 VRRP 协议。
- vrrp_garp_interval: 报文发送延迟。
- vrrp_gna_interval: 消息发送延迟。
- vrrp_mcast_group4: 组播 IP 地址范围。
2.6.2.2 配置虚拟路由器
- state: 主机状态,MASTER 或 BACKUP。
- interface: 物理接口。
- virtual_router_id: 虚拟路由器标识。
- priority: 优先级。
- advert_int: VRRP 通告时间间隔。
- authentication: 认证机制。
- virtual_ipaddress: 虚拟 IP 地址。
测试
[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18
2.6.2.3 虚拟路由的通讯设定
测试
2.6.2.4 启用 Keepalived 日志功能,日志分离
- 修改
/etc/rsyslog.conf
文件,添加日志记录规则。 - 重启 Keepalived 和 rsyslog 服务。
[root@ka1 ~]# vim /etc/sysconfig/keepalived
[root@ka1 ~]# systemctl restart keepalived.service
[root@ka1 ~]# vim /etc/rsyslog.conf
[root@ka1 ~]# systemctl restart rsyslog.service
查看日志
[root@ka1 ~]# cat /var/log/keepalived.log
2.6.2.5 实现独立子配置文件
- 将不同集群的配置放在独立的子配置文件中。
- 使用
include
指令包含子配置文件。
[root@ka1 ~]# mkdir /etc/keepalived/conf.d
[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
[root@ka1 ~]# systemctl restart keepalived.service
三、Keepalived 企业应用示例
3.1 master/slave 的 Keepalived 单主架构
3.1.1 MASTER配置
3.1.2 BACKUP配置
3.1.3 抓包查看
[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18
3.2 抢占模式和非抢占模式
3.2.1 preempt 默认模式
高优先级主机恢复后抢占低优先级主机。
3.2.2 1 非抢占模式nopreempt
高优先级主机恢复后不抢占低优先级主机。
注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP
3.2.3 1 抢占模式preempt_delay
抢占延迟模式,高优先级主机恢复后延迟一段时间再抢占。
注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict
3.3 VIP 单播配置
- 使用单播代替多播,减少网络流量。
- 需要在所有节点设置对方主机的 IP 地址。
抓包查看单播效果
3.4 Keepalived 通知脚本配置
- 当 Keepalived 状态变化时,自动触发脚本执行。
- 脚本类型: master、backup、fault、通用、stop。
- 脚本调用方法: 在 vrrp_instance 语句块中添加 notify_xxx 指令。
- 创建通知脚本: 使用 Bash 脚本,根据状态发送邮件或其他通知。
vim /etc/mail.rc
发送测试邮件
[root@ka1 ~]# echo hello world | mail -s test 2592251929@qq.com
3.5 master/master 的 Keepalived 双主架构
- 将多个 VIP 分别运行在不同的 Keepalived 服务器上,实现并行提供服务。