当前位置:   article > 正文

LVS负载均衡DR模式、NAT模式、TUN模式的比较_tunl

tunl

LVS四种模式的比较

  • LVS的简单介绍
  • LVS的特点
  • LVS三种模式
  • LVS三种模式的部署

 

一.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的主要特点有:

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

 

 缺点:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

 

 

三.LVS三种模式

  • DR模式
  • NAT模式
  • TUN模式

LVS可以支持如下三种模式:

  • Virtual Server via Network Address Translation(VS/NAT)
    通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

  • Virtual Server via IP Tunneling(VS/TUN)
    采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

  • Virtual Server via Direct Routing(VS/DR)
    VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

鉴于ip安全的需求,这里我们需要分割LVS服务器与后端负载集群的ip地址,并且对于负载均衡集群的数目没有太大的需求,所以笔者选用了Virtual Server via Network Address Translation(VS/NAT) 模式。

 

 

四.LVS三种模式的部署

系统环境:RedHat6.5系统

实验环境:

  • 在调度器server1上重新配置yum源,添加LoadBalancer模块;安装ipvsadm

yum install ipvsadm -y
  • 在server2和server3上开启apache服务

  • 配置真实主机server2和server3上的apache服务的默认发布页面

server2:

编辑/var/www/html/index.html文件

访问页面如下

server3:

编辑/var/www/html/index.html文件

访问页面如下:

 

实验主机: 172.25.60.1   Director调度器
                   172.25.60.2  

                   172.25.60.3 
 

1.DR模式

                                           RS1

 Client -----> Director ------>          ------> Client

                                           RS2

 

部署过程如下:

第一步:配置三台主机的虚拟网络

server1:

server2:

server3:

 

第二步:在调度器server1上配置ipvsadm策略

[root@server1 ~]# ipvsadm -A -t 172.25.60.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.2:80 -g
[root@server1 ~]# ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.3:80 -g

-A :添加服务
-t :tcp服务地址
-a :添加真实服务器的操作
-s :调度算法(10中调度算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-g :rh(路由)
-r :对应的真实ip

/etc/init.d/ipvsadm  save
/etc/init.d/ipvsadm  restart

测试:在server1,server2,server3三台主机中随机选择

清除缓存,再次测试,得到不同的结果

 

随机连接三台主机,有违我们的初衷,我们想要的是采用虚拟网络,连接我们的调度节点,按照一定的调度算法,达到负载均衡。

想要实现如上想法,我们要怎么做呢???

我们要配置server2和server3的arp路由策略!!!

配置步骤如下:

  • 安装arp

yum install arptables_jf -y

  • 配置arp路由策略

arptables -A IN -d 172.25.27.100 -j DROP
arptables -A OUT -s 172.25.27.100 -j mangle --mangle-ip-s 172.25.27.2
arptables -L
/etc/init.d/arptables_jf save(将策略保存在/etc/sysconfig/) 


 

 

测试:测试虚拟网络时,屏蔽掉server2和server3 ,通过访问调度器server1轮询访问真实服务器

 

 

2.NAT模式

client ---> Diirectory(转换IP) ---> RS ----> Director(转换IP) ---->client

 

部署过程如下:

  • 部署调度器server1:

第一步:清空调度主机server1的策略缓存

ipvsadm -C
ipvsadm -ln

 

第二步:在调度器server1上添加一块新的网卡eth2,配置调度器sever1和真实主机server2、server3的IP

server1:172.25.60.1(eth2:172.25.254.100)

server2和server3不需要配置虚拟网络

server1:

server2:

server3:

 

第三步:编辑/etc/sysctl.conf文件,加载调度器server1的内核路由功能

第四步:加载iptable_nat模块,配置ipvsadm策略

 

  • 部署真实主机server2:

添加默认网关

 

  • 部署真实主机server3:

添加默认网关

 

测试:调度器server1以轮询方式访问真实主机server2和server3

 

 

 

3.TUN模式

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

 

部署过程如下:

  • 部署调度器server1:

第一步:清空调度主机server1的策略缓存

ipvsadm -C
ipvsadm -ln


第二步:配置虚拟IP在tunl0上

安装tunl:
modprobe ipip


第三步:配置新的策略

 

  • 部署真实服务器server2:

第一步:安装tunl

modprobe ipip

第二步:更改网络

ip addr del  172.25.27.100/32 dev eth1
ip addr add  172.25.27.100/32 dev tunl0

ip link set up tunl0   开启tunl0


 

第三步:设置内核

sysctl -a |grep rp_filter
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth1.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0

 

rp_filter参数用于控制系统是否开启对数据包源地址的校验

由三个值 0 1 2
0:不开启源地址校验
1:开启严格的反向路径校验,对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据
2:开启松散的反向路径校验,对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过人以网口),如果反向路径不同,则直接丢弃该数据包。

 

  • 部署真实服务器server3:

第一步:安装tunl

modprobe ipip

第二步:更改网络

ip addr del  172.25.27.100/32 dev eth1
ip addr add  172.25.27.100/32 dev tunl0

ip link set up tunl0   开启tunl0


 

第三步:设置内核

sysctl -a |grep rp_filter
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth1.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0

 


测试:客户端通过调度器对真实主机进行轮询访问

 

 

 

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/986793
推荐阅读
相关标签
  

闽ICP备14008679号