1. 程式人生 > >LVS模式四:FULLNAT模式(環境構造:編譯核心)

LVS模式四:FULLNAT模式(環境構造:編譯核心)

fullnat模式原理圖:

FULLNAT模式原理:

1、client主機(cip)將請求發往前端的負載均衡器(vip),請求報文源地址是CIP,目標地址為VIP。負載均衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將客戶端請求報文的源MAC地址改為自己DIP的MAC地址,目標MAC改為了RIP的MAC地址,並將此包傳送給RS。
2、RS發現請求報文中的目的MAC是自己,就會將次報文接收下來,處理完請求報文後,將響應報文通過lo介面送給eth0網絡卡直接傳送給client主機(cip)。

fullnat模式優缺點:

FULLNAT一個最大的問題是:RealServer無法獲得使用者IP;為了解決這個問題我們提出了TOA的概念,主要原理是:將clientaddress放到了TCP Option裡面帶給後端RealServer,RealServer上通過toa核心模組hack了getname函式,給使用者態返回TCP Option中的client ip

一、核心編譯 (FULLNAT模式要重編LVS機器核心)

需要準備的安裝包:
kernel-2.6.32-220.23.1.el6.src.rpm 

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 Lvs-fullnat-synproxy.tar.gz
Lvs-fullnat-synproxy.tar.gz

1.給server2新增記憶體為2048,df 檢視   編譯核心是會讀大量

檔案,同時往硬盤裡寫入資訊,所以要有足夠的空間,否則編譯的速度會非常慢

2.下載兩個安裝包

kernel-2.6.32-220.23.1.e16.src.rpm     Lvs-fullnat-synproxy.tar.gz

3.安裝kernel*出現rembuild

rpm -ivh kernel-2.6.32-220.23.1.e16.src.rp

4.進入目錄編譯,出錯存在軟體依賴包

cd rpmbuild

ls

cd /SPECS

ls

 安裝rpm -build工具:yum install rpm-build -y

rpmbuild -bp kernel.spec

5.安裝依賴包

6.安裝下面包

yum install -y 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

注意:出現此錯誤是因為沒有安裝gcc編譯器和redhat-rpm-config

解決辦法: yum install -y gcc redhat-rpm-config

7.進入目錄編譯

8.在這裡會停下,需要在開一個終端,產生隨機數才會繼續,複製server2上面的rngdr /dev/urandom,編譯結束

yum provides */rngd                    ##yum provides用來查詢這個命令有哪個包提供

yum install -y rng-tools

rngd -r /dev/urandom                    ##用這個命令產生隨機數

此時回到編譯的終端發現編譯完成了

9.解壓軟體,複製檔案到指定目錄,打補丁

cd

tar zxf Lvs-fullnat-synproxy.tar.gz    ls

cd  lvs-fullnat-synproxy/              ls

 cp lvs-2.6.32-220.23.1.el6.patch ../rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

cd ~/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

10.擴充套件版本,寫入你需要編譯的版本

cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

vim Makefile

11.make                                      ##編譯

     make modules_install         ##匯入安裝模組

     make install                          ##安裝的是引導檔案,在/boot目錄下就有你所編譯的核心檔案vmlinuz-2.6.32-220.23.1.el6

12.檢視/boot/有編譯好的檔案,改變grub中default=0,reboot,開機檢視uname -r

 vim /boot/grub/grub.conf

default=0     ##因為編譯好的核心檔案就加在原有版本的上面,因此default要改成0,開機時才會進入所編譯的核心版本

title Red Hat Enterprise Linux Server (2.6.32-220.23.1.el6)        ##所編譯的版本
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)            ##原有的系統核心版本              

uname -r     ##檢視當前系統啟動核心版本

reboot

uname -r

 

二、編譯keepalived

cd lvs-fullnat-synproxy/           ls

 tar zxf lvs-tools.tar.gz

ls                        ##發現多出一個tools目錄

cd tools/

cd keepalived/

ls

./configure --with-kernel-dir="/lib/modules/`uname -r`/build"(注意:uname -r 用反引號括起來)

出現以上錯誤時:yum -y install openssl-devel

安裝依賴:

yum install popt-devel -y

安裝完成所需元件和工具後

./configure --with-kernel-dir="/lib/modules/`uname -r`/build"

安裝編譯:

make

make install

三.編譯ipvsadm

cd

cd lvs-fullnat-synproxy/tools/ipvsadm/

ls

make

make install

/etc/init.d/ipvsadm status

ipvsadm -l

size = 2 的 22 次方 = 4190304

ipvsadm --help    fullnat引數出現時則說明fullnat環境搭建好了

################fullnat環境配置完成###################

1.  在server2端(ip為172.25.45.1)新增一個網絡卡eth1,給eth1新增一個和eth0不在同一網段的ip地址:ip addr add 172.25.254.100 dev eth1

2.  在server1(ip為172.25.45.1)和server3(ip為172.25.45.3)端,設定閘道器為server2的ip:route add default gw 172.25.45.2 。之後開啟server1和server3的http服務,作為RS。

3.新增策略
server2(排程器VS)

ipvsadm -A -t 172.25.45.100:80 -s rr

ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.1:80 -b

ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.3:80 -b

測試(物理機):curl 172.25.254.100

由於使用的是社群版本的fullnat,所以測試不出來。