博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVS负载均衡
阅读量:7286 次
发布时间:2019-06-30

本文共 4887 字,大约阅读时间需要 16 分钟。

  lvs也是一款负载均衡软件,Linux虚拟服务器的简称。工作在os7层模型第4层,它是基于IP地址和端口号做转发的,因为他工作在第4层,所以它不支持正则处理和动静分离,nginx是工作在第7层的,支持这两种。

最早来说防火墙是可以实现负载均衡的,后来就移除掉了,为什么?因为跟lvs一比,就是小巫见大巫了。

LVS Nginx HAProxy对比

LVS:

1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低

2、工作在网络4层,通过vrrp(虚拟路由冗余协议)协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。

3、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)

4、应用范围比较广,可以对所有应用做负载均衡;

5、不支持正则处理,不能做动静分离。

6、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)

7、配置 复杂,对网络依赖比较大,稳定性很高。

Ngnix:并发量上来之后并不怎么消耗资源,因为他利用了异步IO这么一个概念。

1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;

2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;

3、Nginx安装和配置比较简单,测试起来比较方便;

4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;

5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。

6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;

7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。

8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request header的支持不是很好,

9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)

10、Nginx还能做Web服务器即Cache功能。

HAProxy的特点是:

1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;

2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作

3、支持url检测后端的服务器出问题的检测会有很好的帮助。

4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现

5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。

6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。

7、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)

8、不能做Web服务器即Cache。

负载均衡

轮循(rr):挨个点后端节点,除非我后端节点的都点完了,再重头来。

带权轮循(wrr):设置权重,就是weight。

最小连接(lc):哪台机器连接小,我给谁。

权重最小连接(wlc):带权重。

lvs有两部分组成

ipvs(用这个去做策略,调用内核)和ipvsadm(工作在用户空间)

lvs模式

NAT模式:

 

 

  工作原理:用户发送一个请求,经过调度器,而后调度器通过自身的算法,发到后端真实的主机,而后real server数据返回给调度器,调度器返回给用户,所以真实主机的网关必须指向调度器,调度器必须要有两块网卡,一块通外网,一块通内网,所以这就涉及到了路由转发,还得设置ip_forward。

缺点:因为调度器即负责接收报文又负责发送报文,所以压力很大,性能较低。

优点:配置简单。

路由DR模式:

    工作原理:客户端发送请求给调度器,调度器就收到请求之后,发现请求实在是在规则里面存在的地址,那么它将目标MAC改为了RIP的MAC地址,并将此包发送给real server。real server发现请求报文中的目的MAC是自己,就会将此报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

lvs最常用的算法:

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 多了一个权重的概念。

NAT模式配置:

调度器(DS):

#两块网卡,一块桥接TYPE=EthernetBOOTPROTO=staticDEVICE=ens33ONBOOT=yesIPADDR=192.168.1.9GATEWAY=192.168.1.1NETMASK=255.255.255.0DNS1=8.8.8.8DNS2=114.114.114.114#一块vmnet2(他的ip就是后端机器的网关)TYPE=EthernetBOOTPROTO=staticDEVICE=ens37ONBOOT=yesIPADDR=172.16.100.1#安装ipvsadm包cd /本地挂载点目录/ Packagesrpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm#开启路由转发功能echo “1” > /proc/sys/net/ipv4/ip_forward#添加通外网的ipipvsadm –A(添加服务ip的意思) –t(指定tcp协议) 192.168.1.9:80 -s(算法)rr#添加real server ipipvsadm –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。

real server1 ip

TYPE=EthernetBOOTPROTO=staticDEVICE=ens33ONBOOT=yesIPADDR=172.16.100.3GATEWAY=172.16.100.1NETMASK=255.255.255.0

real server2 ip

TYPE=EthernetBOOTPROTO=staticDEVICE=ens33ONBOOT=yesIPADDR=172.16.100.2GATEWAY=172.16.100.1NETMASK=255.255.255.0#查看配置ipvsadm –L –n#使用windows访问调度器外网ip测试即可

