天天看點

LVS的NAT模式+DR模式的存儲挂載

一:LVS群集簡介:

lvs(linux virtual server)Linux的虛拟服務 

Internet的快速增長使多媒體網絡伺服器面對的通路數量快速增加,伺服器需要具備提供大量并發通路服務的能力,是以對于大負載的伺服器來講, CPU、I/O處理能力很快會成為瓶頸。由于單台伺服器的性能總是有限的,簡單的提高硬體性能并不能真正解決這個問題。為此,必須采用多伺服器和負載均衡技術才能滿足大量并發通路的需要。Linux 虛拟伺服器(Linux Virtual Servers,LVS) 使用負載均衡技術将多台伺服器組成一個虛拟伺服器。它為适應快速增長的網絡通路需求提供了一個負載能力易于擴充,而價格低廉的解決方案

二:LVS的結構和工作原理: 

LVS由前端的負載均衡器(Load Balancer,LB)和後端的真實伺服器(Real Server,RS)群組成。RS間可通過區域網路或廣域網連接配接。LVS的這種結構對使用者是透明的,使用者隻能看見一台作為LB的虛拟伺服器(Virtual Server),而看不到提供服務的RS群。

三:lvs的工作模式有三種: 

1.nat(LVS-NAT) 

a.叢集接點必須和LB在同一個子網中(即DIP和),不能跨域網段 

b.RIP 是私有位址 

c.所有的RIP的網關必須指向DIP 

d.排程器處理所有的請求 

e.端口位址轉換 

f.因為是NAT 

h.單點瓶頸 

2.直接路由(LVS-DR) 

a.叢集接點必須和LB必須在一個實體網段,之間不能有路由器 

b.RIP可以使用公網位址,建議使用公網位址 

c.LB僅處理請求,不處理響應 

d.real server的網關不能指向DIP 

e.不能做端口轉換 

f.并非所有的系統都可以做接點 

h.LVS-DR 可以帶動比LVS-NAT更多的接點 

3.隧道(LVS-TUN) 

a.叢集接點和LB接點不必在同一個實體網絡 

b.RIP使用公網位址 

c.LB隻處理進來的請求,不處理出去的請求 

d.響應的請求一定不經過LB 

e.不支援端口位址轉換 

f.隻能使用支援IP隧道協定的作業系統做叢集接點

四:lvs的LB的排程方法及各個排程方法對應的算法: 

1.靜态排程方法:(fixed scheduling)不考慮後端連接配接狀态 

a:RR(round-robin)輪循着,它将請求依次配置設定不同的RS,也就是在RS中均攤請求。這種算法簡單,但是隻适合于RS處理性能相差不大的情況; 

b:WRR(weight round-robin)權重輪調,它将依據不同RS的權值配置設定任務。權值較高的RS将優先獲得任務,并且配置設定到的連接配接數将比權值較低的RS更多。相同權值的RS得到相同數目的連接配接數; 

c:destination hashing 根據服務的請求轉發到特定的伺服器,跟使用者建立粘性,提高緩存命中率 

d:source hashing 将來自同一個使用者的請求,始終轉發到特定的路由器或防火牆(平均内網負載) 

2.動态排程方法:(dynamic scheduling)考慮後端連接配接狀态 

a:LC (least-connect)最少連接配接,檢查active和inactive,連接配接數(overhead)最少的接受請求 

b:WLC(weight least-connect)權重最小連接配接數(叢集最好的算法) 

c:shortest expected delay (SED)最短期望延遲 ,不考慮非活動狀态,在計算overhead之前,把非活動狀态的總數加上1 

d:NQ(never query)隻要有空閑的,不考慮算法的接受請求; 

e:LBLC(locality-based-least-connect:DH)支援權重(後面的是緩存伺服器的)基于位址的最小連接配接數排程(Locality-Based Least-Connection) 将來自同一目的位址的請求配置設定給同一台RS如果這台伺服器尚未滿負荷,否則配置設定給連接配接數最小的RS,并以它為下一次配置設定的首先考慮; 

