一、LVS-FULLNAT模式简介
Full-NAT主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN的问题。采用这种方式,LVS和RS的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性。
Full-NAT相比NAT的主要改进是,在SNAT/DNAT的基础上,加上另一种转换,转换过程如下:
在包从LVS转到RS的过程中,源地址从客户端IP被替换成了LVS的内网IP。
内网IP之间可以通过多个交换机跨VLAN通信。
当RS处理完接受到的包,返回时,会将这个包返回给LVS的内网IP,这一步也不受限于VLAN。
LVS收到包后,在NAT模式修改源地址的基础上,再把RS发来的包中的目标地址从LVS内网IP改为客户端的IP。
二、配置fullnat模式环境
1、fullnat环境编译用时较长,搭建前需要分配较高资源
1.更改server1的内存大小,至少2G
2.更改server1的cpu个数,至少2个
2、安装rpm-build服务用来编译内核的源码包,安装kernel包
yum install rpm-build -y
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm
3、解决依赖性,编译内核文件kernel.spec
cd rpmbuild
cd SPECS
rpmbuild -bp kernel.spec #编译内核文件,报错,需要解决依赖性
yum install -y redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel binutils-devel newt-devel python-devel hmaccalc perl-ExtUtils-Embed #yum仓库中自带
rpmbuild -bp kernel.spec #再次编译内核文件,仍有报错
cd ~
yum install -y 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
注意:这些安装包系统上没有,需要另外下载
cd /root/rpmbuild/SPECS/
rpmbuild -bp kernel.spec #重新编译内核文件
此时会卡住,可以再打开一个终端,连接到server1,安装rng-tools工具解决
yum install -y rng-tools
rngd -r /dev/urandom
4、打补丁
cd /root/
tar zxf Lvs-fullnat-synproxy.tar.gz
cd lvs-fullnat-synproxy
cp lvs-2.6.32-220.23.1.el6.patch /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
cd /root/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 #打补丁
5、显示内核版本号并使用新内核启动
vim Makefile
cd /boot/grub/
vim grub.conf #使用新安装的内核启动
6、编译
cd /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
make #编译,生成可以执行的二进制文件
make modules_install
make install #安装
7、安装内置工具
1.卸载原来的ipvsadm
ipvsadm -l #原有的ipvsadm的空间只有4096,太小,不满足使用需求,补丁会自动扩大到2的22次方
yum remove ipvsadm #卸载原有的ipvsadm
2.解压lvs-tools.tar.gz工具包
cd ~
cd lvs-fullnat-synproxy
tar zxf lvs-tools.tar.gz
3.源码编译安装keepalived
cd tools
cd keepalived
./configure --with-kernel-dir="/lib/modules/`user -r`/build" #检测依赖性,生成二进制文件目录makefile
yum install -y openssl openssl-client openssl-devel.x86_64 popt-devel kernel-devel #解决依赖性
./configure --with-kernel-dir="/lib/modules/`user -r`/build"
make
make install #安装
4.源码编译安装ipvsadm
cd ..
cd ipvsadm/
make
make install
ipvsadm -l 看到size=41944304即2的22次方
此时,fullnat环境配置完成
三、fullnat负载均衡的实现
实验环境:
server1 eth0 172.25.9.1
vip eth1 172.25.254.100
server2 RS端 172.25.9.2
server3 RS端 172.25.9.3
1、在server1端新增一个网卡eth1,给eth1添加一个和eth0不在同一网段的ip地址:ip addr add 172.25.254.100 dev eth1
2、在server2和server3端,设定网关为server1的ip:route add default gw 172.25.9.1 。
开启server2和server3的http服务,作为RS。
3、在server1端添加策略:
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 172.25.9.2 -b
ipvsadm -a -t 172.25.254.100:80 -r 172.25.9.3 -b
ipvsadm -P -t 172.25.254.100:80 -z 127.0.0.1:80
ipvsadm -G -t 172.25.254.100:80
4、测试:
在物理端中curl 172.25.254.100
由于使用的是社区版本的fullnat,无法测试