lvs也是一款负载均衡软件,Linux虚拟服务器的简称。工做在os7层模型第4层,它是基于IP地址和端口号作转发的,由于他工做在第4层,因此它不支持正则处理和动静分离,nginx是工做在第7层的,支持这两种。linux
最先来讲防火墙是能够实现负载均衡的,后来就移除掉了,为何?由于跟lvs一比,就是小巫见大巫了。nginx
一、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低算法
二、工做在网络4层,经过vrrp(虚拟路由冗余协议)协议转发(仅做分发之用),具体的流量由linux内核处理,所以没有流量的产生。sql
三、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)windows
四、应用范围比较广,能够对全部应用作负载均衡;后端
五、不支持正则处理,不能作动静分离。服务器
六、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小链接)、wlc(权重最小链接)cookie
七、配置 复杂,对网络依赖比较大,稳定性很高。网络
一、工做在网络的7层之上,能够针对http应用作一些分流的策略,好比针对域名、目录结构;并发
二、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
三、Nginx安装和配置比较简单,测试起来比较方便;
四、也能够承担高的负载压力且稳定,通常能支撑超过1万次的并发;
五、对后端服务器的健康检查,只支持经过端口来检测,不支持经过url来检测。
六、Nginx对请求的异步处理能够帮助节点服务器减轻负载;
七、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
八、不支持Session的直接保持,但能经过ip_hash来解决。、对Big request header的支持不是很好,
九、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
十、Nginx还能作Web服务器即Cache功能。
一、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
二、可以补充Nginx的一些缺点好比Session的保持,Cookie的引导等工做
三、支持url检测后端的服务器出问题的检测会有很好的帮助。
四、更多的负载均衡策略好比:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
五、单纯从效率上来说HAProxy更会比Nginx有更出色的负载均衡速度。
六、HAProxy能够对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
七、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
八、不能作Web服务器即Cache。
轮循(rr):挨个点后端节点,除非我后端节点的都点完了,再重头来。
带权轮循(wrr):设置权重,就是weight。
最小链接(lc):哪台机器链接小,我给谁。
权重最小链接(wlc):带权重。
ipvs(用这个去作策略,调用内核)和ipvsadm(工做在用户空间)
工做原理:用户发送一个请求,通过调度器,然后调度器经过自身的算法,发到后端真实的主机,然后real server数据返回给调度器,调度器返回给用户,因此真实主机的网关必须指向调度器,调度器必需要有两块网卡,一块通外网,一块通内网,因此这就涉及到了路由转发,还得设置ip_forward。
缺点:由于调度器即负责接收报文又负责发送报文,因此压力很大,性能较低。
优势:配置简单。
工做原理:客户端发送请求给调度器,调度器就收到请求以后,发现请求实在是在规则里面存在的地址,那么它将目标MAC改成了RIP的MAC地址,并将此包发送给real server。real server发现请求报文中的目的MAC是本身,就会将此报文接收下来,处理完请求报文后,将响应报文经过lo接口送给eth0网卡直接发送给客户端。
1. 轮叫调度 rr
这种算法是最简单的,就是按依次循环的方式将请求调度到不一样的服务器上,该算法最大的特色就是简单。轮询算法假设全部的服务器处理请求的能力都是同样的,调度器会将全部的请求平均分配给每一个真实服务器,无论后端 RS 配置和处理能力,很是均衡地分发下去。
2. 加权轮叫 wrr
这种算法比 rr 的算法多了一个权重的概念,能够给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,若是服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。
3. 最少连接 lc
这个算法会根据后端 RS 的链接数来决定把请求分发给谁,好比 RS1 链接数比 RS2 链接数少,那么请求就优先发给 RS1
4. 加权最少连接 wlc
这个算法比 lc 多了一个权重的概念。
#两块网卡,一块桥接 TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.1.9 GATEWAY=192.168.1.1 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #一块vmnet2(他的ip就是后端机器的网关) TYPE=Ethernet BOOTPROTO=static DEVICE=ens37 ONBOOT=yes IPADDR=172.16.100.1 #安装ipvsadm包 cd /本地挂载点目录/ Packages rpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm #开启路由转发功能 echo “1” > /proc/sys/net/ipv4/ip_forward #添加通外网的ip ipvsadm –A(添加服务ip的意思) –t(指定tcp协议) 192.168.1.9:80 -s(算法)rr #添加real server ip ipvsadm –a –t 192.168.1.9:80 –r 172.16.100.2 –m(指定nat模式) ipvsadm –a –t 192.168.1.9:80 –r 172.16.100.3 –m(指定nat模式) #然后两台内网机器启动httpd。
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=172.16.100.3 GATEWAY=172.16.100.1 NETMASK=255.255.255.0
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=172.16.100.2 GATEWAY=172.16.100.1 NETMASK=255.255.255.0 #查看配置 ipvsadm –L –n #使用windows访问调度器外网ip测试便可
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.24.8 GATEWAY=192.168.24.2 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #安装ipvsadm yum install ipvsadm –y #添加对外提供服务IP ipvsadm –A –t 虚拟ip(必须是同一网段,随便写):80 -s rr #添加2台real server IP ipvsadm –a –t 虚拟ip:80 –r 内网ip:80 –g(路由模式) #如今须要在网卡的配置中配置虚拟ip ifconfig命令需下载net-tools.x86_64 ifconfig ens33:0 虚拟ip地址 broadcast 虚拟ip地址 netmask 255.255.255.255 up #添加一个静态路由(让访问250这个地址的时候走ens33:0这个网卡) route add –host 虚拟ip地址 dev ens33:0 #查看网关 route –n
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.24.9 GATEWAY=192.168.24.2 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #添加vip ifconfig lo:0 虚拟ip地址 broadcast 虚拟ip地址 netmask 255.255.255.255 up #然后指定静态路由 route add –host 虚拟ip地址 dev lo:0
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.24.10 GATEWAY=192.168.24.2 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #添加vip ifconfig lo:0 虚拟ip地址 broadcast 虚拟ip地址 netmask 255.255.255.255 up #然后指定静态路由 route add –host 虚拟ip地址 dev lo:0
#分别给两台后端写入 echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignore echo “1” > /proc/sys/net/ipv4/conf/all/arp_ignore echo “2” > /proc/sys/net/ipv4/conf/lo/arp_announce echo “2” > /proc/sys/net/ipv4/conf/all/arp_announce
#设置权重轮循 ipvsadm -C ipvsadm -A -t 192.168.24.250:80 -s wrr ipvsadm -a -t 192.168.24.250:80 -r 192.168.24.9:80 -w 1 -g ipvsadm -a -t 192.168.24.250:80 -r 192.168.24.10:80 -w 2 -g
0:默认,只用本地配置的有响应地址都给予响应
1:仅仅在目标IP是本地地址,而且是配置在请求进来的接口上的时候才给予响应
(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
0:默认,表示使用配置在任何接口的任何地址向外通告
1:尽可能仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告