代理功能,网站服务器的入口
实现流量控制
控制访问流向
1、LVS集群的工作模式
- lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr:操纵封装新的MAC地址
- lvs-tun:在原请求IP报文之外新加一个IP首部
- lvs-fullnat:修改请求报文的源和目标IP,默认内核不支持
http://www.linuxvirtualserver.org/Documents.html
1.1、LVS的NAT模式
lvs-nat:本质是多目标IP的DNAT地址转换,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
区别在于支持多目标转发,不是固定目标
访问负载压力大,决定着集群内性能瓶颈
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由LVS转发,LVS容易成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
LVS是作用在INPUT表之前,将访问请求重新指向,直接通过POSTROUTING表到达内部服务器,报文回来的时候正常走向
1.2、LVS的DR模式
LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是其挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
报文通过LVS到达内部服务器后不再原路返回,而是直接返回客户端,在内部服务器后面也配置虚拟IP
DR模式的特点:
-
LVS和各RS都配置有VIP且配置对外不可见
-
确保前端路由器将目标IP为VIP的请求报文发往Director
-
在前端网关做静态绑定VIP和Director的MAC地址
-
在RS上使用arptables工具
-
在RS上修改内核参数以限制arp通告及应答级别:不回应广播询问vip的MAC地址,arp不广播通告RS拥有vip地址
-
-
RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由LVS
-
RS和LVS要在同一个物理网络,中间可以放交换机而不能放路由
-
请求报文要经由LVS,但响应报文不经由LVS,而由RS直接发往Client
-
不支持端口映射(端口不能修改)
-
无需开启ip_forward功能
-
RS可使用大多数OS系统
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
2、DR模式搭建
不支持端口映射
ip报文头不动,更改MAC地址
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应,都响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应,仅在特定接口收到特定请求才响应,可理解为都不响应
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
校验数据包地址:rp_filter
说明:参数rp_filter用来控制系统是否开启对数据包源地址的校验。
0:表示不开启地址校验
1:表示开启严格的反向路径校验。对每一个收到的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包
2:表示开启松散的反向路径校验,对每个收到的数据包,校验其源地址是否可以到达,即反向路径是否可以ping通,如反向路径不通,则直接丢弃该数据包。
2.1、环境
五台主机
一台:客户端 eth0:仅主机 192.168.0.6/24 GW:192.168.0.200
一台:ROUTER
eth0 :NAT 10.0.0.200/24
eth1: 仅主机 192.168.0.200/24
启用 IP_FORWARD
一台:LVS
eth0:NAT:DIP:10.0.0.8/24 GW:10.0.0.200 #配置网关用于反向检查,判断是否可用通讯,有配置网关即可,具体指向仅要求在网段内
#也可不配置网关,但需更改内核参数为0,/proc/sys/net/ipv4/conf/all/rp_filter
两台RS:
RS1:eth0:NAT:10.0.0.7/24 GW:10.0.0.200
RS2:eth0:NAT:10.0.0.17/24 GW:10.0.0.200
2.2、配置VIP
#RS1的IPVS配置,在RS2上也同样执行,注意先改内核参数再添加vip
[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#永久保存可在/etc/sysctl.conf中
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1 ......
sysctl -p
[root@rs1 ~]#ip a a 10.0.0.100/32 dev lo label lo:1 #注意是添加在回环网卡lo上,子网是32
#在LVS上配置VIP
ip a a 10.0.0.100/32 dev lo:1 #在LVS上不用改内核参数,注意要是VIP配置在lo上子网必须为32,在eth0上则24和32均可
2.3、添加规则
[root@10.0.0.8 ~]#ipvsadm -A -t 10.0.0.100:80 -s rr
[root@10.0.0.8 ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7:80 -g
[root@10.0.0.8 ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17:80 -g
[root@10.0.0.8 ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.100:80 rr
-> 10.0.0.7:80 Route 1 0 0
-> 10.0.0.17:80 Route 1 0 0
验证
curl 10.0.0.100
3、多网段DR模式
VIP的地址和RS的地址不在同一网段
具体实现
#在路由器上
ip a a 172.16.0.200/24 dev eth0 label eth0:1
#LVS,RS均需修改内核参数
#其余步骤差不多
验证
curl 172.16.0.100