原理:
如圖所示:(此過程不存在地址轉換)
客戶端首先向director發送請求,此時director會對該數據包處理,把幀頭部的目標mac換成後方realserver的mac。因爲realserver是直接把信息傳送到客戶端,所以爲了客戶端能夠接收,我們還需要在每個realserver上配置一個VIP。然而這樣就產生一個問題,當客戶端的arp請求過來的時候,因爲在director和後方的realserver上都有VIP,所以都會相應用戶的arp請求,那麼客戶端選擇與誰的mac通信呢,這就是個問題。這就需要我們的
realserver在接收arp的請求時,不能進響應
針對這個問題有兩種方式解決方式
1、用一種叫arptable 的arp防火牆
2、使用內核參數arp-announce和arp-ignore,這樣一來也解決了後方realserver地址衝突的問題,這也是一種較好的方案
特點
1.必須處於同一個物理網絡中(連在同一個交換機上)
2.RIP不能使用私有地址,因爲這個地址是直接與用戶通信的
3.Director只轉發請求,而realserver直接響應請求而不轉發
4.集羣節點的網關,不能指向DIP
5.不能做端口轉換(不支持)
6.絕大多數的操作系統都可以實現realserver,而realserver需要同一個網卡配置多個Ip地址
7.DR模式的Director比NAT模式能夠帶動更多的節點
實訓:
拓撲
(注意:圖中倆個NODE的loopback接口首先不要配置地址,不然會衝突,應該用兩個內核參數做一下控制)
一、Director的配置
1、首先配置ip地址
重啓服務
service network restart
2、安裝工具
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom (掛載光盤)
cd /mnt/cdrom/Cluster
rpm -ivh ipvsadm-1.24-10.i386.rpm
二、節點node的配置
1、Node1
爲了地址衝突,首先應該修改兩個內核參數
echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
爲了這兩個參數立即生效執行下面命令
sysctl -p
配置ip地址
重啓網絡服務
因爲2.100的網絡地址被看做一個點的地址,所以應該爲node1增加一臺路由
route add -host 192.168.2.100/32 dev lo:0
安裝web服務
mount /dev/cdrom /mnt/cdrom
rpm -ivh /mnt/cdrom/Server/httpd-2.2.3-31.el5.i386.rpm
啓動服務並加入開機啓動項
service httpd start
chkconfig httpd on
建設網頁
echo "node1" >/var/www/html/index.html
2、Node2
爲了防止地址衝突,這裏方便起見,直接拷貝node1上邊的配置文件
scp 192.168.2.10:/etc/sysctl.conf /etc/
sysctl -p
配置ip地址
重啓網絡服務
同樣的做靜態路由
route add -host 192.168.2.100/32 dev lo:0
安裝web服務
mount /dev/cdrom /mnt/cdrom
rpm -ivh /mnt/cdrom/Server/httpd-2.2.3-31.el5.i386.rpm
啓動服務並加入開機啓動項
service httpd start
chkconfig httpd on
建設網頁
echo "node2" >/var/www/html/index.html
三、訪問並測試
1、在Director上定義虛擬服務器
ipvsadm -A -t 192.168.2.100:80 -s rr
指向後方的realserver
ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.10 -g
ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.20 -g
爲了下次啓動規則任然存在,保存一下
service ipvsadm save
重啓服務
service ipvsadm restart
安裝文本瀏覽器進行測試
rpm -ivh /mnt/cdrom/Server/lynx-2.8.5-28.1.el5_2.1.i386.rpm
lynx http://192.168.2.10
lynx http://192.168.2.20
在宿主機上訪問director
刷新
接着刷新的話會發現訪問了後方輪訓的realserver
2、訪問一致性
實現這種羣集是爲了實現訪問後方的realserver得到一致的結果,那麼怎樣實現呢?對於靜態頁面還好說,只要兩個web頁面做成相同的就行了,如果是動態頁面的。這時候後方必須要有共享存儲,而能夠基於網絡實現共享存儲的方法有兩種,一種是NAS( network attached storage網絡附加存儲),實現文件級別的共享;另一種是SAN(storage area network 塊級別共享 )。
這裏我們用NAS來實現這種效果,實現NAS的方式有好幾種。如果再生產環境中應用的話,有專門的硬件產品來實現,或者利用一種叫freenas的軟件來實現,不過在實驗環境下我們可以用samba或者NFS來實現。具體實現的過程就是NFS設備把用戶要訪問頁面放到共享文件夾裏,前面的realserver只需在本地把後方的共享文件夾掛載到本地就行了。
實現NAS
首先爲NAS配置相應的IP地址
經查看已經安裝了nfs
建立共享文件夾
編輯共享清單
vim /etc/exportsr
如果是動態頁面的話用戶則具有寫的權限(像是論壇等等)
啓動服務
service nfs start
把服務加入開機啓動項
分別爲兩個節點添加網卡
因爲實驗環境是在虛擬機裏實現的,把兩塊網卡放在vmnet2區域裏,當然後方的NAS也應該在vmnet2區域
分別爲兩塊網卡添加地址
重啓服務
掛載共享文件夾
查看後方的共享
分別在兩個節點上掛載後方的共享文件
mount 192.168.3.100:/webroot /var/www/html
再次訪問的話就會得到相同的頁面了
這種方式有一定缺陷,就是效率太低,不過它也有它的優點,那就是鎖機制(兩個人不能同時做寫操作)和推送機制(在一個節點上邊提交的信息可以在另一個節點上看到)。另外一個缺陷就是在director上定義的輪訓規則是靜態的,不根據實際情況進行調整,即使後方的線路down掉,規則依舊存在,這就需要在每個節點上增加健康探測機制,來時刻監聽線路的健康狀況。