LVS FULL NAT 模式:
看完上图后发现 FULLNAT有一个问题是:RealServer无法获得用户IP;淘宝通过叫TOA的方式解决的,
主要原理是:将client address放到了TCP Option里面带给后端RealServer,RealServer收到后保存在socket的结构体里并通过toa内核模块hook了getname函数,这样当用户调用getname获取远端地址时,返回的是保存在socket的TCPOption的IP. 百度的BVS是通过叫ttm模块实现的,其实现方式跟toa基本一样,只是没有开源.
实现原理图如下:
1、调整 server 1 的内存大小。
2、安装rep-build ,并为解压和打补丁做准备
[root@server1 SPECS]# rpmbuild -bp kernel.spec ##只做准备
error: Failed build dependencies:
gcc >= 3.4.2 is needed by kernel-2.6.32-220.23.1.el6.x86_64
redhat-rpm-config is needed by kernel-2.6.32-220.23.1.el6.x86_64
patchutils is needed by kernel-2.6.32-220.23.1.el6.x86_64
xmlto is needed by kernel-2.6.32-220.23.1.el6.x86_64
asciidoc is needed by kernel-2.6.32-220.23.1.el6.x86_64
elfutils-libelf-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
zlib-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
binutils-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
newt-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
python-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
perl(ExtUtils::Embed) is needed by kernel-2.6.32-220.23.1.el6.x86_64
hmaccalc is needed by kernel-2.6.32-220.23.1.el6.x86_64
这些都是缺少的东西,都得一一安装
安装好之后,就可以准备了,但是会卡住。这时,我们重新连接同一台server1,在操作。安装
[root@server1 ~]# yum install -y rng-tools-2-13.el6_2.x86_64
[root@server1 ~]# rngd -r /dev/urandom ##重新载入
并安装所需要的安装包
3、解压 Lvs-fullnat 的 包并 安装补丁包儿,打补丁
4、添加版本型号
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# uname -r
2.6.32-431.el6.x86_64
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# vim Makefile ##将 -431.el6.x86_64 添加到32的后面
##切记打补丁的时候一定要注意 -p 后跟的是 “yi” 而不是英文 “l”
5、编译
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# make
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# make modules_install
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# make install
6、修改配置文件
7、重启,为了检测是否编译成功
8、安装一个tool的包,并卸载掉ipvsadm。
可以查看出名字以及版本名
9、再次对 进行编译(三部曲)
第一、
“!!!“ 不可以忽略
“Warning“ 警告,可以忽略
第二、
第三、
10、cd /usr/local 对 ipvsadm 进行编译
11、查看
size = 2 的 22 次方 = 4190304
12、添加策略
server1 (调度器VS)
[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.254.2:80 -b
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -b
server2&server3(后端服务器RS)
测试:真机(Client)
[root@foundation66 ~]# curl 172.25.254.100
^C
[root@foundation66 ~]# curl 172.25.254.100
^C
[root@foundation66 ~]# curl 172.25.254.100
^C
[root@foundation66 ~]# curl 172.25.254.100
^C