十 LVS 负载均衡

回顾nginx 反向代理负载均衡

负载均衡的妙用

负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,

来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、

提高网络的灵活性和可用性。
单台计算机无法承受大规模的并发访问或数据流量了,

此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,

即减少用户等待响应的时间又提升了用户体验;
7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。

为什么要学lvs

工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名、

目录结构,Nginx单凭这点可利用的场合就远多于LVS了。
最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。
Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,

这个也是它的优势之一,相反LVS对网络稳定性依赖比较大。
Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。

LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。

简单一句话,当并发超过了Nginx上限,就可以使用LVS了。

日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。

大型门户网站,电商网站需要用到LVS

LVS介绍

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,

可以在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,

是中国国内最早出现的自由软件项目之一。

官网:http://www.linuxvirtualserver.org/index.html
中文资料
LVS项目介绍           http://www.linuxvirtualserver.org/zh/lvs1.html 
LVS集群的体系结构     http://www.linuxvirtualserver.org/zh/lvs2.html 
LVS集群中的IP负载均衡技术  http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的负载调度      http://www.linuxvirtualserver.org/zh/lvs4.html 

LVS内核模块ip_vs介绍

早在2.2内核时, IPVS就已经以内核补丁的形式出现。
从2.4.23版本开始,IPVS软件就合并到Linux内核的常用版本的内核补丁的集合。
从2.4.24以后IPVS已经成为Linux官方标准内核的一部分。

LVS无需安装
安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
ipvsadm是通过命令行管理,而keepalive读取配置文件管理
后面我们会用Shell脚本实现keepalive的功能

LVS集群搭建


环境准备
1.准备4台安装好CentOS7.4系统的虚拟机,内存512M。
2.所有虚拟机的防火墙和Selinux关闭
3.主机名及IP地址关系如下:
lb03 10.0.0.15
lb04 10.0.0.16
web03 10.0.0.17
web04 10.0.0.18
4.web03和web04安装Tomcat软件,并满足下面条件:
curl http://10.0.0.17/页面底部得到结果为web03
curl http://10.0.0.18/页面底部得到结果为web04
5.安装好wireshark 2.2.2版本 2.2.x版本以上即可


安装ipvsadm管理工具(只在lb03操作)
# 查看系统的LVS模块。
lsmod|grep ip_vs

# 默认没有加载模块,需要安装管理工具才会激活。
yum -y install ipvsadm

# 查看当前LVS状态,顺便激活LVS内核模块。
ipvsadm

[root@lb01 ~]# lsmod|grep ip_vs
ip_vs 141092 0
nf_conntrack 111302 1 ip_vs
libcrc32c 12644 2 xfs,ip_vs

配置LVS负载均衡服务(只在lb03操作)
步骤1:在eth0网卡绑定VIP地址(ip)
步骤2:清除当前所有LVS规则(-C)
步骤3:设置tcp、tcpfin、udp链接超时时间(--set)
步骤4:添加虚拟服务(-A),调度算法见man ipvsadm
步骤5:将虚拟服务关联到真实服务上(-a)
步骤6:查看配置结果(-ln)
ip addr add 10.0.0.13/24 dev eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
ipvsadm -ln

web服务器配置(在web03/web04同时操作下面步骤)
步骤1:在lo网卡绑定VIP地址(ip)
步骤2:修改内核参数抑制ARP响应
ip addr add 10.0.0.13/32 dev lo

cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl -p

使用浏览器访问http://10.0.0.13/
不要在lb03访问!可以在lb04测试(未加入LVS“团伙”)

问题1:浏览器访问没有发现轮询效果
答:LVS的轮询不像Nginx明显,可以使用多个客户端访问(Windows和Linux)
问题2:使用抓包工具,发现进行通信的是windows的IP和lb03的80端口,但是lb03明明没有80端口?
答:Windows抓包查看,可以发现数据包的源MAC地址是web01或web02
Linux:tcpdump -nn port 80; tcpdump -nn -e port 80
问题3:客户端的操作有什么含义?

LVS相关名词介绍

LVS集群的工作模式--DR直接路由模式 

DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,

而真实服务器将响应后的处理结果直接返回给客户端用户。
DR技术可极大地提高集群系统的伸缩性。

但要求调度器LB与真实服务器RS都有一块物理网卡连在同一物理网段上,

即必须在同一局域网环境。

 

通过在调度器LB上修改数据包的目的MAC地址实现转发。

注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。
请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,

因此,并发访问量大时使用效率很高,比Nginx代理模式强于此处。
因DR模式是通过MAC地址的改写机制实现转发的,

因此,所有RS节点和调度器LB只能在同一个局域网中。
需要注意RS节点的VIP的绑定(lo:vip/32)和ARP抑制问题。
强调下:RS节点的默认网关不需要是调度器LB的DIP,

而应该直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),

理论上讲,只要RS可以出网即可,不需要必须配置外网IP,但走自己的网关,那网关就成为瓶颈了。
由于DR模式的调度器仅进行了目的MAC地址的改写,因此,

调度器LB无法改变请求报文的目的端口。LVS DR模式的办公室在二层数据链路层(MAC),

NAT模式则工作在三层网络层(IP)和四层传输层(端口)。
当前,调度器LB支持几乎所有UNIX、Linux系统,但不支持windows系统。

真实服务器RS节点可以是windows系统。
总之,DR模式效率很高,但是配置也较麻烦。

因此,访问量不是特别大的公司可以用haproxy/Nginx取代之。

这符合运维的原则:简单、易用、高效。

日1000-2000W PV或并发请求1万以下都可以考虑用haproxy/Nginx(LVS的NAT模式)
直接对外的访问业务,例如web服务做RS节点,RS最好用公网IP地址。

如果不直接对外的业务,例如:MySQL,存储系统RS节点,最好只用内部IP地址。

问题3:客户端的操作有什么含义?

1. RealServer为什么要在lo接口上配置VIP?
答:既然要让RS能够处理目标地址为vip的IP包,首先必须要让RS能接收到这个包。

在lo上配置vip能够完成接收包并将结果返回client。

2.在eth0网卡上配置VIP可以吗?
答:不可以,将VIP设置在eth0网卡上,会影响RS的arp请求,

造成整体LVS集群arp缓存表紊乱,以至于整个负载均衡集群都不能正常工作。

3.为什么要抑制ARP响应?
先回顾ARP知识及了解arp_announce和arp_ignore作用。

猜你喜欢

转载自www.cnblogs.com/cqzhou/p/9476310.html