LVS/fullnat模式(内核编译)

无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关。
这引发的两个问题是:
1、同一个 VLAN 的限制导致运维不方便,跨 VLAN 的 RS 无法接入。
2、LVS 的水平扩展受到制约。当 RS 水平扩容时,总有一天其上的单点 LVS 会成为瓶颈。
Full-NAT 由此而生,解决的是 LVS 和 RS 跨 VLAN 的问题,而跨 VLAN 问题解决后,LVS 和 RS 不再存在 VLAN 上的从属关系,可以做到多个 LVS 对应多个 RS,解决水平扩容的问题。
Full-NAT 相比 NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另一种转换。
fullnat原理图:
这里写图片描述

###########实验

内核编译
步骤:
在server1上:
(1)安装插件

##所需要的安装包
Lvs-fullnat-synproxy.tar.gz    
newt-devel-0.52.11-3.el6.x86_64.rpm 
slang-devel-2.2.1-1.el6.x86_64.rpm 
asciidoc-8.4.5-4.1.el6.noarch.rpm    ##依赖性
kernel-2.6.32-220.23.1.el6.src.rpm     ##安装内核

(2)更改主机内存
先将server1强制关闭,然后修改内存。
这里写图片描述
(3)修改yum源为高可用yum源
这里写图片描述
(4)安装内核源码包

[root@server1 ~]# yum install -y rpm-build
#rpmbuild命令被用于创建rpm的二进制软件包和源码软件包
[root@server1 ~]# rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm 
[root@server1 ~]# cd rpmbuild/
[root@server1 rpmbuild]# ls
SOURCES  SPECS
[root@server1 rpmbuild]# cd SPECS/
[root@server1 SPECS]# ls
kernel.spec
[root@server1 SPECS]# rpmbuild -bp kernel.spec   预编译环境

这里写图片描述
(5)安装失败,需安装依赖性提示的包

[root@server1 SPECS]# yum install gcc redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel binutils-devel newt-devel python-devel hmaccalc perl-ExtUtils-Embed -y
[root@server1 ~]# yum install newt-devel-0.52.11-3.el6.x86_64.rpm 
[root@server1 ~]# yum install slang-devel-2.2.1-1.el6.x86_64.rpm
[root@server1 ~]# yum install asciidoc-8.4.5-4.1.el6.noarch.rpm
[root@server1 ~]# cd rpmbuild/
[root@server1 rpmbuild]# cd SPECS/
[root@server1 SPECS]# rpmbuild -bp kernel.spec  ##编译后会卡住

这里写图片描述
(6)卡住后再开一个server1窗口,输入以下即可结束安装

root@server1 ~]# yum provides */rngd
[root@server1 ~]# yum install rng-tools-2-13.el6_2.x86_64 -y
[root@server1 ~]# rngd -r /dev/urandom     #可以让预编译环境快速安装

这里写图片描述
(7)返回原来的终端

[root@server1 ~]# tar zxf Lvs-fullnat-synproxy.tar.gz 
[root@server1 ~]# cd rpmbuild/
[root@server1 rpmbuild]# cd BUILD
[root@server1 BUILD]# cd kernel-2.6.32-220.23.1.el6/
[root@server1 kernel-2.6.32-220.23.1.el6]# cd linux-2.6.32-220.23.1.el6.x86_64/
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# cp /root/lvs-fullnat-synproxy/lvs-2.6.32-220.23.1.el6.patch .
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# ll lvs-2.6.32-220.23.1.el6.patch .
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# patch -p1 < lvs-2.6.32-220.23.1.el6.patch   ##打补丁
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# uname -r  ##查看名字
[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# vim Makefile    ##给内核版本改名字(以便实验)

这里写图片描述
这里写图片描述
这里写图片描述
(8)编译,导入模块并安装

[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

(9)修改引导文件

[root@server1 linux-2.6.32-220.23.1.el6.x86_64]# cd /boot/
[root@server1 boot]# ls
[root@server1 boot]# cd grub/
[root@server1 grub]# ls
[root@server1 grub]# vim grub.conf 
#修改default的值为0 表示先启动 
[root@server1 grub]# reboot   #重启(查看是否编译成功)

这里写图片描述
(10)重启之后重新连接(进行keepalived install)

kiosk@foundation9 ~]$ ssh root@172.25.9.1
[root@server1 ~]# uname -r
[root@server1 ~]# cd lvs-fullnat-synproxy/
[root@server1 lvs-fullnat-synproxy]#  tar zxf lvs-tools.tar.gz
[root@server1 lvs-fullnat-synproxy]# ls
[root@server1 lvs-fullnat-synproxy]#  cd tools/
[root@server1 tools]#  cd keepalived/

(11)编译三部曲

[root@server1 keepalived]# ./configure --with-kernel-dir="/lib/modules/`uname -r`/build"    
[root@server1 keepalived]# yum install -y popt-devel
[root@server1 keepalived]# ./configure --with-kernel-dir="/lib/modules/`uname -r`/build"
[root@server1 keepalived]# make
[root@server1 keepalived]# make install

(12)编译完成之后,再在ipvsadm目录下再次编译(ipvsadm install)

[root@server1 keepalived]# cd /usr/local/
[root@server1 local]# cd sbin/
[root@server1 sbin]# ls
[root@server1 sbin]# cd
[root@server1 ~]# cd lvs-fullnat-synproxy/
[root@server1 lvs-fullnat-synproxy]# ls
[root@server1 lvs-fullnat-synproxy]# cd tools/
[root@server1 tools]# cd ipvsadm/
[root@server1 ipvsadm]# ls
[root@server1 ipvsadm]# make
[root@server1 ipvsadm]# make install
[root@server1 ipvsadm]# cd 
[root@server1 ~]# ipvsadm -l

这里写图片描述
(13)添加策略(和NAT模式一样需要添加一个网卡,设定虚拟IP要和真机在同一个网段上,但和虚拟机不在同一个网段)

[root@server1 ~]# ip addr add 172.25.0.9/24 dev eth3   
[root@server1 ~]# ip link set up eth3   ##开启
[root@server1 ~]# ip addr
[root@server1 ~]# /etc/init.d/ipvsadm start
[root@server1 ipvsadm]#  ipvsadm -C
[root@server1 ipvsadm]# ipvsadm -A -t 172.25.0.9:80 -s rr
[root@server1 ipvsadm]# ipvsadm -a -t 172.25.0.9:80 -r 172.25.9.2:80 -b
[root@server1 ipvsadm]# ipvsadm -a -t 172.25.0.9:80 -r 172.25.9.3:80 -b
[root@server1 ipvsadm]# ipvsadm -P -t 172.25.0.9:80 -z 127.0.0.1:80
[root@server1 ipvsadm]# ipvsadm -G -t 172.25.0.9:80
[root@server1 ipvsadm]# ipvsadm -ln

这里写图片描述
在server2和server3上:
(1)在server2和server3主机上将网关指向server1的IP

vim  /etc/sysconfig/network-script/ifcfg-eth0     #添加网关
/etc/init.d/network restart                 #重启网络使网关生效
route -n

这里写图片描述
在物理机上进行测试:curl 172.25.254.1(新添加的网卡地址)

猜你喜欢

转载自blog.csdn.net/chao199512/article/details/81390485