3.LVS工作模式和相关命令
3.1 LVS集群的工作模式-重点
lvs的工作模型决定了用户发请求到lvs服务器,lvs到底如何来接收报文和响应请求报文
lvs-nat:修改请求报文的目标IP,多目标表IP的DNAT
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP
3.1.1 LVS的NAT模式

lvs-nat:本质是多目标ip的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和Port实现转发
1.RIP和DIP应该在一个网络,且应使用私网地址;RS的网关要指向DIP
2.请求报文和响应报文都必须经过Director转发,Director易于成为网络瓶颈
请求响应都走lvs,这种架构可以通过请求和响应分离优化
缺点:存在可用性和性能的单点
所以这种模式在生产中用在后端服务器不是特别多的情况下
3.支持端口映射,可修改请求报文的目标PORT
nat模型修改的是网络层和传输层
4.VS必须是linux系统,RS可以是任意OS系统
lvs属于内核的功能,windows没有这个功能
windows里有个web服务器IIS,只是服务器市场用的不太高,技术实例比较差的地方
用的就是这个IIS,比如中学等

通讯过程:
用户请求,到lvs服务器,lvs调度到后端多个服务器上
请求:
CIP访问VIP:80,LVS预先制定调度策略,按照一定调度算法,(算出来的)调度到后
端A服务器上
lvs将请求的目标地址变成a的IP
响应:
RS回应的时候,目标地址变成CIP,原地址变成a的IP,请求到达lvs后,lvs一看他又
回来了
lvs将a的IP替换成vip,再返回到目标
只是lvs支持多目标ip的DNAT

先路由表检查,之后经过input检查,lvs工作在input之前,因为经过input检查后,没有发现http服务,就要进入进程,但是lvs需要他转发,所以,要在input链之前处 理,相当于lvs潜伏在prerouting和input之间,访问我本地进程的80,但是本地80上 做了lvs的调度策略,本地没有http的服务,所以收到80请求应该往里面的服务器调度,所以lvs在preroutiing后截住了流量,不让进入input里,所以lvs截获了数据报文,修改了报文的目标地址,之后发出去,而早期的iptales是经过5个链,但是lvs相当于将流量截住了,所以lvs就是再input前将流量掰弯了,并且发了出去
因为LVS是工作再prerouting后的,所以不要在prerouting上做策略,避免干扰,因为还没到lvs处理链时,就在prerouting那被截住了
所以在定义LVS的服务器的时候,就不要启用netfileter的防火墙功能,会干扰调度功能,所以,lvs上的防火墙功能全部干掉
表:路由表
iptables有5个链,但是和lvs的5个链没关系
衍生:将交换机换成路由器是可以的,但是一般不加,中间网络就会更繁忙,路由器的性能不如交换机,如果用路由器,中间还需要路由交换,速度会降低,如果中间是路由器,网关指向路由器,如果是交换机,指向DIP
3.1.2 LVS的DR模式-重点也是默认的工作模式

LVS-DR:Direct Routing ,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出RS的RIP所在的接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不不变
DR模式特点:
1.Director和各RS都配置有VIP
2.确保前端路由器将目标IP为VIP的请求报文发往Director
-
在前端网关做静态绑定VIP和Director
-
在RS上实用iptable工具
arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP -
在RS上修改内核参数以限制arp通告和应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce
3.RS的RIP可以实用私网地址,也可以是公网地址;RIP和DIP在同一IP网络;RIP的网关不能指向DIP,指向路由器,以确保响应报文不会经由Director;VIP可以是和RIP不同
4.RS和Director要在同一物理网络
5.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
6.不支持端口映射(端口不能修改)
DR模型修改数据链路层,网络层及以上不变
7.RS可使用绝大多数OS系统

底层逻辑:
如果用上面的架构,客户端请求,发到VIP,但是VIP都有,为什么要发给LVS呢
请求报文必须要先给LVS,所以路由器收到请求后,第一步就要给LVS
方法1.在路由器上绑定mac的静态地址绑定,他的优先级最高
缺点:VIP和MAC地址绑死了,万一LVS挂了,新的就上不去,没办法实现容错
要静态绑定mac和IP,但是网络设备不归运维管,或者用的是第三方的机房
,让人家改防火墙的路由器谁改,不实用
方法2.arptables事先arp解析,只要是访问VIP就往LVS调度
不常用
方法3.虽然四个机器都有VIP,但是宣称的只有LVS的VIP,希望三个后台服务器配上
了VIP,但是不要对外说,那么路由器上就不知道你有VIP,那就把免费arp关掉即可
,虽然这样不主动说,但是如果路由器问谁有VIP,后台服务器应答了,也不行,所
以要把arp的应答也关闭,要配置ignore
这是两个内核参数,alone和ignore,既不主动说,也不回答,就默默拥有地址,但
是关的时候不是全关,因为LVS要调度的时候,也要问RIP1对应的mac是谁啊,如果把
应答全关了,LVS问的时候也不回答自己的mac了
两个参数是有网卡区分的,只是关闭宣称和应答的VIP,RIP不关比,因为要响应请求
# 免费vip:网卡启动的时候,会广播一下自己有的IP和mac
解决了nat模式的瓶颈问题了
衍生问题:不用交换机用路由器可不可以
不可以,因为LVS要调度的时候,需要找到RS1-3的IP,如果用路由器,arp广播发不
出去,是得不到mac地址的,中间一定不能是路由器,只能是交换机

通讯过程-这个一定要看
CIP请求到www.xx.com,DNS出VIP,CIP请求到路由
CIP/MACc:xx|VIP/MAC1:80 # 这里的MAC1是下一个路由器的网卡的MAC
路由CIP/MAC2:xx|VIP/MACv:80
## 路由过程种IP地址不变,mac地址是不断变化的,目标mac是下一个网卡/节点的mac,直到找到目标
## 发送mac地址是发送网卡的mac地址
将后台服务器的关于arp的ignore和alonce关掉,不声明不响应自己有VIP
LVS通过十二种算法其中一种调度到后台服务器
CIP/MACd:xx|RIP1/MACr1:80
## 得到RS1的macr1,是LVS通过arp广播得到的,LVS和后端的服务器在同一网段
RS收到了VIP请求,我发现自己也有,说明自己有
之后RS响应
VIP/MACr1:80|CIP/MAC2:xx
## CIP收到请求只会识别是不是对应ip发的,不会识别mac
客户端所收到报文
VIP/MAC1:80|CIP/MACc:xx
问题:IP怎么配
如果后端服务器的两个IP,VIP和RIP都配置在一块物理网卡上,调节内核arp参数的
时候,是针对接口的,打开ignore和annonce的话,会导致RIP也取消了网卡的发布功能
VIP配在回环网卡(虚拟网卡)上,IP地址是内核级的,虽然配置在回环网卡上的,
但是不代表没有网络功能,只要路由配好了,一样可以通讯的,绑在哪个网卡并不是
最核心的,回环网卡是系统中虚拟网卡不会随着网络的状态发生变化,网线断了,网
口松了,地址就会丢失,配在回环网卡上,只要主机不宕机,就不会出问题的