f:LBLCR (locality-based-least-connect with replication scheduling)是對LBLC的改進,對于某一目的位址,對應有一個RS子集。對此位址的請求,為它配置設定子集中連接配接數最小的RS;如果子集中所有的伺服器均已滿負荷,則從叢集中選擇一個連接配接數較小的伺服器,将它加入到此子集并配置設定連接配接;若一定時間内,這個子集未被做任何修改,則将子集中負載最大的節點從子集删除;

五:ipvsadm介紹: 

ipvs是核心空間子產品,使用者在LB負載均衡器上使用ipvsadm指令進行操作,基于不同模式的不同排程算法進行設定,然後實作不同的不同的負載措施:

1.定義叢集服務 

ipvsadm -A|-E -t|-u|-f VIP:PORT {tcp|udp|firewall mark} -s 排程算法,預設是wlc 

      -A 添加、-E 修改 

ipvsadm -D -t|-u VIP:PORT 删除定義的叢集 

2.要為叢集服務定義realserver 

ipvsadm -a|-e -t|-u VIP:port -r REALSERVER:port -g|-i|-m(模型) [-w weitht] 

      -a 添加、-e 修改、-w 權重、-d 删除

ipvsadm -d -t|-u VIP:port -r REALSERVER:PORT 

      -C 清除規則、-R 恢複、-S 儲存 

      其中模式中的-g|-i|-m分别用于dr|tun|nat 

3.檢視 

ipvsadm    -ln

案例一:LVS的nat模式:director使用linux主機。realserver1和realserver2搭建web伺服器

拓撲:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499622976Gyd.png"></a>

LB---linux主機配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962299B7Ia.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962301CgwF.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962306SI3n.png"></a>

[root@lyt ~]# mkdir /mnt/cdrom

[root@lyt ~]# mount /dev/cdrom /mnt/cdrom/

[root@lyt ~]# cd /mnt/cdrom/Cluster     #切換到Cluster倉庫

[root@lyt Cluster]# vim /etc/yum.repos.d/rhel-debuginfo.repo      #編輯本地yum

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962308dyrN.png"></a>

[root@lyt Cluster]# grep -i ip_vs /boot/config-2.6.18-164.el5     #檢視核心是否支援ipvs

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962312EN6D.png"></a>

[root@lyt Cluster]# yum install ipvsadm –y      #安裝ipvs的管理工具ipvsadm

[root@lyt Cluster]# ipvsadm -A -t 192.168.101.66:80 -s rr      #定義一個群集伺服器,vip為192.168.101.66,由于後面realserver是web,是以監聽80

端口;-A表示添加,-t表示tcp,-s表示排程算法,rr表示排程算法輪詢

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.100 -m    #定義一個realserver,-a表示添加,vip位址是192.168.101.66,-t表示

tcp,-r表示realserver是192.168.2.100。-m表示采用的是nat模式

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.101 -m   #定義一個realserver,-a表示添加,vip位址是192.168.101.66,-t表示

tcp,-r表示realserver是192.168.2.101。-m表示采用的是nat模式

[root@lyt Cluster]# service ipvsadm save    #儲存ipvsadm的規則

[root@lyt Cluster]# vim /etc/sysconfig/ipvsadm       #規則儲存在該檔案中

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962315wHbU.png"></a>

[root@lyt Cluster]# service ipvsadm start    #啟動ipvsadm服務

[root@lyt Cluster]# ipvsadm –ln      #檢視ipvsadm的規則詳細資訊

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623182bkF.png"></a>

[root@lyt Cluster]# vim /etc/sysctl.conf       #編輯該檔案,打開資料包轉發功能

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962320PEMW.png"></a>

[root@lyt Cluster]# sysctl –p      #使用該指令是剛才配置生效

realserver1配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962321dTXl.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962324x5vQ.png"></a>

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm       #安裝httpd伺服器

[root@localhost Server]# cd /var/www/html/

[root@localhost html]# echo "web1"&gt;index.html       #建立網頁

[root@localhost html]# service httpd start    #啟動httpd伺服器

