一:优点:
1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3、应用范围比较广,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
6、配置 复杂,对网络依赖比较大,稳定性很高。
二:三种工作模式
nat模式:
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
④.然后lvs将此报文的源地址修改为本机并发送给客户端。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
1)nat环境部署:
1 DS:桥接:192.168.1.192 #连接客户端的ip需要通外网,桥接或者nat模式 2 255.255.255.0 3 192.168.1.1 4 vmnet2:192.168.75.1 5 255.255.255.0 6 RS1:192.168.75.2 7 255.255.255.0 8 192.168.75.1 #真实提供服务的服务器网关必须指向调度器ip 9 RS2:192.168.75.3 10 255.255.255.0 11 192.168.75.1
2)挂载
mount /dev/cdrom /mnt/
3)安装ipvsadm包
yum -y install ipvsadm
4)开启ip_forward转发
echo 1 > /proc/sys/net/ipv4/ip_forward (临时开启)
或vim /sysctl.conf 写入net.ipv4.ipforward=1 ,保存退出,执行sysctl -p (永久开启)
5)配置nat模式
1 ipvsadm -A -t 192.168.1.192:80 -s wrr #先添加对外连接的ip地址,端口默认80,使用加权轮叫算法 2 ipvsadm -a -t 192.168.1.192:80 -r 192.168.75.2 -w 2 -m #再分别添加两台上游服务器,-m代表nat模式 3 ipvsadm -a -t 192.168.1.192:80 -r 192.168.75.3 -w 1 -m
注意:三台主机的httpd服务都要打开,因为后端服务器处理完请求会返回到负载均衡器,而DR模式中后端服务器自己通过虚拟路由返给客户不经过负载均衡器,所以负载的主机不需要打开。
DR模式:
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将目标MAC改为了RIP的MAC地址,并将此包发送给RS。
③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端(不经过负载均衡器)。
注意:1.需要设置lo接口的VIP不能响应本地网络内的arp请求 #即让vip不对外宣告隐藏自己,只接受负载均衡器转发的请求
2.无论是nat还是dr模式都最好关闭所有防火墙,打开real_server的web服务
3.在cmd命令页面中curl 虚拟ip来测试,在windows页面中由于缓存问题不会按照权重显示。
优点:
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万一下都可以考虑用haproxy/nginx。
缺点:所有 RS 节点和调度器 LB 只能在一个局域网里面。
1 direct_server:192.168.254.17 2 3 real_server:192.168.254.18 4 real_server:192.168.254.19 5 #以上三台集群服务器都要为同一网段 6 #vip为虚拟服务ip 7 vip:192.168.254.250 8 9 10 direct_server: 11 yum install ipvsadm 12 13 老板 14 direct_server: 15 ipvsadm -C #清除配置信息 16 17 18 #添加对外提供的服务ip 19 ipvsadm -A -t 192.168.254.250:80 -s rr #-A为ADD -t为tcp -s rr为设置算法为轮叫算法 20 21 #添加2台real_server主机 22 ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式 23 ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式 24 25 #配置网卡的子网口为vip,ip地址为192.168.254.250 26 ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up #ens33:0自定义名称 up:开启 27 28 #添加路由(访问192.168.254.250都走ens33:0这个网卡) 29 route add -host 192.168.254.250 dev ens33:0 30 31 员工1 | 员工2 32 real_server: 33 #在回环地址的子网口上配置服务ip(vip) 34 ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up 35 36 #添加路由 37 route add -host 192.168.254.250 dev lo:0 38 #然后在两台real_server上写入 39 echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore 40 echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce 41 echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore 42 echo "2">/proc/sys/net/ipv4/conf/all/arp_announce 只写两个all也可以 43 44 45 echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore 46 echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce 47 echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore 48 echo "0">/proc/sys/net/ipv4/conf/all/arp_announce 49 50 51 arp_ignore:定义接收到ARP请求时的响应级别 52 0:默认,只用本地配置的有响应地址都给予响应 53 1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应 √ 54 (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应) 55 56 arp_announce:定义将自己的地址向外通告时的级别 57 0:默认,表示使用配置在任何接口的任何地址向外通告 58 1:尽量仅向目标网络通告与其网络匹配的地址 59 2:仅向与本地接口上地址匹配的网络进行通告 √