LVS+OSPF 架構

       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

   ... ...

   }


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