LVS三种模式的负载均衡(TUN、NAT、FullNat)

LVS三种模式

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第1张图片

TUN隧道模式

TUN 是IP Tunneling ,IP隧道的简称,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户。
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第2张图片

[root@server1 ~]# modprobe ipip   #添加tunl0隧道模式
[root@server1 ~]# ip addr add 172.25.68.100/24 dev tunl0 #添加VIP
[root@server1 ~]# ip link set up tunl0     #激活tunl0隧道

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第3张图片

设定ipvsadm策略

[root@server1 ~]# ipvsadm -C
[root@server1 ~]# ipvsadm -A -t 172.25.68.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.2:80  -i
[root@server1 ~]# ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.3:80 -i
[root@server1 ~]#  ipvsadm -l
[root@server1 ~]# route add -host 172.25.68.100 dev tunl0
#数据包原路返回

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第4张图片

server2主机(RS1)

[root@server2 ~]# /etc/init.d/httpd start
[root@server2 ~]# modprobe ipip
[root@server2 ~]# ip link set up tunl0
[root@server2 ~]# /etc/init.d/arptables_jf start
[root@server2 ~]# arptables -A IN -d 172.25.68.100 -j DROP
[root@server2 ~]# arptables -nL

Server3主机(RS2)
配置同server2主机一致

物理主机:

[root@foundation68 ~]# arp -an |grep 100  #查看mac地址是否与server1相同
[root@foundation68 ~]# arp -d 172.25.68.100   #删除mac地址
[root@foundation68 ~]# ping 172.25.68.100
[root@foundation68 ~]# curl 172.25.68.100

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第5张图片


NAT模式

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第6张图片
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
④.然后lvs将此报文的源地址修改为本机并发送给客户端。

注意:在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端
给server1加一个网卡:

[root@foundation68 ~]# virt-manager 

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第7张图片
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第8张图片
设定虚拟IP

[root@server1 ~]# ip addr add 172.25.0.112/24   dev eth2
[root@server1 ~]# ip link set up eth2
[root@server1 ~]# ip addr 

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第9张图片
设定ipvsadm策略

[root@server1 ~]# ipvsadm -C
[root@server1 ~]# ipvsadm -A -t 172.25.0.112:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.0.112:80 -r 172.25.68.3:80 -m
[root@server1 ~]# ipvsadm -a -t 172.25.0.112:80 -r 172.25.68.2:80 -m
[root@server1 ~]# ipvsadm -ln

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第10张图片

[root@server1 ~]# modprobe iptable_nat   #加载 nat 模块
[root@server1 ~]# vim /etc/sysctl.conf   #开启路由机制
[root@server1 ~]# sysctl -a | grep ip_forward

这里写图片描述
这里写图片描述
server2主机(RS1)

[root@server2 ~]# /etc/init.d/httpd start   #要打开httpd服务
[root@server2 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@server2 ~]# /etc/init.d/network restart
[root@server2 ~]#  route -v

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第11张图片
这里写图片描述
Server3主机(RS2)
配置同server2主机一致

测试:
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第12张图片


FullNat模式

无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关。

这引发的两个问题是:

1、同一个 VLAN 的限制导致运维不方便,跨 VLAN 的 RS 无法接入。

2、LVS 的水平扩展受到制约。当 RS 水平扩容时,总有一天其上的单点 LVS 会成为瓶颈。

Full-NAT 由此而生,解决的是 LVS 和 RS 跨 VLAN 的问题,而跨 VLAN 问题解决后,LVS 和 RS 不再存在 VLAN 上的从属关系,可以做到多个 LVS 对应多个 RS,解决水平扩容的问题。

Full-NAT 相比 NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另一种转换,转换过程如下:
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第13张图片
在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。

内网 IP 之间可以通过多个交换机跨 VLAN 通信。

当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。

LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。

Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。

内核编译:

物理主机:

[root@foundation68 ~]# systemctl start httpd
[root@foundation68 ~]# scp /home/kiosk/Desktop/kernel-2.6.32-220.23.1.el6.src.rpm  [email protected]:/root
[root@foundation68 ~]# scp /home/kiosk/Desktop/Lvs-fullnat-synproxy.tar.gz  [email protected]:/root
[root@foundation68 ~]# scp /home/kiosk/Desktop/newt-devel-0.52.11-3.el6.x86_64.rpm  [email protected]:/root
[root@foundation68 ~]# scp /home/kiosk/Desktop/asciidoc-8.4.5-4.1.el6.noarch.rpm  [email protected]:/root
[root@foundation68 ~]# scp /home/kiosk/Desktop/slang-devel-2.2.1-1.el6.x86_64.rpm  [email protected]:/root

更改server1主机内存:
将server1 Force off
这里写图片描述
更改内存为2048
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第14张图片

[root@server1 ~]# yum install -y rpm-build
[root@server1 ~]# rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm 
[root@server1 ~]# cd rpmbuild/
[root@server1 rpmbuild]# ls
SOURCES  SPECS
[root@server1 rpmbuild]# cd SPECS/
[root@server1 SPECS]# ls
kernel.spec
[root@server1 SPECS]# rpmbuild -bp kernel.spec   欲编译环境

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第15张图片