realserver2配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962326Dpf0.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962328ty7Q.png"></a>

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm      #安裝httpd伺服器

[root@localhost html]# echo "web2"&gt;index.html     #建立網頁

[root@localhost html]# service httpd start      #啟動httpd服務

測試:

登入之後顯示的是realserver1

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623301YKc.png"></a>

重新整理之後顯示realserver2,表明使用的是輪詢的方式

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623325WXL.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623355k8P.png"></a>

為realserver加上權重:

[root@lyt Cluster]# ipvsadm –C       #将原來的規則删除

[root@lyt Cluster]# ipvsadm -A -t 192.168.101.66:80 -s wrr        #使用權重輪詢方式wrr

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.100 -m -w 10      #-w表示權重

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.101 -m -w 5

[root@lyt Cluster]# service ipvsadm  save      #将規則儲存

[root@lyt Cluster]# service ipvsadm restart       #重新開機服務

定義的群集采用destination hashing方式:

[root@lyt Cluster]# ipvsadm -E -t 192.168.101.66:80 -s dh        #-E表示修改

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962343SUK8.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962346dz2c.png"></a>

案例二:LVS的dr模式:搭建兩台realserver伺服器,安裝web服務,在另外一台存儲伺服器上存儲要通路的網頁,當使用者通路

LB時,将存儲伺服器上的網頁挂載到realserver上。

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962349Nt4D.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623526m5O.png"></a>

[root@localhost ~]# sysctl -a | grep arp      #檢視核心參數,含有arp字元的

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962353bSoj.png"></a>

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2"&gt;&gt; /etc/sysctl.conf    

