keepalived
Keepalived是一款用于保障服务高可用性的软件,它能自动侦测服务器状态、移除故障服务器、切换到正常运行的服务器、添加恢复后的服务器到集群中。
实现的基本思路
Keepalived是基于VRRP协议的实现,主要用在IP层、TCP层和应用层。
- IP层:Keepalived会定期向服务器群中的服务器发送一个ICMP数据包(Ping),如果发现IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除。
- TCP层:类似IP层,只不过这里是检测TCP服务的端口
- 应用层:Keepalived将根据用户的设定来检查服务程序的运行是否正常
VRRP协议
VRRP (Virtual Router Redundancy Protocol),虚拟路由冗余协议,是解决局域网中配置静态网关出现单点故障的路由协议。 VRRP是一种选择协议,它可以把一个虚拟路由器的职责,动态转交给Master进行处理;VRRP是一种路由容错协议,也可以叫做备份路由协议。当Master宕掉后,虚拟路由将启用备份路由器,从而实现网络通信可用
在具有多播或广播能力的局域网中,借助VRRP能在某台路由器出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息
- VRRP路由器:物理的路由器,上面运行了实现VRRP协议的VRRPD程序
- VRRP虚拟路由器:逻辑上的路由器,通常由多台路由器组成,可以看成是一个VRRP路由器池,对外看起来是一个路由器,就是那个虚拟的路由器,其标识称为VRID(范围是0-255)
- Master和Backup:一个虚拟路由里面的多个路由器,并不是同时工作的,工作的那台称为Master,其他的就是Backup。
VRRP协议工作机制
- 路由器开启VRRP功能后,会根据优先级确定出Master
- Master会通过IP多播包的形式来发送公告报文,Backup会接收到这些报文
- 如果是抢占式:Backup会跟发送报文的Master比较优先级,如果Backup优先级更高,那么Backup会抢占成为Master,而Master会让位成为Backup;如果是非抢占式:只要Master没有故障,不会出现新的Master。
- 如果备份路由器在连续三个公告间隔内收不到VRRP公告,或收到优先级为0的公告的话,就会按照竞选协议来选出新的Master,以保证服务的可用
VRRP负载分担
在实际组网中一般会进行VRRP负载分担方式的设置。负载分担方式是指多台路由器同时承担业务,避免设备闲置。
同一台路由器可以加入多个备份组,在不同组中有不同的优先级,使得该路由器可以在一个组中作为Master,在其他的备份组中作为Backup
keepalived结构
大致分两层结构:用户空间 user space和内核空间 kernel space
- IPVS:IP虚拟服务器(IP Virtual Server),是一种提供负载平衡功能的技术
- NetLink:提供高级路由及其他相关的网络功能
- WatchDog:负责监控checkers和VRRP进程的状况
- Checkers:负责真实服务器的健康检查,是keepalived最主要的功能。可以没有VRRP Stack,但健康检查healthchecking是一定要有的。
- VRRP Stack:负责负载均衡器之间的失败切换FailOver。如果只用一个负载均衡器,则VRRP不是必须的。
- IPVS wrapper:用来发送设定的规则到内核的IPVS部分
- Netlink Reflector:用来设定VRRP的vip地址等
- 控制面板:对配置文件的编译和解析。Keepalived不是一次性解析所有的配置文件,而是用到一个模块解析一个,因此可以在每个模块看到XXX_parser.c这样的文件
配置示例
检查nginx
1 | !/bin/sh |