lvs快速入手

搭建LVS的原因

1)日1000-2000W PV或并发请求1万以下都可考虑nginx

2)大型门户网站、电商网站需要用到LVS。

LVS为(4层)或者Nginx为(7层 )

NAT/TUN/DR/FULL_NAT_

  • NAT网络地址转换,分为两种nat和fullnat 。两者的区别具体可以看 lvs的nat和fullnat2种模式的区别
  • DR直接路由,修改MAC,源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
  • TUN隧道,在报文上再加一层IP,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)。
  • DIP修改为RIP,反向代理,请求响应均通过DS

https://wd-jishu.oss-cn-hangzhou.aliyuncs.com/wd/2019/11/image-24.png@!full

https://wd-jishu.oss-cn-hangzhou.aliyuncs.com/wd/2019/11/image-25.png@!full

https://wd-jishu.oss-cn-hangzhou.aliyuncs.com/wd/2019/11/image-35.png@!large

为了直观的看数据的流动和理解三种模式可以看这篇文章 lvs的三种模式NAT DR TRN快速理解

  • 轮叫调度 rr
  • 加权轮叫 wrr
  • 最少链接 lc
  • 加权最少链接 wlc
  • 基于局部性的最少连接调度算法 lblc
  • 复杂的基于局部性最少的连接算法 lblcr
  • 目标地址哈希 dh
  • 源地址哈希 sh
  • 最短预期延迟 sed
  • 忙时不要排队 nq

安装:

https://wd-jishu.oss-cn-hangzhou.aliyuncs.com/wd/2019/11/image-27.png@!full

目前的发行版,内核默认会集成LVS module

配置:

采用DR模式 ,rr调度模式 这种方案比较常用

https://wd-jishu.oss-cn-hangzhou.aliyuncs.com/wd/2019/11/image-28.png@!full

DR模式 :客户端发送请求到复杂均衡器,源mac为客户端IP,目标mac为负载均衡器地址

负载均衡器接受请求后,将目标mac更改为后端服务器mac,并进行广播,即负载均衡器和后端服务器,目标IP没有改,所以会通过后端服务器直接发送给客户端
必须在同一物理网络内,因为要对后端服务器进行ARP广播

后端服务器依据mac接受数据包后,将相应报文直接返回给客户端,所以要求后端服务器上面必须要要有虚拟IP地址,

后端服务器做arp限制,只响应负载均衡器的请求,后端服务器可以为windows

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
配置
负载均衡器

#负载均衡器上配置虚拟IP172.16.206.110
#掩码为255.255.255.255每个IP就是一个网段,这样以来在后端服务器器上添加同一个IP地址就不会警告IP冲突。广播地址也是自己
ifconfig eth0:0 172.16.206.110 netmask 255.255.255.255 broadcast 172.16.206.110

#负载均衡器上关闭防火墙
service iptables stop

#创建负载均衡集群,轮询调度
ipvsadm -A -t 172.16.206.110:80 -s rr

#添加后端服务器
ipvsadm -a -t 172.16.206.110:80 -r 172.16.206.128 -g
ipvsadm -a -t 172.16.206.110:80 -r 172.16.206.130 -g
后端服务器配置

#配置虚拟IP
#负载均衡器只是改了目标mac,并没有改动目标IP,后端服务器上配置IP是为了接受负载均衡器的数据包而不是因为自己主机上没有这个IP而去丢弃数据包
ifconfig lo:0 172.16.206.110 netmask 255.255.255.255 broadcast 172.16.206.110

#添加路由规则(非必需)
route add -host 172.16.206.110 dev lo:0

#抑制ARP

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

为什么要抑制arp 请看这篇文章: 什么是arp_ignore arp_announce

当然另外一种方案也比较常见,可以看这篇文章:Lvs的Fullnat+keepalive安装部署

随机文章