[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2"&gt;&gt; /etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1"&gt;&gt; /etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1"&gt;&gt; /etc/sysctl.conf

[root@localhost ~]# sysctl –p      #使新編輯的核心檔案生效

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623542STY.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_134996235517gh.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962359DYBg.png"></a>

[root@localhost ~]# service network restart      

[root@localhost ~]# route add -host 192.168.145.101 dev lo:0       #添加一條路由,保證資料包傳回時是通過vip位址192.168.145.101,接口lo:0

[root@localhost ~]# mkdir /mnt/cdrom      #建立挂載點

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/         #挂載CD光牒

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm        #安裝httpd服務

[root@localhost Server]# service httpd start     #啟動httpd伺服器

[root@localhost Server]# chkconfig httpd on

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962361aM9p.png"></a>

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2"&gt;&gt; /etc/sysctl.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962362fAOM.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962363H1YU.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623641eT9.png"></a>

[root@localhost ~]# service network restart

[root@localhost ~]# mkdir /mnt/cdrom        #建立挂載點

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/      #挂在CD光牒

[root@localhost Server]# service httpd start       #啟動httpd伺服器

LB---Linux主機配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962366IZds.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962367PoWr.png"></a>

[root@lyt ~]# cd /mnt/cdrom/Cluster          #切換到Cluster倉庫中

[root@lyt Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm        #安裝ipvs的管理工具ipvsadm

[root@lyt Cluster]# ipvsadm -A -t 192.168.145.101:80 -s rr       #定義群集伺服器,采用輪詢方式rr

[root@lyt Cluster]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.200 –g      #-g表示gateway,采用直連路由方式dr

[root@lyt Cluster]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.201 –g      #-g表示gateway,采用直連路由方式dr

[root@lyt Cluster]# service ipvsadm save      #儲存配置的規則

[root@lyt Cluster]# service ipvsadm start      #啟動ipvsadm

[root@lyt Cluster]# chkconfig ipvsadm on     #設定開機自動啟動

[root@lyt Cluster]# ipvsadm –ln           #檢視規則

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962370YFHI.png"></a>

配置存儲伺服器:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962375HgOu.png"></a>

[root@localhost ~]# service nfs start       #nfs服務預設已經安裝過,在此直接啟動即可

[root@localhost ~]# mkdir /public/

[root@localhost ~]# mkdir /private/

[root@localhost ~]# vim /etc/exports       #編輯共享清單exports,該檔案預設是空檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962376Yfpn.png"></a>

[root@localhost ~]# cd /public/

[root@localhost public]# vim index.html

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962377lzQE.png"></a>

[root@localhost public]# cd ..

[root@localhost /]# cd /private/

[root@localhost private]# vim index.html

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_134996237764gR.png"></a>

[root@localhost private]# exportfs –rv       #将設定共享的檔案導出

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962378SNgM.png"></a>

将共享檔案臨時挂載到realserver上:

将網頁檔案臨時挂載到realserver1上:

[root@localhost ~]# showmount -e 192.168.145.202     #測試是否具有權限檢視192.168.145.202伺服器上的共享檔案

[root@localhost ~]# mount 192.168.145.202:/public /var/www/html/       #将/public目錄挂載到預設的httpd根目錄下

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962380fhJX.png"></a>

将網頁檔案臨時挂載到realserver2上:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962379thPl.png"></a>

[root@localhost ~]# mount 192.168.145.202:/private /var/www/html/       #将/private目錄挂載到預設的httpd根目錄下

測試能否通路挂載的頁面:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962382KCXG.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623872JbM.png"></a>

将共享檔案臨時開機自動挂載到realserver上:

将網頁檔案開機自動挂載到realserver1上:

[root@localhost ~]# umount /var/www/html/     #将臨時挂載解除安裝掉

[root@localhost ~]# vim /etc/fstab      #編輯開機自動挂載檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962389xDUE.png"></a>

[root@localhost ~]# init 6      #重新開機系統

将網頁檔案開機自動挂載到realserver2上:

[root@localhost ~]# umount /var/www/html/ #将臨時挂載解除安裝掉

[root@localhost ~]# vim /etc/fstab #編輯開機自動挂載檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962390cfVH.png"></a>

[root@localhost ~]# init 6       #重新開機系統

測試能否通路到挂載的頁面

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962392ku7S.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962393UWGJ.png"></a>

連接配接自動挂載:

将網頁檔案連接配接自動挂載到realserver1上:

[root@localhost ~]# umount /var/www/html/

[root@localhost ~]# rpm -qa |grep auto      #檢視與自動挂載相關的軟體包

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623947FTb.png"></a>

[root@localhost ~]# vim /etc/auto.master       #編譯與自動挂載相關的配置檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623952hlw.png"></a>

[root@localhost ~]# cp -p /etc/auto.misc /etc/auto.nfs       #産生一個auto的主配置檔案

[root@localhost ~]# vim /etc/auto.nfs       #編輯該檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962400CwXx.png"></a>

[root@localhost ~]# service autofs restart       #重新開機autofs服務

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf     #編輯httpd主配置檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962401GWsp.png"></a>

[root@localhost ~]# service httpd restart     #重新開機httpd伺服器

将網頁檔案連接配接自動挂載到realserver2上:

[root@localhost ~]# rpm -qa |grep auto #檢視與自動挂載相關的軟體包

[root@localhost ~]# vim /etc/auto.master #編譯與自動挂載相關的配置檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962405OI8O.png"></a>

[root@localhost ~]# cp -p /etc/auto.misc /etc/auto.nfs #産生一個auto的主配置檔案

[root@localhost ~]# vim /etc/auto.nfs

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962410yVVk.png"></a>

[root@localhost ~]# service autofs restart #重新開機autofs服務

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962411wKfH.png"></a>

[root@localhost ~]# service httpd restart      #重新開機httpd伺服器

測試能否通路到挂載的頁面:

在realserver1上檢視挂載情況:

[root@localhost ~]# mount #檢視挂載的共享檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499624123CY3.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962415gvQ7.png"></a>

在realserver2上檢視挂載情況:

[root@localhost ~]# mount

<a href="http://blog.51cto.com/attachment/201210/213718379.png" target="_blank"></a>

本文轉自 liuyatao666 51CTO部落格,原文連結:http://blog.51cto.com/5503845/1021579,如需轉載請自行聯系原作者

繼續閱讀