负载均衡 | 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的内存
硬盘空间如果太小编译过程会出错,
[[email protected] ~]# 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 #一定要加-
[[email protected] 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写入策略
[[email protected] ~]# ipvsadm -C
[[email protected] ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[[email protected] ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.28.2:80 -b
-b表示 fullnat
[[email protected] ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.28.3:80 -b
[[email protected] ~]# ipvsadm -P -t 172.25.254.100:80 -z 127.0.0.1:80
[[email protected] ~]# ipvsadm -G -t 172.25.254.100:80
13,客户端访问测试
curl 172.25.28.100
注意:虚拟机由于自身问题访问不成功!