Keepalived 入门指南
Keepalived 是一个用于实现高可用性的开源软件包,主要用于构建高可用性集群,特别是对于网络服务的负载均衡和故障切换。它通过 VRRP(Virtual Router Redundancy Protocol)协议来监控主服务器的状态,并在主服务器发生故障时接管其 IP 地址,从而保证服务的连续性。本文将详细介绍 Keepalived 的核心组件、工作原理、安装配置方法以及实际应用场景。
1. Keepalived 概览
1.1 核心组件
Keepalived 主要由三个核心组件组成:
- Core:负责检查服务器的健康状况。
- Checkers:执行健康检查,如 TCP、HTTP、UDP 等协议的检查。
- VRRP Stack:实现 VRRP 协议,用于主备服务器之间的故障切换。
1.1.1keepalived架构
用户空间核心组件:
vrrp stack:VIP消息通告
checkers:监测real server
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件
IPVS wrapper:生成IPVS规则
Netlink Reflector:网络接口
WatchDog:监控进程
控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器:针对网络目的而优化的自己的线程抽象
内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
1.2 工作原理
Keepalived 通过 VRRP 协议在一组服务器之间选举出一个主服务器(Master)和一个或多个备份服务器(Backup)。主服务器负责处理客户端的请求,而备份服务器则处于待命状态,准备在主服务器发生故障时接管其 IP 地址并继续提供服务。
- 选举过程:每个 Keepalived 实例都会定期发送 VRRP 广播报文,其中包含了该实例的优先级。优先级最高的实例将成为 Master。
- 故障检测:Keepalived 通过 Core 组件持续监测服务器的健康状态,一旦发现主服务器不可用,就会触发故障切换流程。
- 故障切换:当 Master 发生故障时,备份服务器会检测到主服务器没有发送 VRRP 报文,并根据优先级选择新的 Master,接管虚拟 IP 地址,继续提供服务。
当然keepalived也可以多主服务器并行
VRRP相关术语
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
1.3 优势
- 高可用性:通过 VRRP 协议快速检测并响应服务器故障。
- 负载均衡:可以配置为负载均衡器,分发流量到多个后端服务器。
- 简单易用:配置简单,支持多种健康检查机制。
- 扩展性强:支持多实例、多接口和多种健康检查类型。
2. 安装与配置
2.1 安装
在 CentOS/RHEL 系统上安装 Keepalived 的基本命令如下:
sudo yum install keepalived
RHEL7中可能会遇到一下bug
在 Debian/Ubuntu 系统上安装 Keepalived 的基本命令如下:
systemctl restart keepalived #新配置可能无法生效
systemctl stop keepalived;systemctl start keepalived #无法停止进程,需要 kill 停止
sudo apt-get install keepalived
2.2 配置文件
Keepalived 的主要配置文件位于 /etc/keepalived/keepalived.conf
。
配置文件主要包含
GLOBAL CONFIGURATION
Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等
VRRP CONFIGURATION
VRRP instance(s): 定义每个vrrp虚拟路由器
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s): LVS集群的VS和RS
2.2.1 主服务器配置
global_defs {
notification_email {
*****@**com #keepalived发生故障切换时发送邮件的目标邮箱
}
notification_email_from keepalived@KA1.timinglee.org #发邮件的地址
smtp_server 127.0.0.1 #邮件服务器地址
smtp_connect_timeout 30 #邮件服务器连接timeout
router_id KA1.timinglee.org #每个keepalived主机唯一标识 #重名不影响
vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能
#启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict #严格遵循vrrp协议
#启用此项后以下状况将无法启动服务:
#1.无VIP地址
#2.配置了单播邻居
#3.在VRRP版本2中有IPv6地址
#建议不加此项配置
vrrp_garp_interval 0 #报文发送延迟,0表示不延迟
vrrp_gna_interval 0 #消息发送延迟
vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:
}
vrrp_instance VI_1 { #指定虚拟路由器配置名称
state MASTER #指定主从
interface eth0 #绑定为当前虚拟路由器使用的物理接口
virtual_router_id 51 #虚拟路由器的唯一标识,取值为0-255。同属一个虚拟路由器的多个keepalived节点标识必须相同,该值在同一网络中必须唯一。
priority 100 #优先级,越大越优先
advert_int 1 #vrrp通告时间间隔
authentication { #认证机制
auth_type PASS #pass为简单密码认证
auth_pass 1111 #预共享密钥
}
virtual_ipaddress { #虚拟IP
172.25.254.100
}
}
2.2.2 备份服务器配置
global_defs { # 设置路由器 ID
router_id LVS_BACKUP
}
...省略...
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100
}
}
- global_defs:定义全局配置,如路由器 ID。
- state MASTER/BACKUP:定义服务器的角色。
- interface:指定用于 VRRP 通信的网络接口。
- virtual_router_id:定义 VRRP 实例的 ID。
- priority:定义服务器的优先级,数值越大优先级越高。
- advert_int:定义 VRRP 广播间隔时间(秒)。
- authentication:定义认证方式和密码。
- virtual_ipaddress:定义虚拟 IP 地址。
2.3 启动与验证
启动 Keepalived 服务:
sudo systemctl start keepalived
sudo systemctl enable keepalived
验证虚拟 IP 地址是否已正确分配:
ip addr show
或
ifconfig
测试
# tcpdump -i eth0 -nn host 224.0.0.18 #224.0.0.18是之前设置的组播地址
例
3.实现独立子配置文件
keepalived支持读取独立的子配置文件,避免多个虚拟路由配置污染主配置文件内容。
当生产环境复杂时,将不同的集群的vip配置放置于独立的子配置文件中可以有效提升效率。
include /path/file
示例:
在/etc/keepalived/conf.d/172.25.254.100.conf中配置子配置文件内容
如此就完成了keepalived的基础入门,并且熟悉了keepalived的基础配置格式,接下来就能够进行高级的实例了
keepalived高级示例:https://blog.csdn.net/Autter_A3/article/details/141176610?spm=1001.2014.3001.5502