【網絡】葉脊(Spine-Leaf)網絡拓撲下全三層網絡設計與實踐(五) - 物理服務器路由方案及配置

5. 物理服務器路由方案及配置

5.1 本節目標

  1. 理解物理機的業務ip之間的通信過程;
  2. 瞭解如何在leaf交換機上配置業務ip的靜態路由;
  3. 瞭解如何在物理機上配置業務ip及其他相關配置項;

5.2 拓撲結構

本節拓撲結構與上節相比沒有變化,如下圖:

 

5.3 物理機業務網絡地址規劃與配置

雲平臺各服務之間用於通信的ip地址稱爲業務ip地址,在spine leaf網絡中,我們爲服務器分配業務ip地址,並配置在br0接口上,本系列文章研究spine leaf網絡。下面爲四個物理機規劃業務IP地址:

主機名 業務ip地址
devopsr01n01 10.10.10.21/32
devopsr01n02 10.10.10.22/32
devopsr02n01 10.10.10.23/32
devopsr02n02 10.10.10.24/32

按照上面的規劃,給物理機配置業務ip,以devopsr01n01爲例,進行如下配置:

brctl addbr br0
ip link set br0 up
ip address add 10.10.10.21/32 dev br0

其餘物理機按例配置。

5.4 物理機業務地址路由方案與配置

5.4.1 在leaf交換機上配置路由

在leaf交換機上採用靜態路由協議,路由方案的思路如下:

  1. 對於每個物理機業務ip地址,在一對leaf上配置靜態路由;
  2. 通過檢測路由下一跳ip的可達性,確定路由條目的有效性;

本文采用的是arista交換機來進行實驗,因此提供arista交換機的配置方式,需要用到擴容模塊PingCheck,點擊查看安裝方法,擴展模塊安裝完成後,進行下面的配置:

# 在leaf01上配置devopsr01n01的路由
ip route 10.10.10.21/32 Ethernet3 169.254.0.2								# 配置devopsr01n01的靜態路由

daemon PingCheck3															# 此處因爲devopsr01n01接在e3口,所以爲了方便,這裏名稱寫PingCheck3
   exec /usr/local/bin/PingCheck 
   option CHECKINTERVAL value 1												# Ping間隔時間1s
   option CONF_FAIL value /mnt/flash/pingcheck/failed_3.conf				# Ping失敗時執行的操作,內容填“no ip route 10.10.10.21/32 Ethernet3 169.254.0.2”, 即刪除到devopsr01n01的靜態路由條目
   option CONF_RECOVER value /mnt/flash/pingcheck/recover_3.conf			# Ping恢復時執行的操作,內容填“ip route 10.10.10.21/32 Ethernet3 169.254.0.2”,即添加到devopsr01n01的靜態路由條目
   option HOLDDOWN value 1
   option HOLDUP value 1
   option IPv4 value 169.254.0.2											# Ping的目標地址,即到devopsr01n01的靜態路由的下一跳地址,也就是devopsr01n01上與leaf01互聯的網口的ip地址
   option PINGCOUNT value 2
   option PINGTIMEOUT value 2
   option SOURCE value et3													# 指定Ping的出接口,即leaf01上與devopsr01n01互聯的網口
   no shutdown																# 開始運行PingCheck

# 在leaf02上配置devopsr01n01的路由
ip route 10.10.10.21/32 Ethernet3 169.254.1.2								# 配置devopsr01n01的靜態路由

daemon PingCheck3															# 此處因爲devopsr01n01接在e3口,所以爲了方便,這裏名稱寫PingCheck3
   exec /usr/local/bin/PingCheck 
   option CHECKINTERVAL value 1												# Ping間隔時間1s
   option CONF_FAIL value /mnt/flash/pingcheck/failed_3.conf				# Ping失敗時執行的操作,內容填“no ip route 10.10.10.21/32 Ethernet3 169.254.0.2”, 即刪除到devopsr01n01的靜態路由條目
   option CONF_RECOVER value /mnt/flash/pingcheck/recover_3.conf			# Ping恢復時執行的操作,內容填“ip route 10.10.10.21/32 Ethernet3 169.254.0.2”,即添加到devopsr01n01的靜態路由條目
   option HOLDDOWN value 1
   option HOLDUP value 1
   option IPv4 value 169.254.1.2											# Ping的目標地址,即到devopsr01n01的靜態路由的下一跳地址,也就是devopsr01n01上與leaf01互聯的網口的ip地址
   option PINGCOUNT value 2
   option PINGTIMEOUT value 2
   option SOURCE value et3													# 指定Ping的出接口,即leaf01上與devopsr01n01互聯的網口
   no shutdown																# 開始運行PingCheck

