平台及环境:
LVS1: srv1.training.cc private_IP: 172.25.31.20/24 pub_IP :10.0.0.20/24 OS=rhel6.5
private_Virtual IP: 172.25.31.99/32 pub_Virtual IP:10.0.0.99/32
realserver1 : srv2.training.cc private_IP:172.25.31.21 OS=rhel6.5
realserver2 : srv4.training.cc private_IP:172.25.31.23 OS=rhel6.5
所有服务器的firewall 和selinux 为关闭状态.
基本拓扑及架构(此拓扑省略了LVS前面的交换机、防火墙和路由器);
基础概括:
当服务请求到达LVS时,寻址为一个虚拟IP地址(virtual IPaddress) 也称(floating IP)。同一时间内,仅有一个LVS为活动的, 它的角色是转发来自于虚拟IP的服务请求到真实的服务器。它的转发机制基于10种负载均衡算法中的一种。
负载均衡算法:
1. 轮询rr(Round-Robin ):
按次序分配请求给真实的服务器。即所有真实服务器视为平等。
2. 加权轮询 wrr (Weighted Round Robin):
将请求分配置给连接较少的真实服务器。
3. 最少连接 lc (Least Connection):
将较多的请求分配给连接数较少的服务器上
4. 加权最少连接 wlc (Weighted Least Connection) (默认):
将较多的请求分配给连接数较少的服务器上。(根据服务器性能进行判断),服务器性能以使者指定的权重为准。
5. 基于本机的最少连接lblc (Locality-Based Least -Connection):
将较多的请求分配给边接数较少的服务器上(根据其目的地的IP地址)。适用于代理、高速服务器集群中。
6. 基于本机的最少连接与复制(Locality-Based Least-Connection Schedulingwith Replication Scheduling);
将较多的请求分配给边接数较少的服务器上(根据其目的地的IP地址)。该算法设计同样用于代理缓存服务器群集。
7.目的Hash, dh (Destination Hash):
通过在静态Hash表中查找目的IP, 将请求分配给真实的服务器。
8. 源Hash,sh (Source Hash):
通过在静态Hash表中查找源IP, 将请求分配给真实的服务器。
9. 最短期望延迟sed (Shortest Expected Delay):
分配请求服务至最短延迟的服务器。
10. 无队列 nq(Never Queue):
分配请求服务至一个空闲的服务器(如果存在),替代等候一个快速的服务器,如果所有服务器处于繁忙状态则采用最短延迟(sed)去分配服务请求。
活动(Active)的LVS 同样也通过简单的send/expect脚本动态的监控真实服务器上特定服务的整体健康状态。Backup LVS 扮演一个备用系统的角色,周期性的与活动的LVS交换心跳信息。当活动的LVS发生故障、Backup LVS 使用ARP欺骗(ARP Spoofing). 接管虚拟IP 服务。
LVS路由方式:
1. NAT (Network Address Translation):
网络地址转换(Network Address Translation NAT)或NAT 路由进负载均衡。
优点:真实的服务器可以是任何类型的操作系统。
缺点:当在一个大型集群部署中,LVS 可能会是一个瓶颈(网络瓶颈),因为它必须处理所有进出的请求。
2. Direct Routing DR
直接路由允许真实的服务器处理路由数据包,以及直接响应用户请求而不用通过LVS来传输所有出站的数据包 。即,LVS只处理进入的数据包,从而减少的了网络性能降低的可能性。但在网络负载过重的情况下,可能会成为瓶颈。
DR路由与ARP和ARP限制:
由于LVS 的VIP与所有的真实服务器的VIP相同,因此,ARP请求会广播到此VIP相关联的所有机器上。这会造成客户端直接与真实服务器相连接,并直接处理请求。从而跳过LVS。
解决方法:
a.arptables_jf可以避免ARP与真实服务器的IP相关联。
b.iptables 通过一开始不配置真实服务器的上VIP,来完全避免了ARP问题。
3. ipip encapsulating (Tunneling):
4. FullNAT (需要内核支持)
Configuration:
注:LVS为双网卡,一个用于连接公共网络,另一个用于连接真实的服务器,且处于不同网段。
1. LVS初始配置:
开启包转发:
查看IP转发是否 已经开启
# sysctl net.ipv4.ip_forward
启用IP转发(即时生效):
# sysctl -w net.ipv4.ip_forward=1
2.为LVS配置VirtualIP:
# ip addr add 10.0.0.99/32 dev eth0:1 ##pub_Virtual IP: 客户端访问
# ip addr add 172.25.31.99/32 dev eth1:1 ##pri_VirtualIP: 充当真实服务器的默认网关
3. 配置LVS 负载:
# yum install ipvsadm -y
添加虚拟服务http, Virtual IP : 10.0.0.99 ;负载均衡算法Round-Robin .
# ipvsadm -A -t 10.0.0.99:80 -s rr
添加Real Server; 使用NAT路由方式。
#ipvsadm -a -t 10.0.0.99:80 -r 172.25.31.21:80 -m
#ipvsadm -a -t 10.0.0.99:80 -r 172.25.31.23:80 -m
验证配置并启动ipvsadm
# ipvsadm -ln
# /etc/init.d /ipvsadm save
# /etc/init.d/ipvsadm start
# chkconfig ipvsadm on
4. 配置Real Server服务器:
(1).配置所有的Real Server的默认网关为 private VIP . 这里即,172.25.31.99
GATEWAY=172.25.31.99
# /etc/init.d/network restart
# route -n
确认网关配置正确,否则真实服务器不能正确响应客户请求!
2.在所有Real Server上安装apache. 并添加测试页面:
Realserver : srv2
#yum install httpd -y
# echo "srv2.training.cc main page" > /var/www/html/index.html
RealServer : srv4
#yum install httpd -y
# echo "srv4.training.cc main page" > /var/www/html/index.html
5. 验证与测试
配置客户端电脑为10.0.0.0/24网段IP, 并访问http://10.0.0.99 反复刷新页面,每次出的页面不同则表示成功。
测试及验证结果
Summary:
1. 从网络布局的观点来看,使用NAT方式的负载均衡是最容易配置的一种,因为对公网而言(客户端)仅需要一个访问点。对RealServer而言只需通过LVS转发所有的请求。其本身可以处在内部的私有网络上。但在实施时,首要考虑LVS服务器的性能,以及网络吞吐量问题,因为LVS将要处理所有进出的服务请求。
2. NAT 拓扑具对于操作系统具有极大的具活性,因为RealServer的服务器可以是不同类型的操作系统。
3. 硬件:在 NAT 拓扑中,Real Server 仅响应LVS,所以只需单一网卡就可以完成工作;而LVS,则需要双网卡在两个网络之间路由网络流量,所以这种拓扑在LVS上产生了一个网络瓶颈。当考虑实施这种架构时,确保LVS最少有两块网卡(1G以上)连接至与RealServer服务器通信的交换机上,以便负载更加高效;对于公网,则需考虑增加其带宽。
4. 在这个基本的2层架构中,只采用了单个LVS(无BackupLVS及高可用机制),当LVS发生故障时,则整个服务中断。所以,在真实生产环境中,需要考虑LVS本身的高可用性。如:采用LVS多主机,配置LVS为主/备模式(MASTER/BACKUP)或双组模式(MASTER/MASTER),或配置LVS高可用,以保证LVS本身对客户端持续可用。
September , 2016