一.架构
用户空间核心组件:
- 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成为主节点了。
