负载均衡 | VS/FULLNAT模式

FULLNAT

     LVS 当前应用主要采用 DR 和 NAT 模式,但这 2 种模式要求 RealServer 和 LVS
在同一个 vlan 中,导致部署成本过高; TUNNEL 模式虽然可以跨 vlan,但 RealServer
上需要部署 ipip 模块等,网络拓扑上需要连通外网,较复杂,不易运维。
为了解决上述问题,我们在 LVS 上添加了一种新的转发模式:FULLNAT,该
模式和 NAT 模式的区别是:Packet IN 时,除了做 DNAT,还做 SNAT(用户 ip->内
网 ip),从而实现 LVS-RealServer 间可以跨 vlan 通讯,RealServer 只需要连接到内
网;

FULLNAT 将作为一种新工作模式(同 DR/NAT/TUNNEL),实现如下功能:
1. Packet IN 时,目标 ip 更换为 realserver ip,源 ip 更换为 内网 local ip;
2. Packet OUT 时,目标 ip 更换为 client ip,源 ip 更换为 vip;
注:Local ip 为一组内网 ip 地址;
性能要求,和 NAT 比,正常转发性能下降<10%;

 

 

实现过程

关闭所有虚拟机,只用vm1

给vm1分配2048的内存

硬盘空间如果太小编译过程会出错,

[root@server1 ~]# df -h

Filesystem                    Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root   19G  3.3G   15G  19% /

tmpfs                         939M     0  939M   0% /dev/shm

/dev/vda1                     485M   33M  427M   8% /boot

需要

asciidoc-8.4.5-4.1.el6.noarch.rpm

kernel-2.6.32-220.23.1.el6.src.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

1,安装kernel-2.6.32-220.23.1.el6

(二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

-ivh:安装显示安装进度--install--verbose--hash

)

重构rpm包:
yum install -y rpm-build

rpm -ivh  kernel-2.6.32-220.23.1.el6.src.rpm

进入SPECS目录

rpmbuild -bp kernel.spec

  -bp                           build through %prep (unpack sources and apply

                                patches) from <specfile>

 

解决依赖性,全部安装,注意有一个的书写

注意:安装过程一定要看一看,有些包yum仓库没有,需要根据提示没有的包手动安装

有三个包需要另外安装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

然后继续重构 rpmbuild -bp kernel.spec

会卡住,需要随机字符, 安装rngd所需软件包

执行 rngd -r /dev/urandom

重构完成的kernel在rpmbuild/BUILD/下面

2,解压Lvs-fullnat-synproxy.tar.gz  (tar zxf)

-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
特别注意,在参数的下达中, c/x 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
   『 tar -zcvPf tfile sfile』才对喔!

进入目录

把布丁.patch文件复制到/root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64

3,打布丁

/root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64

执行patch -p1 < 布丁.patch

4,编译内核

linux-2.6.32-220.23.1.el6.x86_64目录下

make

(make -j16是16核,虚拟机是单核的,所以不能写,看生产环境,4核就写-j4)

lscpu查看cpu信息

make之前可以修改版本名称

vim    /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/Makefile这个文件

VERSION = 2

PATCHLEVEL = 6

SUBLEVEL = 32

EXTRAVERSION =  这里是拓展版本,可以写为-220.23.1.el6 #一定要加-

[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# cat .config | grep IP_VS

CONFIG_IP_VS=m

CONFIG_IP_VS_IPV6=y

# CONFIG_IP_VS_DEBUG is not set

CONFIG_IP_VS_TAB_BITS=22   这是2^22次方

#ipvsadm -l

#IP Virtual Server version 1.2.1 (size=4096)  是改变的这个,最后就是2^22

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

CONFIG_IP_VS_PROTO_TCP=y

CONFIG_IP_VS_PROTO_UDP=y

CONFIG_IP_VS_PROTO_AH_ESP=y

CONFIG_IP_VS_PROTO_ESP=y

CONFIG_IP_VS_PROTO_AH=y

CONFIG_IP_VS_RR=m

CONFIG_IP_VS_WRR=m

CONFIG_IP_VS_LC=m

CONFIG_IP_VS_WLC=m

CONFIG_IP_VS_LBLC=m

CONFIG_IP_VS_LBLCR=m

CONFIG_IP_VS_DH=m

CONFIG_IP_VS_SH=m

CONFIG_IP_VS_SED=m

CONFIG_IP_VS_NQ=m      #10个算法

CONFIG_IP_VS_FTP=m

 

5,make modules_install 编译模块

6,make install  编译引导

(http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY)官方文档

7,进入/boot/grub/grub.conf

default=0 修改默认启动项,

8,reboot,如果能启动好,那么就没问题

9,此时ipvsadm -l查看,已经变大了

ipvsadm --help 查看没有fullnat模式

keepalived和ipvsadm有先后顺序

lvs-fullnat-synproxy下解开tar包生成tools目录

10,编译keepalived

解压lvs-tools.tar.gz

(--with-kernel-dir指的是内核库文件的路径,代码中使用的是内核提供的函数,而这些函数也是有具体实现的,在连接成一个内核模块时要说明这些库文件在哪里,方便链接程序把它们连接成一个完成的模块。

(http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY)官方文档

解决依赖性popt-devel,再次编译

make

mak install   (都是在keepalived目录下)

11,删除ipvsadm,重新编译

yum remove ipvsadm

编译ipvsadm

ipvsadm/

make

make install

此时查看ipvsadm --help 有fullnat模式

基本配置

server2和server3打开apache服务

server1作为调度器

eth0 172.25.28.1 内网ip 

eth1 172.25.254.100 公网ip 

server2和server3的网关为server1公网ip

 

12,server1写入策略

[root@server1 ~]# ipvsadm -C

[root@server1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr

[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.28.2:80 -b  

  -b表示 fullnat

[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.28.3:80 -b

[root@server1 ~]# ipvsadm -P -t 172.25.254.100:80 -z 127.0.0.1:80

[root@server1 ~]# ipvsadm -G -t 172.25.254.100:80

13,客户端访问测试

curl 172.25.28.100

注意:虚拟机由于自身问题访问不成功!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值