5. 物理服務器路由方案及配置
5.1 本節目標
- 理解物理機的業務ip之間的通信過程;
- 瞭解如何在leaf交換機上配置業務ip的靜態路由;
- 瞭解如何在物理機上配置業務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交換機上採用靜態路由協議,路由方案的思路如下:
- 對於每個物理機業務ip地址,在一對leaf上配置靜態路由;
- 通過檢測路由下一跳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的路由。完成配置後,讓我們來測試一下,是否達到了預期的效果:
-
在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
-
在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
- 請模擬在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)網絡拓撲下全三層網絡設計與實踐(六) - 虛擬機路由方案及配置