LVS的NAT、TUNNEL、Full-NAT模式

LVS-NAT模式

这里写图片描述

LVS-NAT模型的特性:

  • RS应该使用私有地址,RS的网关必须指向DIP
  • DIP和RIP必须在同一个网段内
  • 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈
  • 支持端口映射
  • RS可以使用任意操作系统
  • 缺陷:对Director Server压力会比较大,请求和响应都需经过director server

lvs-net模式流程:

NAT模型:地址转换类型,主要是做地址转换,类似于iptables的DNAT类型,它通过多目标地址转换,来实现负载均衡,
一个Director最多负载提供10个Real Server主机

  1. client发送request到LVS的VIP上,VIP选择一个Real-server,并记录连接信息到hash表中,然后修改client的request的目的IP地址为Real-server的地址,将请求发给Real-server;
  2. Real-server收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LVS;
  3. LVS收到reply包后,修改reply包的的源地址为VIP,发送给client;
  4. 从client来的属于本次连接的包,查hash表,然后发给对应的Real-server。
  5. 当client发送完毕,此次连接结束或者连接超时,那么LVS自动从hash表中删除此条记录。

路由重定向的前提:

  • 数据包的入接口和路由后的指定的出接口是同一个接口。(vip)
  • 数据包的源IP地址和该包应走的下一跳IP地址属于同一个网段。
  • 数据报非源路由的(这种情况应该比较少见了,源路由多见于Token Ring)。
  • 系统开启重定向功能。

lvs-nat 模式配置:

实验环境:
lvs调度器:
server1:内网ip:172.25.31.1 VIP、外网ip:172.25.254.107
realserver:
server2:172.25.31.2 开启阿帕奇服务 在/var/www/html/index.html 中写入 server2
server3:172.25.31.3 开启阿帕奇服务 在/var/www/html/index.html 中写入 server3

在server1中:

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

开启路由功能
sysctl -p
刷新

modprobe iptable_nat #加载模块
添加ipvsadm规则

ipvsadm -A -t 172.25.254.107:80 -s rr
ipvsadm -a -t 172.25.254.107:80 -r 172.25.31.2:80 -m
ipvsadm -a -t 172.25.254.107:80 -r 172.25.31.3:80 -m    #-m表示nat模式

添加ipvsadm规则

在server2中
添加网关,指向调度器的内网ip

vim /etc/sysconfig/network
GATEWAY=172.25.31.1

这里写图片描述

route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.25.31.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         172.25.31.1     0.0.0.0         UG    0      0        0 eth0

添加网关

在servre3中
添加网关,指向调度器的内网ip

vim /etc/sysconfig/network
GATEWAY=172.25.65.1
route -n
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.25.31.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         172.25.31.1     0.0.0.0         UG    0      0        0 eth0

添加网关

在物理机中进行测试:


LVS-Tun模式

这里写图片描述

LVS-Tun模型特性:

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

LVS/Tun原理和特点:

在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),
外层IP首部(源地址为DIP,目标IP为RIP)

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。
此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,
目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此
时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,
而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。
此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

lvs-Tun模式配置:

在server1中:

modprobe ipip  #加载模块,加载模块后会多出一块tunl0网卡
ifconfig tunl0 172.25.84.100 netmask 255.255.255.255 up  #添加虚拟IP

添加ipvsadm规则

ipvsadm -C
ipvsadm -A -t 172.25.31.100:80 -s rr
ipvsadm -a -t 172.25.31.100:80 -r 172.25.31.2:80 -i
ipvsadm -a -t 172.25.31.100:80 -r 172.25.31.3:80 -i
ipvsadm -ln

添加ipvsadm规则

在realserver server2和server3中做相同的操作:

modprobe ipip  #加载模块
ifconfig tunl0 172.25.31.100 netmask 255.255.255.255 up  #添加虚拟IP
sysctl -w net.ipv4.conf.tunl0.rp_filter=0 #临时关闭反向解析功能,若想永久生效,在配置文件中更改

关闭反向解析功能
在物理机中进行测试:
在物理机中进行测试


Full-NAT模式

论是 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 的基础上,加上另一种转换,转换过程如下:
Full-NAT
在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。
内网 IP 之间可以通过多个交换机跨 VLAN 通信。
当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。
LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。
Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。

官网:http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY

下载安装包并解压安装

tar zxf Lvs-fullnat-synproxy.tar.gz
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm

安装rpm-build
创建rpm的二进制软件包和源码软件包

yum install rpm-build -y
cd /root/rpmbuild/SPECS
rpmbuild -bp kernel.spec

根据提示解决依赖性

根据提示解决依赖性

yum install redhat-rpm-config xmlto patchutils elfutils-libelf-devel binutils-devel python-devel perl-ExtUtils-Embed hmaccalc -y

yum install newt-devel-0.52.11-3.el6.x86_64.rpm asciidoc-8.4.5-4.1.el6.noarch.rpm slang-devel-2.2.1-1.el6.x86_64.rpm -y

再次使用rpmbuild命令

rpmbuild -bp kernel.spec

再编译过程中会需要产生随机数,可使用以下命令生成

yum install rng-tools -y
rngd -r /dev/urandom 

打补丁

cd /root/rpmbuild/BUILD
cd kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64
cp /root/lvs-fullnat-synproxy/lvs-2.6.32-220.23.1.el6.patch .
patch -p1<lvs-2.6.32-220.23.1.el6.patch   #patch is in lvs-fullnat-synproxy.tar.gz

在Makefile中写入版本号

vim Makefile
EXTRAVERSION = -220.23.1.el6

这里写图片描述
安装

make
make modules_install
make install

更改默认启动,用安装的新内核启动,重新启动电脑

vim /boot/grub/grub.conf
default = 0
reboot

查看当前内核版本号是否是我们之前新安装的内核

uname -r

查看当前内核版本号

cd lvs-fullnat-synproxy/
tar zxf lvs-tools.tar.gz

安装keepalived

cd /root/lvs-fullnat-synproxy/tools/keepalived
yum install popt-devel  #解决依赖性
./configure --with-kernel-dir="/lib/modules/`uname -r`/build"
make
make install

安装keepalived
安装ipvsadm

cd /root/lvs-fullnat-synproxy/tools/ipvsadm
make
make install

安装ipvsadm

猜你喜欢

转载自blog.csdn.net/qq_40303205/article/details/81292267
今日推荐