一、引言
随着网站业务量的增长网站的服务器压力越来越大,自然就需要处理高并发、高可用、高性能的“三高”问题,为了解决此问题,需要一个稳定、可扩展的负载均衡方案,可以使用基于完整开源软件的架构LVS+Keepalived,实现一个负载均衡及高可用的服务器集群。
二、LVS简介
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,也是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
三、Keepalived简介
Keepalived是一个用C语言编写的路由软件,该项目的主要目标是为Linux系统和基于Linux的基础设施提供简单而健壮的负载均衡和高可用性。Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态。
负载均衡框架依赖于著名且广泛使用的Linux虚拟服务器(IPVS)内核模块提供Layer4负载均衡。Keepalived实现了一组检查程序,根据服务器的运行状况动态地、自适应地维护和管理负载均衡服务器池。另一方面通过VRRP协议实现了系统的高可用性。VRRP是路由器故障转移的基础。此外,为了提供最快的网络故障检测,keepalive实现了BFD协议。Keepalived框架可以独立使用,也可以一起使用,以提供弹性基础设施。
四、Keepalived的高可用工作原理
Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个VIP(即虚拟IP,附在主机网卡上,对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP)。
Keepalived启动后的进程如下:
Keepalived <-- Parent process monitoring children
\_ Keepalived <-- VRRP child
\_ Keepalived <-- Healthchecking child
Keepalived通过Healthchecking子进程检测web服务器的状态,如果有一台web服务器死机或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除。此时,备份服务器就会接管虚拟IP(此时称为VIP的“漂移”),而访问虚拟IP即访问了备份服务器,由备份服务器继续提供服务,从而保证了系统的高可用性。
当发生故障的web服务器工作正常后,Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
五、Keepalived体系结构
Keepalived体系结构主要分为两部分:内核层与用户层。
1.内核层
IPVS模块:可配置。如果需要负载均衡功能,可以在编译Keepalived时开打负载均衡功能,也可以通过编译参数关闭。
NetLINK模块:主要用于实现一些高级路由框架和一些相关参数的网络功能,完成用户层Netlink Reflector模块发来的各种网络请求。
2.用户层(建立在内核层之上)
Scheduler I/O Multiplexer:I/O复用分发调度器,负载安排Keepalived所有内部的任务请求。
Memory Mngt:内存管理机制,提供访问内存的通用方法。
Control Plane:keepalived的控制组件,编译和解析配置文件。
Core components 核心组件,包含以下几个部分:
Watchdog:检测工具,监控Checkers和VRRP进程。
Checkers: Keepalived最基础、最主要的功能,实现对服务器运行状态检测和故障隔离。
System call:标记real server权重。
SMTP:邮件组件。
VRRP Stack: VIP消息通告,实现HA集群中失败切换功能。
IPVS wrapper: 实现IPVS功能(即生成IPVS规则),发送到内核层并提供给IPVS模块,实现IPVS模块的负载功能。
Netlink Reflector:网络接口,实现高可用集群异常时虚拟IP(VIP)的设置和切换。所有请求最后都发送到内核层的NETLINK模块完成。
六、VRRP协议与工作原理
在现实的网络环境中。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。
VRRP协议,虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP),它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。
VRRP的目的就是为了解决静态路由单点故障问题。
VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。
VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。
每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。
七、参考
keepalived 官网:
https://www.keepalived.org/
配置文件中的参数详细介绍与解释:
https://www.keepalived.org/manpage.html
其他:
http://blog.chinaunix.net/uid-26575352-id-3529109.html
http://www.yunweipai.com/35361.html