天天看點

Lvs之NAT、DR、TUN三種模式的應用配置案例

本文系統Centos6.0

1、NAT模式;

NAT模型:位址轉換類型,主要是做位址轉換,類似于iptables的DNAT類型,它通過多目标位址轉換,來實作負載均衡;

特點和要求:

1、LVS(Director)上面需要雙網卡:DIP(内網)和VIP(外網)

2、内網的Real Server主機的IP必須和DIP在同一個網絡中,并且要求其網關都需要指向DIP的位址

3、RIP都是私有IP位址,僅用于各個節點之間的通信

4、Director位于client和Real Server之間,負載處理所有的進站、出站的通信

5、支援端口映射

6、通常應用在較大規模的應用場景中,但Director易成為整個架構的瓶頸!

相關機器資訊;

(Director Server)  LB1   eth0:192.168.244.132 (Vip)  (公網)

                                         eth1:192.168.27.128  (Dip)     (内網)

rs1                 rs1    eth0:192.168.27.130  (Rip) (内網)getway:192.168.27.128

rs2                 rs2    eth0:192.168.27.131  (Rip) (内網)getway:192.168.27.128

1

2

3

4

5

6

7

8

<code>[root@rs1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0</code>

<code>DEVICE=</code><code>"eth0"</code>

<code>BOOTPROTO=</code><code>static</code>

<code>IPADDR=</code><code>192.168</code><code>.</code><code>27.130</code>

<code>NETMASK=</code><code>255.255</code><code>.</code><code>255.0</code>

<code>GATEWAY=</code><code>192.168</code><code>.</code><code>27.128</code>

<code>NM_CONTROLLED=</code><code>"yes"</code>

<code>ONBOOT="yes</code>

拓撲如下:

<a target="_blank" href="http://blog.51cto.com/attachment/201306/222141352.jpg"></a>

首先在rs1、rs2部署httpd,并且進行測試是否OK!

9

10

<code>[root@rs1 ~]# yum install httpd -y</code>

<code>[root@rs1 ~]# echo web1 &gt; /</code><code>var</code><code>/www/html/index.html</code>

<code>[root@rs1 ~]# service httpd start</code>

<code>[root@rs2 ~]# yum install httpd -y</code>

<code>[root@rs2 ~]# echo web2 &gt; /</code><code>var</code><code>/www/html/index.html</code>

<code>[root@rs2 ~]# service httpd start</code>

<code>[root@rs1 ~]# curl http:</code><code>//127.0.0.1</code>

<code>web1</code>

<code>[root@rs1 ~]# curl http:</code><code>//192.168.27.131</code>

<code>web2</code>

現在在LB上操作;

确定本機ip_vs子產品是否加載,也就是是否支援lvs,2.4.2後都支援了;然後安裝ipvsadm 使用者操作指令

<code>[root@LB1 ~]# grep -i </code><code>'ip_vs'</code> <code>/boot/config-</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>71</code><code>.el6.i686</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/161831414.jpg"></a>

ipvsadm安裝:

<code>[root@LB1 ~]# yum install ipvsadm -y</code>

<code>echo </code><code>1</code> <code>&gt; /proc/sys/net/ipv4/ip_forward</code>

<code>ipvsadm -A -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-s rr</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.131</code> <code>-m</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.130</code> <code>-m</code>

測試頁面

<a target="_blank" href="http://blog.51cto.com/attachment/201306/173006742.jpg"></a>

頁面輪詢交替出現;說明機器輪詢提供服務;

如果使用權重輪詢的話;比如rs1提供2次,rs2提供1次,這樣來提供服務;

<code>[root@LB1 html]# ipvsadm -E -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-s wrr</code>

<code>[root@LB1 html]# ipvsadm -e -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.130</code> <code>-m -w </code><code>2</code>

<code>[root@LB1 html]# ipvsadm -e -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.131</code> <code>-m -w </code><code>1</code>

現在來測試:

<a target="_blank" href="http://blog.51cto.com/attachment/201306/173425301.jpg"></a>

2、DR模式:

特點和要求

1、各個叢集節點必須和Director在同一個實體網絡中

2、RIP位址不能為私有位址,可以實作便捷的遠端管理和監控

3、Director僅僅負責處理入站請求,響應封包則由Real Server直接發往用戶端

4、叢集節點Real Server 的網關一定不能指向DIP,而是指向外部路由

5、Director不支援端口映射

6、Director能夠支援比NAT多很多的Real Server 

原理:

DR模型:直接路由模型,每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,隻是用來做請求回複的源IP的,Director上隻需要一個網卡,然後利用别名來配置兩個IP:VIP和DIP

      Director在接受到外部主機的請求的時候轉發給Real Server的時候并不更改目标位址,隻是通過arp解析的MAC位址進行封裝然後轉給Real Server,Real Server在接受到資訊以後拆除MAC幀封裝,然後直接回複給CIP。

<a target="_blank" href="http://blog.51cto.com/attachment/201306/223227903.jpg"></a>

LB1: eth0: 192.168.182.133

    vip(eth0:0): 192.168.182.200

RS1: eth0:192.168.182.130

     lo:0(vip)  :192.168.182.200

RS2: eth0:192.168.182.129

     lo:0(vip)  192.168.182.200

通信原理:

    每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,隻是用來做請求回複的源IP的,Director上隻需要一個網卡,然後利用别名來配置兩個IP:VIP和DIP

    Director在接受到外部主機的請求的時候轉發給Real Server的時候并不更改目标位址,隻是通過arp解析的MAC位址進行封裝然後轉給Real Server,Real Server在接受到資訊以後拆除MAC幀封裝,然後直接回複給CIP。

   而此時需要關閉RS上的基于VIP的arp解析,在linux核心2.4以後,核心中都内置了這種功能,通過一些設定可以關閉其arp的功能:

      arp_ignore:定義接收到ARP請求時的響應級别      

          0:預設,隻用本地配置的有響應位址都給予響應       

          1:僅僅在目标IP是本地位址,并且是配置在請求進來的接口上的時候才給予響應(僅在請求的目标位址配置請求到達的接口上的時候,才給予響應)       

      arp_announce:定義将自己的位址向外通告時的級别       

          0:預設,表示使用配置在任何接口的任何位址向外通告       

          1:試圖僅向目标網絡通告與其網絡比對的位址       

          2:僅向與本地接口上位址比對的網絡進行通告       

       Ps:要想讓其功能生效,必須先設定相關設定,然後在配置IP位址等資訊

1、開始在RS1操作:

<code>[root@rs1 ~]# echo </code><code>2</code> <code>&gt; /proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>[root@rs1 ~]# echo </code><code>2</code> <code>&gt; /proc/sys/net/ipv4/conf/eth0/arp_announce</code>

<code>[root@rs1 ~]# echo </code><code>1</code> <code>&gt; /proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>[root@rs1 ~]# echo </code><code>1</code> <code>&gt; /proc/sys/net/ipv4/conf/eth0/arp_ignore</code>

<code>[root@rs1 ~]# service network restart</code>

<code>[root@rs1 ~]# ifconfig lo:</code><code>0</code> <code>192.168</code><code>.</code><code>182.200</code> <code>netmask </code><code>255.255</code><code>.</code><code>255.255</code> <code>broadcast </code><code>182.168</code><code>.</code><code>182.200</code>

<code>[root@rs1 ~]# route add -host </code><code>192.168</code><code>.</code><code>182.200</code> <code>dev lo:</code><code>0</code>

上面的就是定義了arp響應的級别;還有就是vip的請求資料,從rs1的本地ip進行了回複;

2、在RS2上執行上面同樣的操作

3、在LB上操作:

配置eth0網卡ip;

<code>[root@LB1 ~]# ifconfig eth0:</code><code>0</code> <code>192.168</code><code>.</code><code>182.200</code><code>/</code><code>24</code>  <code>#在eth0:</code><code>0</code><code>配置vip</code>

驗證RS的web服務

<a target="_blank" href="http://blog.51cto.com/attachment/201306/231709681.jpg"></a>

下面開始着手配置ipvs

<code>[root@LB1 ~]# ipvsadm -A -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-s rr</code>

<code>[root@LB1 ~]# ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>182.130</code> <code>-g</code>

<code>[root@LB1 ~]# ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>182.129</code> <code>-g</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232212426.jpg"></a>

測試效果;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232328328.jpg"></a>

3、TUN模式;

其實資料轉發原理和上圖是一樣的,不過這個我個人認為主要是位于不同位置(不同機房);LB是通過隧道進行了資訊傳輸,雖然增加了負載,可是因為地理位置不同的優勢,還是可以參考的一種方案;

優點:負載均衡器隻負責将請求包分發給實體伺服器,而實體伺服器将應答包直接發給使用者。是以,負載均衡器能處理很巨大的請求量,這種方式,一台負載均衡能為超過100台的實體伺服器服務,負載均衡器不再是系統的瓶頸。使用VS-TUN方式,如果你的負載均衡器擁有100M的全雙工網卡的話,就能使得整個Virtual Server能達到1G的吞吐量。

不足:但是,這種方式需要所有的伺服器支援"IP Tunneling"(IP Encapsulation)協定;

LB1: eth0: 192.168.182.132

    vip(tunl0): 192.168.182.200

RS1: eth0:192.168.27.130

     tunl0(vip)  :192.168.182.200

RS2: eth0:192.168.138.131

     tunl0(vip) :192.168.182.200

LB1操作:

<code>yum install ipvsadm -y</code>

<code>ifconfig tunl0192.</code><code>168.182</code><code>.</code><code>200</code> <code>broadcast </code><code>192.168</code><code>.</code><code>182.200</code> <code>netmask </code><code>255.255</code><code>.</code><code>255.0</code> <code>up</code>

<code>route add -host $VIP dev tunl0</code>

<code>ipvsadm -A -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-s rr</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.130</code> <code>-i</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>138.131</code> <code>-i</code>

RS1操作:

<code>ifconfig tunl0 </code><code>192.168</code><code>.</code><code>182.200</code> <code>netmask </code><code>255.255</code><code>.</code><code>255.0</code> <code>broadcast </code><code>192.168</code><code>.</code><code>182.200</code> <code>up</code>

<code>route add -host </code><code>192.168</code><code>.</code><code>182.200</code> <code>dev tunl0</code>

<code> </code><code>echo </code><code>"1"</code> <code>&gt;/proc/sys/net/ipv4/conf/tunl0/arp_ignore</code>

<code> </code><code>echo </code><code>"2"</code> <code>&gt;/proc/sys/net/ipv4/conf/tunl0/arp_announce</code>

<code> </code><code>echo </code><code>"1"</code> <code>&gt;/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code> </code><code>echo </code><code>"2"</code> <code>&gt;/proc/sys/net/ipv4/conf/all/arp_announce</code>

RS2同上:

通路vip進行測試即可;

本文轉自 西索oO 51CTO部落格,原文連結:http://blog.51cto.com/lansgg/1229421

繼續閱讀