羣集之lvs-dr模型

215904851.png

原理:

如圖所示:(此過程不存在地址轉換)

客戶端首先向director發送請求,此時director會對該數據包處理,把幀頭部的目標mac換成後方realservermac。因爲realserver是直接把信息傳送到客戶端,所以爲了客戶端能夠接收,我們還需要在每個realserver上配置一個VIP。然而這樣就產生一個問題,當客戶端的arp請求過來的時候,因爲在director和後方的realserver上都有VIP,所以都會相應用戶的arp請求,那麼客戶端選擇與誰的mac通信呢,這就是個問題。這就需要我們的

realserver在接收arp的請求時,不能進響應

針對這個問題有兩種方式解決方式

1、用一種叫arptable arp防火牆

2、使用內核參數arp-announcearp-ignore,這樣一來也解決了後方realserver地址衝突的問題,這也是一種較好的方案


特點

1.必須處於同一個物理網絡中(連在同一個交換機上)

2.RIP不能使用私有地址,因爲這個地址是直接與用戶通信的

3.Director只轉發請求,而realserver直接響應請求而不轉發

4.集羣節點的網關,不能指向DIP

5.不能做端口轉換(不支持)

6.絕大多數的操作系統都可以實現realserver,realserver需要同一個網卡配置多個Ip地址

7.DR模式的DirectorNAT模式能夠帶動更多的節點


實訓:

220037199.png

拓撲

(注意:圖中倆個NODEloopback接口首先不要配置地址,不然會衝突,應該用兩個內核參數做一下控制)


一、Director的配置

1、首先配置ip地址

220156780.jpg


220216374.jpg


重啓服務

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的配置

1Node1

爲了地址衝突,首先應該修改兩個內核參數

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地址

220334746.jpg


220348925.jpg


重啓網絡服務


因爲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


2Node2

爲了防止地址衝突,這裏方便起見,直接拷貝node1上邊的配置文件

scp 192.168.2.10:/etc/sysctl.conf /etc/

sysctl -p


配置ip地址

220457518.jpg


220514541.jpg


重啓網絡服務


同樣的做靜態路由

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

220655834.jpg


lynx http://192.168.2.20

220723119.jpg


在宿主機上訪問director

220750236.jpg


刷新

220806121.jpg

接着刷新的話會發現訪問了後方輪訓的realserver


2、訪問一致性

實現這種羣集是爲了實現訪問後方的realserver得到一致的結果,那麼怎樣實現呢?對於靜態頁面還好說,只要兩個web頁面做成相同的就行了,如果是動態頁面的。這時候後方必須要有共享存儲,而能夠基於網絡實現共享存儲的方法有兩種,一種是NAS( network attached storage網絡附加存儲),實現文件級別的共享;另一種是SANstorage area network 塊級別共享 )。

這裏我們用NAS來實現這種效果,實現NAS的方式有好幾種。如果再生產環境中應用的話,有專門的硬件產品來實現,或者利用一種叫freenas的軟件來實現,不過在實驗環境下我們可以用samba或者NFS來實現。具體實現的過程就是NFS設備把用戶要訪問頁面放到共享文件夾裏,前面的realserver只需在本地把後方的共享文件夾掛載到本地就行了。


實現NAS

首先爲NAS配置相應的IP地址

經查看已經安裝了nfs

220901195.jpg


建立共享文件夾

220919364.jpg


編輯共享清單

vim /etc/exportsr

如果是動態頁面的話用戶則具有寫的權限(像是論壇等等)

220942310.jpg


啓動服務

service nfs start

把服務加入開機啓動項

221038414.jpg


分別爲兩個節點添加網卡

因爲實驗環境是在虛擬機裏實現的,把兩塊網卡放在vmnet2區域裏,當然後方的NAS也應該在vmnet2區域

分別爲兩塊網卡添加地址

重啓服務


掛載共享文件夾

查看後方的共享

221110993.jpg


分別在兩個節點上掛載後方的共享文件

mount 192.168.3.100/webroot /var/www/html

再次訪問的話就會得到相同的頁面了


這種方式有一定缺陷,就是效率太低,不過它也有它的優點,那就是鎖機制(兩個人不能同時做寫操作)和推送機制(在一個節點上邊提交的信息可以在另一個節點上看到)。另外一個缺陷就是在director上定義的輪訓規則是靜態的,不根據實際情況進行調整,即使後方的線路down掉,規則依舊存在,這就需要在每個節點上增加健康探測機制,來時刻監聽線路的健康狀況。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章