DR模式(路由模式)配置:

调度器

TYPE=EthernetBOOTPROTO=staticDEVICE=ens33ONBOOT=yesIPADDR=192.168.24.8GATEWAY=192.168.24.2NETMASK=255.255.255.0DNS1=8.8.8.8DNS2=114.114.114.114#安装ipvsadmyum install ipvsadm –y#添加对外提供服务IPipvsadm –A –t 虚拟ip(必须是同一网段,随便写):80  -s rr#添加2台real server IPipvsadm –a –t 虚拟ip:80 –r 内网ip:80 –g(路由模式)#现在需要在网卡的配置中配置虚拟ip  ifconfig命令需下载net-tools.x86_64ifconfig ens33:0 虚拟ip地址 broadcast 虚拟ip地址 netmask 255.255.255.255 up#添加一个静态路由(让访问250这个地址的时候走ens33:0这个网卡)route add –host 虚拟ip地址 dev ens33:0#查看网关route –n

real server1

TYPE=EthernetBOOTPROTO=staticDEVICE=ens33ONBOOT=yesIPADDR=192.168.24.9GATEWAY=192.168.24.2NETMASK=255.255.255.0DNS1=8.8.8.8DNS2=114.114.114.114#添加vipifconfig lo:0 虚拟ip地址 broadcast 虚拟ip地址 netmask 255.255.255.255 up#而后指定静态路由route add –host 虚拟ip地址 dev lo:0

real server2

TYPE=EthernetBOOTPROTO=staticDEVICE=ens33ONBOOT=yesIPADDR=192.168.24.10GATEWAY=192.168.24.2NETMASK=255.255.255.0DNS1=8.8.8.8DNS2=114.114.114.114#添加vipifconfig 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_ignoreecho “1” > /proc/sys/net/ipv4/conf/all/arp_ignoreecho “2” > /proc/sys/net/ipv4/conf/lo/arp_announceecho “2” > /proc/sys/net/ipv4/conf/all/arp_announce
#设置权重轮循ipvsadm -Cipvsadm -A -t 192.168.24.250:80 -s wrripvsadm -a -t 192.168.24.250:80 -r 192.168.24.9:80 -w 1 -gipvsadm -a -t 192.168.24.250:80 -r 192.168.24.10:80 -w 2 -g

arp_ignore:定义接收到ARP请求时的响应级别     

0:默认,只用本地配置的有响应地址都给予响应      

1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应

(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)

arp_announce:定义将自己的地址向外通告时的级别      

0:默认,表示使用配置在任何接口的任何地址向外通告      

1:尽量仅向目标网络通告与其网络匹配的地址      

2:仅向与本地接口上地址匹配的网络进行通告  

转载于:https://www.cnblogs.com/shuaiyin/p/10960590.html

你可能感兴趣的文章
SylixOS在x86平台的快速构建
查看>>
九宫格与函数
查看>>
solaris 10u11 安装vim7.4
查看>>
Maven(八)pom.xml简介
查看>>
IGP-LAB-RIP-3
查看>>
会说话的vc编译器(一)
查看>>
Exchange 2013部署系列之(一)系统要求
查看>>
利用itext导出word表格,处理图片
查看>>
我的友情链接
查看>>
数据结构(一)循环链表 约瑟夫环
查看>>
fastDFS+java api + sping mvc +JPA+Hibernate
查看>>
解读关于HTML5的六个传说
查看>>
Solaris ZONE
查看>>
Android APP应用开发视频教程
查看>>
unrecognized selector sent to class 0x91cde0
查看>>
python学习笔记-Day10--(进程\线程\协程)
查看>>
linux学习第4天(自习)
查看>>
持续更新:Centos常用方便的命令与技巧集合
查看>>
ubuntu 终端vi和gedit中文乱码解决方案
查看>>
Linux下无连接的套接字通信C实现
查看>>