LVS+OSPF 架構(轉)


http://blog.51cto.com/pmghong/1399385

LVS 和 LVS+keepalived 這兩種架構在平時聽得多了,最近才接觸到另外一個架構LVS+OSPF。這個架構實際上是LVS+Keepalived 的升級版本,我們所知道LVS+Keepalived 架構是這樣子的:

wKiom1NJKMSw-GPhAADwcASdokw040.jpg

 

       隨着業務的擴展,我們可以對web服務器做水平擴展,以此來提高系統的處理能力。但是我們會發現,兩台Director間始終只有一台是處於工作狀態,而另一台處於不工作的備份狀態,即使訪問的流量再大,同時也只能由一台Director 去應對。換句話說,Director在這個架構里面沒辦法像web服務器那樣做水平擴展,實現負載均衡。那么是否有辦法讓兩台Director都處於工作的狀態呢?答案是肯定的,LVS+OSPF 架構就是用來解決這個問題的。

       LVS+OSPF架構圖如下:

wKiom1NKAJzj7bMKAAE4PO25-Xw866.jpg

 

      這個架構與LVS+keepalived 最明顯的區別在於,兩台Director都是Master 狀態,而不是Master-Backup,如此一來,兩台Director 地位就平等了。剩下的問題,就是看如何在這兩台Director 間實現負載均衡了。這里會涉及路由器領域的一個概念:等價多路徑

 

ECMP(等價多路徑)

      ECMP(Equal-CostMultipathRouting)等價多路徑,存在多條不同鏈路到達同一目的地址的網絡環境中,如果使用傳統的路由技術,發往該目的地址的數據包只能利用其中的一條鏈路,其它鏈路處於備份狀態或無效狀態,並且在動態路由環境下相互的切換需要一定時間,而等值多路徑路由協議可以在該網絡環境下同時使用多條鏈路,不僅增加了傳輸帶寬,並且可以無時延無丟包地備份失效鏈路的數據傳輸。

   ECMP最大的特點是實現了等值情況下,多路徑負載均衡和鏈路備份的目的,在靜態路由和OSPF中基本上都支持ECMP功能。

 

      例如下圖中的路徑A、路徑B、路徑C 3條路徑的COST值相同,既是等價路徑。在路由器選路的時候,便可以同時使用這3條路徑,從而實現負載均衡。

注:雖然鏈路COST值相同,但是實際情況是,各路徑的帶寬、時延和可靠性等不一樣,把Cost認可成一樣,不能很好地利用帶寬,尤其在路徑間差異大時,效果會非常不理想。這時可以使用

WCMP(Weight-CostMultipathRouting)加權多路徑,能夠非常靈活地按照比例在鏈路上傳遞流量。

wKiom1NKA9rSiD14AAESeOtCGdE361.jpg

 

       回到前面的那個問題:如何實現對多個Director 的負載均衡?相信看到這里,應該都清楚了,沒錯,就是利用OSFP的等價多路徑來實現。那么新的問題又來了:我們知道Director 是一台LINUX/Unix機器,不是路由器,那它如何跑OSPF協議?如何實現等價多路徑?

       實際上就是將調度器模擬成路由器,將多台調度器與真實的路由器組成OSPF網絡,需要做的就是為調度器安裝quagga這個軟件,並進行相關的配置即可。

 

【實驗步驟】

實驗平台 :Ubuntu12.04

路由器:使用GNS3橋接網卡模擬真實路由器

 

GNS3配置

vmnet2、vmnet3網卡配置如下:(vmware 菜單欄 編輯 -- 虛擬網絡編輯器)

wKioL1NQ_tXiNSmLAAO0dGOEDF8501.jpg

 

GNS3橋接vmware網卡,e1/0 橋接vmware的vmnet2網卡,e1/1 橋接vmware的vmnet3網卡。GNS3總共需要3個設備:兩個雲設備(用於橋接網卡)和一台路由器(模擬真實路由器)

wKioL1NQ_5Cz6hGuAAM11hK_KNo129.jpg

wKiom1NQ_7qj76xyAALKHxfReRY804.jpg

 

wKioL1NQ_5GiyzopAAMbDA_p4Dw532.jpg

wKiom1NQ_7rxXe-zAAK2xG_5isI043.jpg

 

完成后GNS3 的拓撲是這樣的:

wKioL1NUiXyT5i_kAACiJHVbZPs707.jpg

#配置真實路由器R1

R1#conf t

R1(config)#int lo1

R1(config-if)#ip addr 2.2.2.2 255.255.255.0

R1(config-if)#int e1/0

R1(config-if)#ip add 192.168.20.120 255.255.255.0

R1(config-if)#no shut

 

R1(config-if)#int e1/1

R1(config-if)#ip add 192.168.30.120 255.255.255.0

R1(config-if)#no shut

 

R1(config-if)#int e1/0

R1(config-if)#ip ospf hello-interval 1

R1(config-if)#ip ospf dead-interval 3

R1(config-if)#ip ospf network point-to-point

R1(config-if)#ip ospf priority 100

 

R1(config-if)#int e1/1

R1(config-if)#ip ospf hello-interval 1