按例在leaf02上配置devopsr01n02的路由,在leaf03/04上配置devopsr02n01、devopsr02n02的路由。完成配置後,讓我們來測試一下,是否達到了預期的效果:

  1. 在devopsr01n01的所有鏈路正常時,在leaf01, leaf02, spine01上觀察到devopsr01n01的路由條目:

    # 在spine01上觀察路由, 有兩條等價路由,下一跳分別是leaf01和leaf02
    spine01#sh ip route 10.10.10.21
     B E      10.10.10.21/32 [200/0] via 169.254.0.249, Ethernet1
                                     via 169.254.1.249, Ethernet2
    
    # 在leaf01上觀察路由,有一條靜態路由,可從e3下聯接口到達
    leaf01#sh ip route 10.10.10.21
     S        10.10.10.21/32 [1/0] via 169.254.0.2, Ethernet3
    
    # 在leaf02上觀察路由,有一條靜態路由,可從e3下聯接口到達
    leaf02#sh ip route 10.10.10.21
     S        10.10.10.21/32 [1/0] via 169.254.1.2, Ethernet3

     

  2. 在h11鏈路故障時(可通過關閉服務器網卡模擬),觀察在leaf01, leaf02, spine01上觀察到devopsr01n01的路由條目:

    # 在devopsr01n01上關閉eth1
    ifconfig eth1 down
    
    # 在spine上觀察路由, 發現只剩一條路徑可用,下一跳爲leaf02
    spine01#sh ip route 10.10.10.21
     B E      10.10.10.21/32 [200/0] via 169.254.1.249, Ethernet2
    
    # 在leaf01上觀察路由, 發現此時從leaf01無法從下聯接口到達目標,從而選擇從spine學到的bgp路由,經由spine到達目標
    leaf01#sh ip route 10.10.10.21
     B E      10.10.10.21/32 [200/0] via 169.254.0.250, Ethernet1
                                     via 169.254.0.254, Ethernet2
    
    # 在leaf02上觀察路由,有一條靜態路由,可從e3下聯接口到達
    leaf02#sh ip route 10.10.10.21
     S        10.10.10.21/32 [1/0] via 169.254.1.2, Ethernet3

     

  3. 請模擬在h12鏈路故障時的情況,觀察路由變化。

5.4.2 在物理機上配置路由

業務ip配置在br0上,而非物理網卡上,因此需開啓內核轉發功能:

sysctl -w net.ipv4.ip_forward=1

以devopsr01n01爲例,流量經由eth0和eth1兩個網口收發,可以達到提高帶寬,鏈路冗餘的作用,因此在服務器上的路由配置如下:

# 兩個下一跳地址分別爲物理機和對應的兩個leaf相連的網口互聯ip地址
ip route replace default src 10.10.10.21 nexthop via 169.254.0.1 nexthop via 169.254.1.1

配置完上述路由後,與在交換機上的PingCheck一樣,服務器也需要某種機制來判斷下一跳是否有效:

# 對eth0 eth1啓用鏈路檢測,當鏈路down時,使相應的路由失效,否則物理機可能將流量發往down的鏈路,從而發生網絡故障
sysctl -w net.ipv4.conf.eth0.ignore_routes_with_linkdown=1
sysctl -w net.ipv4.conf.eth1.ignore_routes_with_linkdown=1

# 配置完這一條後可做如下測試,先查看本機路由條目, 發現默認路由有兩條等價路由
root@devopsr01n01:~# ip r
default  src 10.10.10.21
	nexthop via 169.254.0.1  dev eth1 weight 1
	nexthop via 169.254.1.1  dev eth0 weight 1
169.254.1.0/30 dev eth0  proto kernel  scope link  src 169.254.1.2

# 然後關閉eth1接口
ifconfig eth1 down

# 然後再查看路由,發現eth1對應的路由條目失效
root@devopsr01n01:~# ip r
default  src 10.10.10.21
	nexthop via 169.254.0.1  dev eth1 weight 1 dead linkdown
	nexthop via 169.254.1.1  dev eth0 weight 1
169.254.1.0/30 dev eth0  proto kernel  scope link  src 169.254.1.2

(Optional)上述步驟完成後,物理機上的路由就算完成了,當然,還可以加上以下的參數,讓系統根據ip地址和端口來計算hash,作爲選擇路由的依據:

sysctl -w net.ipv4.fib_multipath_hash_policy=1

請按照上面的步驟,爲其餘幾臺物理機也完成路由配置。

5.5 測試配置結果

從devopsr01n01上ping devopsr01n02, 能夠連通,說明配置成功, 其他節點測試方法相同。

root@devopsr01n01:~# ping 10.10.10.22 -c 1
PING 10.10.10.22 (10.10.10.22) 56(84) bytes of data.
64 bytes from 10.10.10.22: icmp_seq=1 ttl=63 time=721 ms

--- 10.10.10.22 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 721.175/721.175/721.175/0.000 ms

5.6 小結

本節主要講解了在交換機和服務器上如何爲業務ip配置等價多路徑(ECMP)路由條目,以及判斷路由條目有效性的機制,這很重要,因爲這樣的機制才使得各個設備總是能選擇到正確的路由。接下來的章節,將介紹在spine leaf網絡中,虛擬機的路由機制。

 

附 :其他品牌交換機上的路由檢測機制

本節中arista交換機使用了PingCheck這個擴展模塊來實現路由檢測,以判斷路由條目的有效性,其他廠商的網絡設備大都有內置的命令可以實現這一功能,下面用一組配置範例來對比說明arista和Cisco Nexus 9K的配置。

如下配置爲本節中leaf01上檢測devopsr01n01業務ip路由有效性的一組配置

ip route 10.10.10.21/32 Ethernet3 169.254.0.2								# 配置devopsr01n01的靜態路由

daemon PingCheck3															# 此處因爲devopsr01n01接在e3口,所以爲了方便,這裏名稱寫PingCheck3
   exec /usr/local/bin/PingCheck 
   option CHECKINTERVAL value 1												# Ping間隔時間1s
   option CONF_FAIL value /mnt/flash/pingcheck/failed_3.conf				# Ping失敗時執行的操作,內容填“no ip route 10.10.10.21/32 Ethernet3 169.254.0.2”, 即刪除到devopsr01n01的靜態路由條目
   option CONF_RECOVER value /mnt/flash/pingcheck/recover_3.conf			# Ping恢復時執行的操作,內容填“ip route 10.10.10.21/32 Ethernet3 169.254.0.2”,即添加到devopsr01n01的靜態路由條目
   option HOLDDOWN value 1
   option HOLDUP value 1
   option IPv4 value 169.254.0.2											# Ping的目標地址,即到devopsr01n01的靜態路由的下一跳地址,也就是devopsr01n01上與leaf01互聯的網口的ip地址
   option PINGCOUNT value 2
   option PINGTIMEOUT value 2
   option SOURCE value et3													# 指定Ping的出接口,即leaf01上與devopsr01n01互聯的網口
   no shutdown																# 開始運行PingCheck

在Cisco Nexus 9K上,對應上面配置的功能,應該作出如下一組配置

feature sla sender															# 開啓sla功能
ip sla 3																	# 此處因爲devopsr01n01接在e1/3口,所以爲了方便,這裏名稱寫sla 3
  icmp-echo 169.254.0.2 source-interface ethernet 1/3 # Ping的目標地址,即到devopsr01n01的靜態路由的下一跳地址,也就是devopsr01n01上與leaf01互聯的網口的ip地址,以及指定Ping的出接口,即leaf01上與devopsr01n01互聯的網口
  threshold 500																# 閾值 500ms, 小於等於超時時間timeout值即可
  timeout 500																# 超時時間500ms
  frequency 1																# ping的頻率,單位秒
ip sla schedule 3 life forever start-time now								# 開始序號爲3的sla檢測,一直運行,立即開始
track 3 ip sla 3															# 配置track 3, 跟蹤sla 3的狀態
ip route 10.10.10.21 255.255.255.255 ethernet 1/3 169.254.0.2 track 3		# 配置到devopsr01n01業務ip的路由,以track 3的狀態決定改路由的有效性

 

上一節: 葉脊(Spine-Leaf)網絡拓撲下全三層網絡設計與實踐(四) - 物理服務器互聯
下一節: 葉脊(Spine-Leaf)網絡拓撲下全三層網絡設計與實踐(六) - 虛擬機路由方案及配置

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