[root@server1 SPECS]# yum install -y redhat-rpm-config xmlto asciidoc elfutils-libelf-devel binutils-devel newt-devel python-devel hmaccalc perl-ExtUtils-Embed
[root@server1 SPECS]# cd
[root@server1 ~]# yum install -y asciidoc-8.4.5-4.1.el6.noarch.rpm newt-devel-0.52.11-3.el6.x86_64.rpm slang-devel-2.2.1-1.el6.x86_64.rpm 
[root@server1 ~]# cd rpmbuild/
[root@server1 rpmbuild]# ls
[root@server1 rpmbuild]# cd SPECS/
[root@server1 SPECS]# ls
[root@server1 SPECS]# rpmbuild -bp kernel.spec
[root@server1 SPECS]# yum install -y patchutils

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第16张图片

[root@server1 SPECS]# rpmbuild -bp kernel.spec  编译后会卡住

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第17张图片
再开一个server窗口可快速结束安装:

[root@server1 ~]# yum provides */rngd
[root@server1 ~]# yum install -y rng-tools-2-13.el6_2.x86_64
[root@server1 ~]# rngd -r /dev/urandom    #可以让欲编译环境快速安装

欲环境编译完成:
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第18张图片

[root@server1 ~]# tar zxf Lvs-fullnat-synproxy.tar.gz
[root@server1 ~]# cd rpmbuild/
[root@server1 rpmbuild]# ls
[root@server1 rpmbuild]# cd BUILD
[root@server1 BUILD]# ls
[root@server1 BUILD]# cd kernel-2.6.32-220.23.1.el6/
[root@server1 kernel-2.6.32-220.23.1.el6]# ls
[root@server1 kernel-2.6.32-220.23.1.el6]# cd linux-2.6.32-220.23.1.el6.x86_64/
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# vim Makefile   #给内核版本命名

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第19张图片
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第20张图片

[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# uname -r
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# cp /root/lvs-fullnat-synproxy/lvs-2.6.32-220.23.1.el6.patch .
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# patch -p1 < lvs-2.6.32-220.23.1.el6.patch 

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第21张图片

[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# make  #开始编译
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# make modules_install
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# make install
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# cd /boot/
[root@server1 boot]# ls
[root@server1 boot]# cd grub/
[root@server1 grub]# ls
[root@server1 grub]# vim grub.conf 
#修改default的值为0 表示先启动 
[root@server1 grub]# reboot   #重启(查看是否编译成功)

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第22张图片
这里写图片描述

[kiosk@foundation40 ~]$ ssh root@172.25.40.1
[root@server1 ~]# uname -r
[root@server1 ~]# cd lvs-fullnat-synproxy/
[root@server1 lvs-fullnat-synproxy]#  tar zxf lvs-tools.tar.gz
[root@server1 lvs-fullnat-synproxy]# ls
[root@server1 lvs-fullnat-synproxy]#  cd tools/
[root@server1 tools]#  cd keepalived/
[root@server1 keepalived]# yum install -y popt-devel  #解决依赖性
[root@server1 keepalived]#  ./configure --with-kernel-dir="/lib/modules/`uname -r`/build"  #编译第一步

这里写图片描述
编译第一步后的结果:
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第23张图片
检测、安装

[root@server1 keepalived]# make 
[root@server1 keepalived]# make install
[root@server1 keepalived]# cd /usr/local/
[root@server1 local]# cd sbin/
[root@server1 sbin]# ls
[root@server1 sbin]# cd
[root@server1 ~]# cd lvs-fullnat-synproxy/
[root@server1 lvs-fullnat-synproxy]# ls
[root@server1 lvs-fullnat-synproxy]# cd tools/
[root@server1 tools]# cd ipvsadm/
[root@server1 ipvsadm]# ls
[root@server1 ipvsadm]# make
[root@server1 ipvsadm]# make install
[root@server1 ipvsadm]# cd 
[root@server1 ~]# ipvsadm -l

这里写图片描述

添加策略:
和NAT模式一样需要添加一个网卡,设定虚拟IP要和真机在同一个网段上

[root@server1 ipvsadm]#  ipvsadm -C
[root@server1 ipvsadm]# ipvsadm -A -t 172.25.0.112:80 -s rr
[root@server1 ipvsadm]# ipvsadm -a -t 172.25.0.112:80 -r 172.25.68.2:80 -b
[root@server1 ipvsadm]# ipvsadm -a -t 172.25.0.112:80 -r 172.25.68.3:80 -b
[root@server1 ipvsadm]# ipvsadm -P -t 172.25.0.112:80 -z 127.0.0.1:80
[root@server1 ipvsadm]# ipvsadm -G -t 172.25.0.112:80
[root@server1 ipvsadm]# ipvsadm -ln

LVS三种模式的负载均衡(TUN、NAT、FullNat)_第24张图片

在server2和server3主机上将网关指向server1的IP
这里写图片描述

测试:
LVS三种模式的负载均衡(TUN、NAT、FullNat)_第25张图片

你可能感兴趣的:(LVS三种模式的负载均衡(TUN、NAT、FullNat))