R1(config-if)#ip ospf dead-interval 3

R1(config-if)#ip ospf network point-to-point

R1(config-if)#ip ospf priority 99

R1(config-if)#exit

R1(config)#router ospf 1

R1(config-router)#network 192.168.20.0 0.0.0.255 area 0

R1(config-router)#network 192.168.30.0 0.0.0.255 area 0

R1(config-router)#network  2.2.2.2 0.0.0.0 area 0

 

調度器上配置quagga,模擬路由器

#安裝quagga

root@node1:~# apt-get install quagga -y

 

#修改配置文件

root@node1:~# vim /etc/quagga/daemons
zebra=yes

ospfd=yes

 

root@node1:~# cp /usr/share/doc/quagga/examples/ospfd.conf.sample /etc/quagga/ospfd.conf
root@node1:~# cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf
root@node1:~# chown quagga.quagga /etc/quagga/ospfd.conf

root@node1:~# chown quagga.quagga /etc/quagga/zebra.conf

 

#啟動quagga

root@node1:~# /etc/init.d/quagga restart

 

#查看是否有相應監控端口

root@node1:~# netstat -nultp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2601 0.0.0.0:* LISTEN 1737/zebra

tcp 0 0 127.0.0.1:2604 0.0.0.0:* LISTEN 1741/ospfd  

 

node2上的安裝步驟同上

 

#嘗試遠程連接quagga、配置quagga

root@node1:~# telnet 127.0.0.1 2604
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
 
Hello, this is Quagga (version 0.99.20.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
 
 
User Access Verification
 

Password:  #默認密碼為zebra

 

#估計看到這,學過網絡的童鞋都已經很熟悉了,可以大展身手了。閑話少說,繼續配置:

node1 配置如下

ospfd> en

ospfd# configure terminal

ospfd(config)# router ospf

ospfd(config-router)# router-id 192.168.20.101

ospfd(config-router)# network 192.168.20.0/24 area 0

ospfd(config-router)# network 1.1.1.1/24 area 0

ospfd(config-router)# exit

 

ospfd(config)# interface eth0

ospfd(config-if)# ospf hello-interval 1          

ospfd(config-if)# ospf dead-interval 3

ospfd(config-if)# ip ospf network point-to-point

ospfd(config-if)# end

ospfd# wr

Configuration saved to /etc/quagga/ospfd.conf

ospfd# exit

Connection closed by foreign host.

 

node2配置如下

ospfd> en

ospfd# configure terminal

ospfd(config)# router ospf

ospfd(config-router)# router-id 192.168.30.100

ospfd(config-router)# network 192.168.30.0/24 area 0

ospfd(config-router)# network 3.3.3.3/24 area 0        

ospfd(config-router)# exit

 

ospfd(config)# interface eth0

ospfd(config-if)# ospf hello-interval 1

ospfd(config-if)# ospf dead-interval 3

ospfd(config-if)# ip ospf network point-to-point

ospfd(config-if)# end

ospfd# wr

Configuration saved to /etc/quagga/ospfd.conf

ospfd# exit

Connection closed by foreign host.

 

#在node1和node2上分別啟用一個loopback口,用於測試

root@node1:~# ifconfig lo:1 1.1.1.1 netmask 255.255.255.0

root@node2:~# ifconfig lo:1 3.3.3.3 netmask 255.255.255.0


測試

在路由器R1 上執行show ip ospf neighor 可以看到OSPF的鄰居

R1#show ip ospf neighbor

 

Neighbor ID     Pri   State           Dead Time   Address         Interface

192.168.30.100    0   FULL/  -        00:00:02    192.168.30.100  Ethernet1/1

192.168.20.101    0   FULL/  -        00:00:02    192.168.20.101  Ethernet1/0

 

在node1上面ping node2

wKiom1NUjAKDVsLHAAJS9VD9JxE595.jpg

 

wKioL1NUi9mDym0DAAG4Xzud-oc620.jpg

至此,ospf的配置完成!

 

   至於LVS的配置,基本上同LVS+Keepalived 架構,在配置的過程中,應注意的地方有以下幾點:

1、配置router_id 的時候,為了區分開,可用ip地址作為router_id ,例如:

global_defs {

  router_id 192.168.30.102

}

 

2、因為兩台調度器都是要提供服務的,因此兩台調度器應都處於Master的狀態,那么這里有3個方面要注意:

(1)首先是狀態那里,兩台調度器都要是MASTER

vrrp_instance VI_1 {

   state MASTER

   ... ...

   }

(2)其次,要以雙主的模式啟動,需要使調度器處於不同的域中。(一山不容二虎么... ...)

node1

vrrp_instance VI_1 {

   ... ...

virtual_router_id 51

   ... ...

}

 

node2

vrrp_instance VI_1 {

   ... ...

  virtual_router_id 52

   ... ...

}

 

(3)這里的優先級應一致,統一由真實路由器R1進行調度。

node1

vrrp_instance VI_1 {

   ... ...

   priority 110

   ... ...

   }

 

node2

vrrp_instance VI_1 {

   ... ...

   priority 110

   ... ...

   }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM