LVS的DR模式 、TUN模式、NAT模式和FULLNAT模式

标签: lvs  TUN  DR  FULLNAt  NAT

一.LVS介绍

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的。有许多比较著名网站和组织都在使用LVS架设的集群系统,所以学好LVS很重要。

二.LVS的特点

通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS的主要特点有:

  1. 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。
  2. 稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
  3. 成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
  4. 配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
  5. 支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
  6. 支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
  7. 应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等。
  8. 缺点:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

三.LVS模式介绍

LVS有四种模式,根据LVS的高效可分为DR模式、TUN模式、NAT模式和FULLNAT模式。前三种没有坑攻击能力,FULLNAT有抗攻击能力。生产中一般使用的都是NAT模式和DR模式,当然,也并不是说其他模式并不会使用,还是要根据实际的生产场景来决定选择什么样的方案。

四.弄明白大体原理和工作流程

个人体会:先别急着动手做四种模式的实验,先把大体原理和它们工作的流程搞清楚,这样做起实验来才知道敲的命令是干什么的,千万不要糊里糊涂的干,这样纯粹是浪费时间。

五.TCP/IP四层模型和OSI七层模型

TCP/IP四层模型和OSI七层模型
这里写图片描述
TCP/IP模型各个层次的功能和协议
这里写图片描述
TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。

六.DR模式–直接路由

                                        RS1   
       Client   -----> Director ------>      ------>  Client
                                        RS2

总的来说:IP地址没变 MAC地址改变

过程:

  • client以cip去访问vip,整个集群上的服务器都有vip,但client只能访问Director上的vip,通过Director调度机上的ipvsadm策略将client发来的数据包的目标mac地址一改(由调度器改为RS),扔给后台的RS,RS处理完数据后,再将数据包发送给client(ip是vip,mac是自己的mac)
  • 调度机上的ipvsadm策略是osi模型第二层数据链路层的策略,更改了mac地址,不会对第三层网络层的ip做更改,当数据包被扔给RS之后,在OSI模型从下往上解包,到第三层ip层时,发现目地ip是vip,如果RS上不添加VIP的话,RS就会将这个包扔掉,因为与自己的ip不匹配。
  • RS上做的arptables策略是为了实现 none VIP , 其实并不冲突,这都是在第二层与第三层之间的策略,RS上做两条策略:
    第一条:当网络里有人发送arp请求询问VIP对应的mac地址时,RS不予回应
    第二条:从本机上出去的所有arp回应,或者是arp包,注意,只是arp包,因为是arptables策略,如果是VIP发出的(RS上两个ip,一个VIP,一个RIP),都将它转换为RIP

这块要注意的是在网络里,数据包都是先以mac地址(第二层)为目标进行传输的,到达目的地后,一层一层往上解包,进行匹配,第三层匹配ip,第四层匹配端口,等等….只要有一层不匹配,这个包都会被扔掉,或者拒绝

接下来配置:
Director:先修改yum源,baseurl要改镜像挂载点,这都是镜像里的文件,默认不读,要主动写进去
这里写图片描述
这里写图片描述
配置VIP

ip addr add 172.25.55.100/24 dev eth1
ip addr   #查看是否添加

这里写图片描述

 yum install ipvsadm -y
 ipvsadm -ln  ##列出ipvsadm策略
 ipvsadm -A -t 172.25.55.100:80 -s rr  ##添加策略 指定vip 172.25.55.100:80,-t指tcp,-s rr 指定轮询
 ipvsadm -a -t 172.25.55.100:80 -r 172.25.55.2:80 -g
 ##将虚拟ip映射到真实的ip,-r指定realserver -t指定tcp协议 -g指dr模式
ipvsadm -a -t 172.25.55.100:80 -r 172.25.55.3:80 -g
ipvsadm -ln
/etc/init.d/ipvsadm save  ##保存,关机再开机后还存在

这里写图片描述
server2

ip addr add 172.25.55.100/24 dev eth1
ip addr

这里写图片描述

为防止客户端在访问vip时直接访问到realserver,在realserver设置一定的策略
yum install arptables_jf -y
/etc/init.d/httpd start
arptables -nL
 arptables -A IN -d 172.25.55.100 -j DROP  ##访问realserver的100ip时的请求直接丢弃
 arptables -A OUT -s 172.25.55.100 -j mangle --mangle-ip-s 172.25.55.2  #realserver发出的信息全部转为他的真实ip
arptables -nL
/etc/init.d/arptables_jf  save

这里写图片描述
在server3中也一样

ip addr add 172.25.70.100/24 dev eth1
ip addr 

这里写图片描述

yum install arptables_jf -y
arptables -nL
arptables -A IN -d 172.25.55.100 -j DROP
arptables -A OUT -s 172.25.55.100 -j mangle --mangle-ip-s 172.25.55.3
arptables -nL
/etc/init.d/arptables_jf save

这里写图片描述
这里写图片描述
在server1中:

yum install ldirectord-3.9.5-3.1.x86_64.rpm 
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
vim ldirectord.cf

这里写图片描述
这里写图片描述

/etc/init.d/ipvsadm stop
/etc/init.d/ldirectord start
ipvsadm -ln
vim /etc/httpd/conf/httpd.conf   #将httpd端口改为80
/etc/init.d/httpd restart
ipvsadm -ln
cd /var/www/html/
vim index.html
写入:server1--正在维护中

当server2和server3都关闭时 就完蛋了 就维护。。。
这里写图片描述
这里写图片描述
这里写图片描述

七.TUN模式–隧道

    client ------> Director ----->封装一层外包----->client

这里写图片描述

总的来说:调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户。
TUN模式特点:

RIP、VIP、DIP全是公网地址
RS的网关不会也不可能指向DIP
所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
不支持端口映射
RS的系统必须支持隧道

配置:
添加VIP

ip addr add 172.25.20.100/24 dev eth0
ip addr

这里写图片描述
配置好yum源 下载ipvsadm
这里写图片描述
添加ipvsadm策略

 ipvsadm -C
 ipvsadm -A -t 172.25.20.100:80 -s rr
 #-A:增加 ipvsadm 在内核列表中增加一个新的调度服务,也可以理解为添加一主机
 #-t|-u指定IP地址和端口,t表示TCP协议,u表示UDP协议。
 ipvsadm -a -t 172.25.20.100:80 -r 172.25.20.2 -i
 ipvsadm -a -t 172.25.20.100:80 -r 172.25.20.4 -i
# -a   增加一个IP地址来参与响应请求服务。
#-r   指定参与响应请求的IP地址和端口。
#-g   表示DR模式
#-i   表示TUN模式
#-m   表示NAT模式
#-w   指定权重,供那些加权算法参考,如1、2、3。
#-e   编辑指定的真实服务器。
#-d   删除指定的真实服务器。

这里写图片描述

ipvsadm -ln 查看

这里写图片描述

对后端服务器server2进行操作

vim /etc/sysconfig/network-scripts/ifcfg-tunl
modprobe ipip     在加载好ipip模块后就会有默认的tunl0隧道。
DEVICE=tunl0
 IPADDR=172.25.20.100
 NETMASK=255.255.55.0
 ONBOOT=yes
 NAME=tunl0

这里写图片描述
这里写图片描述
启动httpd 编辑好默认发布目录

这里写图片描述
后端服务器server4也同样配置
这里写图片描述
测试

访问的MAC地址是调度器的地址

这里写图片描述
这里写图片描述

注意的是:
在client端访问的时候只能访问server2 然后就连接不了
因为没有把net.ipv4.conf.tunl0.rp_filter = 1 改为0
开启了rp_filter参数,并配置为1,则系统会严格校验数据包的反向路径
请求数据包进的网卡和响应数据包出的网卡不是同一个网卡,这时候系统会判断该反向路径不是最佳路径,而直接丢弃该请求数据包
这里写图片描述

八.NAT模式–地址转换

   client--->Dirctor(转换IP)--->RS--->Dirctor(转换IP)--->client

总的来说:通过转换ip连接客户端和服务端

这里写图片描述

首先client 发送请求[package] 给VIP, VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package的DSTIP修realserver的IPrealserver 收到这个package后判断dst IP 是自己,就处理这个package ,处理完后把这个包发送给LVS ,VIPLVS 收到这个package 后把sorce IP改成VIP的IP,dst IP改成 client IP然后发送给client
配置:
实验环境:
lvs调度器:
server1:172.25.20.1 VIP:172.25.254.111
realserver:
server2:172.25.20.2 开启apache服务
server4:172.25.20.4 开启apache服务
在server1中

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

这里写图片描述

sysctl -p

这里写图片描述

modprobe iptable_nat #加载模块

ipvsadm -A -t 172.25.254.111:80 -s rr
ipvsadm -a -t 172.25.254.111:80 -r 172.25.20.2:80 -m
ipvsadm -a -t 172.25.254.111:80 -r 172.25.20.4:80 -m 

这里写图片描述

在server2中

vim /etc/sysconfig/network
GATEWAY=172.25.20.1

这里写图片描述
在server4中和server2中配置一样
这里写图片描述

测试
这里写图片描述
这里写图片描述

九.FULLNAT模式

FullNAT: 除了DR/NAT/TUNNEL之外IPVS下的新的包转发模式,解决了DR/NAT/TUNNEL中的一些缺点(如不能跨vlan或者跨vlan成本太高,服务搭建较复杂,不易运维等)
原理:
1 client主机(cip)将请求发往前端的负载均衡器(vip),请求报文源地址是CIP,目标地址为VIP。负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

2 RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给client主机(cip)。

版权声明:本文为hello_xiaozhuang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hello_xiaozhuang/article/details/81322658