LVS
LVS(Linux Virtual Server, Linux 虚拟服务器),它是一个虚拟的四层交换集群系统。本身不产生流量,只做用户请求的转发。
LVS 由2部分组成:
-
IPVS:安装在Director Server,同时虚拟出一个IP地址,用户必须通过这个虚拟的IP(VIP)访问服务。IP负载均衡技术就是通过内核中的IPVS模块来实现。
-
ipvsadm:用户空间的集群服务管理工具。
IP负载均衡技术
- Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标IP地址,根据预设的调度算法,将请求分发给后端的真实服务器。真实服务器的响应报文通过调度器时,报文的源地址将被重写,再返回给用户,完成整个负载调度过程。由于请求和响应报文都必须经过调度器,当服务器结点数目为10~20 时,调度器的处理能力将成为瓶颈。
- Virtual Server via IP Tunneling(VS/TUN)
调度器把请求报文通过IP隧道转发至真实服务器,真实服务器直接响应给用户,所以调度器只处理请求报文。由于一般网络服务应答报文比请求报文大很多,采用 VS/TUN 技术后,集群系统的最大吞吐量可以提高10倍。
- Virtual Server via Direct Routing(VS/DR)
调度器改写请求报文的MAC地址,将请求发送到真实服务器,真实服务器直接响应给用户。可以极大地提高整个集群系统的伸缩性。但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。
-
Director Server对外的网卡,Real Server的lo接口均配置为VIP。
-
Real Server内核参数arp_ignore=1。(只响应目标IP地址为接收网卡上的本地地址的arp请求)
-
Real Server内核参数arp_announce=2。(忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址)
LVS四层负载均衡
四层负载均衡工作在传输层,调度器接受到客户端请求后,通过修改数据包的地址信息,将请求转发到后端服务器,由客户端和后端服务器直接建立TCP连接。特点是负载性能高、支持各种网络协议,但是对网络依赖较大。
负载调度算法
轮询、加权轮询、最小连接、加权最小连接等。
Keepalived
Keepalived 实现了基于 TCP/IP 协议的网络层,传输层及应用层的健康检查机制。
-
网络层是以服务器的IP地址是否有效作为服务器工作正常与否的标准。(ICMP数据包,即ping命令)
-
传输层主要以TCP端口的状态来决定服务器工作正常与否。
-
应用层是对指定的URL执行HTTP GET,然后使用MD5算法对HTTP GET结果进行求和。用这个结果与预期值比较,检查应用程序服务器是否正常工作。
Keepalived 还基于 VRRP 协议实现了 LVS 负载调度器的故障转移。
VRRP协议
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议),将N台提供相同功能的静态路由器组成一个路由器组,这个组里面有一个master和多个backup,master有一个对外提供服务的vip。master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup来作为master。
高可用架构
LVS+keepalived+Nginx+应用服务器。