LVS模式四:FULLNAT模式(环境构造:编译内核)

fullnat模式原理图:

FULLNAT模式原理:

1、client主机(cip)将请求发往前端的负载均衡器(vip),请求报文源地址是CIP,目标地址为VIP。负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。
2、RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给client主机(cip)。

fullnat模式优缺点:

FULLNAT一个最大的问题是:RealServer无法获得用户IP;为了解决这个问题我们提出了TOA的概念,主要原理是:将clientaddress放到了TCP Option里面带给后端RealServer,RealServer上通过toa内核模块hack了getname函数,给用户态返回TCP Option中的client ip

一、内核编译 (FULLNAT模式要重编LVS机器内核)

需要准备的安装包:
kernel-2.6.32-220.23.1.el6.src.rpm 

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 Lvs-fullnat-synproxy.tar.gz
Lvs-fullnat-synproxy.tar.gz

1.给server2添加内存为2048,df 查看   编译内核是会读大量文件,同时往硬盘里写入信息,所以要有足够的空间,否则编译的速度会非常慢

扫描二维码关注公众号,回复: 3634882 查看本文章

2.下载两个安装包

kernel-2.6.32-220.23.1.e16.src.rpm     Lvs-fullnat-synproxy.tar.gz

3.安装kernel*出现rembuild

rpm -ivh kernel-2.6.32-220.23.1.e16.src.rp

4.进入目录编译,出错存在软件依赖包

cd rpmbuild

ls

cd /SPECS

ls

 安装rpm -build工具:yum install rpm-build -y

rpmbuild -bp kernel.spec

5.安装依赖包

6.安装下面包

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

注意:出现此错误是因为没有安装gcc编译器和redhat-rpm-config

解决办法: yum install -y gcc redhat-rpm-config

7.进入目录编译

8.在这里会停下,需要在开一个终端,产生随机数才会继续,复制server2上面的rngdr /dev/urandom,编译结束

yum provides */rngd                    ##yum provides用来查询这个命令有哪个包提供

yum install -y rng-tools

rngd -r /dev/urandom                    ##用这个命令产生随机数

此时回到编译的终端发现编译完成了

9.解压软件,复制文件到指定目录,打补丁

cd

tar zxf Lvs-fullnat-synproxy.tar.gz    ls

cd  lvs-fullnat-synproxy/              ls

 cp lvs-2.6.32-220.23.1.el6.patch ../rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

 patch -p1 < lvs-2.6.32-220.23.1.el6.patch

10.扩展版本,写入你需要编译的版本

cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

vim Makefile

11.make                                      ##编译

     make modules_install         ##导入安装模块

     make install                          ##安装的是引导文件,在/boot目录下就有你所编译的内核文件vmlinuz-2.6.32-220.23.1.el6

12.查看/boot/有编译好的文件,改变grub中default=0,reboot,开机查看uname -r

 vim /boot/grub/grub.conf

default=0     ##因为编译好的内核文件就加在原有版本的上面,因此default要改成0,开机时才会进入所编译的内核版本

title Red Hat Enterprise Linux Server (2.6.32-220.23.1.el6)        ##所编译的版本
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)            ##原有的系统内核版本              

uname -r     ##查看当前系统启动内核版本

reboot

uname -r

二、编译keepalived

cd lvs-fullnat-synproxy/           ls

 tar zxf lvs-tools.tar.gz

ls                        ##发现多出一个tools目录

cd tools/

cd keepalived/

ls

./configure --with-kernel-dir="/lib/modules/`uname -r`/build"(注意:uname -r 用反引号括起来)

出现以上错误时:yum -y install openssl-devel

安装依赖:

yum install popt-devel -y

安装完成所需组件和工具后

./configure --with-kernel-dir="/lib/modules/`uname -r`/build"

安装编译:

make

make install

三.编译ipvsadm

cd

cd lvs-fullnat-synproxy/tools/ipvsadm/

ls

make

make install

/etc/init.d/ipvsadm status

ipvsadm -l

size = 2 的 22 次方 = 4190304

ipvsadm --help    fullnat参数出现时则说明fullnat环境搭建好了

################fullnat环境配置完成###################

1.  在server2端(ip为172.25.45.1)新增一个网卡eth1,给eth1添加一个和eth0不在同一网段的ip地址:ip addr add 172.25.254.100 dev eth1

2.  在server1(ip为172.25.45.1)和server3(ip为172.25.45.3)端,设定网关为server2的ip:route add default gw 172.25.45.2 。之后开启server1和server3的http服务,作为RS。

3.添加策略
server2(调度器VS)

ipvsadm -A -t 172.25.45.100:80 -s rr

ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.1:80 -b

ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.3:80 -b

测试(物理机):curl 172.25.254.100

由于使用的是社区版本的fullnat,所以测试不出来。

猜你喜欢

转载自blog.csdn.net/qq_42711214/article/details/82990698