负载均衡是虚拟服务的一种好的处理方案。当设计一种负载均衡的拓扑时必定要考虑到以下两点:html
真实服务器的可用性使用健康检测机制。linux
负载均衡器的可用性使用故障转移协议。web
负载均衡真实服务,提供了一个全局的高可用虚拟服务。为增长负载均衡服务的可用性,须要检测每一个真实服务器节点的状态。这个问题能够经过使用健康检测框架来操做一个服务器池来解决。服务器
另外一方面,当使用一个负载均衡器director,对虚拟服务引入了一个故障节点。因负载均衡器的高可用性必须被处理,使用专用的路由协议对director的故障转移/虚拟化。多线程
Keepalived解决这两个问题:一方面,增长一个强壮和健壮的监控检测框架;另外一方面,实现了一个热待机协议。这两个框架能够处理lvs框架来操做lvs真实服务器池,对lvs真实服务池的操做能够经过增长或者删除基于健康检测的真实服务器来完成。架构
LVS 表明了linux virtual Server. LVS 是linux 内核内嵌的一个负载均衡工具。更多信息参考工程主页:http://www.linux-vs.org. LVS做为一个网桥(经过nat)来负载均衡TCP/UDP流。LVS路由器组件以下:负载均衡
关键词:框架
LVS组件:异步
VIP: 能够被全部用户访问的虚拟IP,全部的用户经过这个IP访问服务器。工具
真实服务器:应用服务部署在真实的服务器上,处理用户的请求。上图中的web server1 和webserver2 便是。
服务器池:一组真实服务器。
虚拟服务器:被应用访问的服务器池地址。
虚拟服务: 关联到VIP的TCP/UDP服务。
VRRP 组件:
VRRP:虚拟路由器冗余协议是一种选择协议,它能够把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。
VRRP实例:a thread manipulating vrrpv2 specific set of ip addresses。
一个VRRP实例能够做为一个或者多个VRRP实例的备份。
IP地址拥有者:用户IP地址做为真实接口地址的VRRP实例。
主机状态:一种VRRP实例状态,当VRRP实例处于这种状态就能够认为关联此实例的IP地址负责处理发送的请求。
备机状态:一种VRRP实例状态,当当前的处于主机状态的VRRP实例宕机时,处于该状态的VRRP实例有能力处理发送来的请求。
真实负载均衡器:运行一个或者多个VRRP实例的一个LVS director。
虚拟负载均衡器:一组真实负载均衡器。
被同步实例:一个将要被同步的VRRP实例,被监控的VRRP实例。
通知:发送给处于一组处于主机状态的VRRP实例的一个简单VRRPv2包的名称。
软件架构涉及4个linux 内核组件:
下面将阐述keepalived软件的内部实现组件。Keepalived使用一个基于中央I/O复用器的多线程框架。2个主要的组件以下:
健康检测工做线程:每一个健康检测被注册到全局的调度框架。这些工做线程在keepalived 健康检测框架下执行健康检测。健康检测框架当前执行3个检测:
TCP检测:应用第三层检测。
HTTP GET:检测一个远程http服务器的html 内容完整性。
SSL GET:检测一个远程SSL服务器的html内容完整性。
混合检测:应用用户定义的完整性检测。
VRRP 包分发器:解服用特定I/O来处理VRRP实例的响应。
这两个主要组件使用到下面的底层primitives
SMTP通知:一个SMTP包装器使用异步数据流处理。这个primitive使得keepalived能够发送邮件通知。
IPVS框架:LVS NAT,DR&TUN等。
Netlink:提供VRRP VIP操做。
组播:使用多播来发送VRRP通告。
IPCHAINS框架,如上所述。
SYSLOG: 全部后台通知消息使用syslog后台来记录。
如上《略》
为了director故障转移,keepalived实现了VRRP协议。这个协议能够这样简洁的描述为:
虚拟路由器冗余协议(VRRP)是一种选择协议,它能够把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就容许虚拟路由器的 IP 地址能够做为终端主机的默认第一跳路由器。使用 VRRP 的好处是有更高的默认路径的可用性而无需在每一个终端主机上配置动态路由或路由发现协议。 VRRP 包封装在 IP 包中发送。[ 引用自rfc2338]。
配置文件分为三个部分: