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,所以測試不出來。