一.架构
用户空间核心组件:
- vrrp stack:VIP 消息通信
- checkers:监测 Real Server
- system call:实现 vrrp 协议状态转换时调用相关本地功能
- SMTP:邮件组件
- IPVS wrapper:生成 IPVS 规则
- Netlink Reflector:网络接口
- WatchDog:监控进程
控制组件: 提供 keepalived.conf
的解析器,完成 Keepalived 配置
I/O 组件: 针对网络吞吐的优化的自适应连接组件
内存管理组件: 为某些通用的内存管理功能(例如分配、重新分配、发布等)提供访问权限
二.Keepalived进程树
Keepalived <-- Parent process monitoring children
\_ Keepalived <-- VRRP child
\_ Keepalived <-- Healthchecking child
三.配置解读
全局配置
#/etc/keepalived/keepalived.conf
global_defs {notification_email {root@localhost # 故障切换时邮件通知的接收邮箱(可多行填写)123456789@163.com}notification_email_from keepalived@localhost # 发件人地址smtp_server 127.0.0.1 # 邮件服务器地址smtp_connect_timeout 30 # 邮件服务器连接超时时间router_id kai.example.com # 唯一标识,建议使用主机名vrrp_skip_check_adv_addr # 启用后,若报文来自同一路由器则跳过检查vrrp_strict # 严格遵循VRRP协议(可能导致VIP无法访问)vrrp_garp_interval @ # ARP报文发送延迟(替换@为数值,0表示无延迟)vrrp_gna_interval @ # NA消息发送延迟(替换@为数值)vrrp_mcast_group4 224.0.0.18 # 组播地址范围vrrp_iptables # 与vrrp_strict同时启用时不添加防火墙规则
}# 根据实际需求补充其他配置块(如vrrp_instance、virtual_server等)
VRRP协议配置
vrrp_instance VI_1 {state MASTER # 初始状态(MASTER/BACKUP)interface ens33 # 绑定物理网卡virtual_router_id 51 # 虚拟路由ID(0-255,需全网唯一)priority 100 # 节点优先级(1-254,主备需不同)advert_int 1 # VRRP通告间隔(秒)authentication {auth_type PASS # 认证类型(PASS/AH)auth_pass 123456 # 认证密码(需主备一致),否则会产生脑裂}virtual_ipaddress {192.168.80.50/24 # VIP(默认绑定interface指定的网卡)192.168.80.51/24192.168.80.52/24}track_interface { # 监控网卡状态(故障时触发切换)eth0eth1}
}
四.安装keepalived
安装必要的依赖包
apt install -y build-essential pkg-config libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev
把下载的包上传到服务器后编译安装
tar xvf keepalived-2.3.0.tar.gz -C /usr/local/src/
cd /usr/local/src/keepalived-2.3.0
./configure --prefix=/usr/local/keepalived #--disable-fwmark
make && make install
keepalived正常启动
systemctl status keepalived.service
五.keepalived 日志文件独立
默认keepalived的日志记录在LOG_DAEMON中,记录在/var/log/syslog或message,也支持自定义日志配置
修改etc下keepalived文件
vim /apps/keepalived/etc/sysconfig/keepalived
修改local 6 的日志记录地址
vim /etc/rsyslog.d/50-default.conf #ubuntu是这个目录
重启两个服务
systemctl restart keepalived.service rsyslog.service
查看日志
六.Keepalived 独立子配置
当生产环境复杂时,/etc/keepalived/keepalived.conf文件中保存所有集群的配置会导致内容过多,不易管理 可以将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中 利用include指令可以实现包含子配置文件
mkdir /etc/keepalived/conf.d/
业务不受影响
七.Keepalived 的抢占式和非抢占式模式
默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色,造成网络抖动,建议设置为非抢占模式nopreempt,即高优先级主机恢复后,并不会抢占低优先级主机的master角色
注意:非抢占模式下如果原主机down机,VIP迁移至的新主机,后续新主机也发生down((keepalived服务down))时,VIP还会迁移回修复好的原主机 但如果新主机的服务down掉(keepalived服务正常),原主机也不会接管VIP,仍会由新主机拥有VIP
即非抢占式模式,只是适合当主节点宕机,切换到从节点的一次性的高可用性,后续即使当原主节点修复好,仍无法再次起到高用功能
配置非抢占模式
例:当前keepalived1为 vip拥有者,keepalived1为从节点。keepalived1 优先级为100,keepalived2 优先级为80
正常访问vip时候,keepalived1会声明自己的多播地址
此时keepalived1 宕机
keepalived2 接管vip,声明多播地址,如果此时keepalived1 恢复,由于自己的优先级比keepalived2 要高,会把vip抢回来,但由于此时是非抢占式模式,vip不会被优先级高的keepalived1抢回去
后面vip会一直被keepalived2占有
延迟抢占模式
恢复后不立即抢占,延迟一段时间再把vip抢回来
八.VIP 单播配置
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以设置为单播,减少网络流星
另外:有些公有云不支持多播,可以利用单播实现
单播优先与多播,即同时配置,单播生效
每个节点都要配置
抓单播报文:
九.邮件通知实现
节点切换时执行脚本,需要申请一个邮箱的服务码
切换节点时收到邮件:
在这个时间keepalived1成为主节点了。