【網絡】葉脊(Spine-Leaf)網絡拓撲下全三層網絡設計與實踐(七) - 負載均衡及高可用

7. 負載均衡及高可用

7.1 本節目標

  1. 理解spine leaf網絡下,服務高可用及負載均衡原理;
  2. 學習在leaf交換機和服務器上進行相關配置;

7.2 方案對比

在二層網絡中,長長採用主備的方式保證服務的高可用,而spine leaf網絡下則是採用多活的方式,克服了在全三層網絡中不能使用keepalived等HA軟件的缺陷,還且實現了負載均衡和高可用。

7.2.1 主備方式

 

如上圖所示,再二層網絡中,服務依靠keepalived選舉出master和slave節點,vip(浮動ip)始終只在master節點上存在,交換機對vip的流量也是進行二層轉發,向vip發起請求的流量都只會發送到master節點,slave節點不負載流量。當master節點不可用時,觸發keepalived重新選舉,slave被提升爲master節點,vip隨之漂移到新的master節點上,新的master節點開始接受vip的流量,實現了服務的高可用,然而在主備切換過程中,可能會出現網絡閃斷或服務短時間不可用的現象。

7.2.2 多活方式

如上圖所示,在spine leaf網絡下,服務所在的兩個節點上都配置了vip,路由器上爲vip配了兩條ECMP等價路由,下一跳分別指向服務所在的兩個節點,這樣,向vip發起請求的流量就會以負載均衡的方式發送到了兩個節點。當其中一個節點不可用時,路由器自動刪除相應的路由條目,使流量只發往健康的節點,也保證了高可用,且不會由於單一節點的故障而造成業務閃斷。

下面我們就介紹一下在spine leaf網絡下如何根據不同場景,來配置服務的多活。

7.3 多活應用場景討論

7.3.1 應用場景1 - 服務位於物理節點

要求

  1. 在devopsr01n01和devopsr01n02兩臺物理機上裝有PGPOOL;
  2. 這兩個PGPOOL以多活(而不是主備)的方式,同時對客戶端提供服務;

拓撲

方案說明

  1. PGPOOL服務暴露一個vip(virtual ip)給客戶端用於連接;
  2. 由於兩個物理節點需要以多活的方式提供服務,因此需要在兩個物理節點上都配置這個vip;
  3. 在服務所在物理節點(devopsr01n01,devopsr01n02)所接的一對leaf交換機(leaf01/02)上,配置目標爲vip靜態路由,以ECMP方式設置下一跳爲兩個PGPOOL節點;

配置

  1. 在物理節點上配置vip,用於PGPOOL服務;

    ip address add 10.10.30.21/32 dev br0  	# 設vip爲 10.10.30.21/32, 在兩個pgpool節點上都配置該ip地址, 掩碼爲32位
  2. 在leaf交換機上配置等價路由

    # 在leaf01/02上同樣配置
    ip route 10.10.30.21/32 10.10.10.21
    ip route 10.10.30.21/32 10.10.10.22
  3.   同前面兩節中,需要判斷路由有效性一樣,需要在兩個leaf交換機的PingCheck的腳本中加入下面內容

    # /mnt/flash/pingcheck/failed_3.conf
    no ip route 10.10.30.21/32 10.10.10.21
    
    # /mnt/flash/pingcheck/failed_4.conf
    no ip route 10.10.30.21/32 10.10.10.22
    
    # /mnt/flash/pingcheck/recover_3.conf
    ip route 10.10.30.21/32 10.10.10.21
    
    # /mnt/flash/pingcheck/recover_4.conf
    ip route 10.10.30.21/32 10.10.10.22

7.3.2 應用場景2 - 服務位於虛擬節點

要求

  1. 在ks1和ks2兩臺VM裝有proxy服務;
  2. 這兩個proxy以多活(而不是主備)的方式,同時對客戶端提供服務;

拓撲

方案說明

  1. proxy服務暴露一個vip(virtual ip)給客戶端用於連接;
  2. 由於兩個proxy節點需要以多活的方式提供服務,因此需要在兩個VM上都配置這個vip;
  3. 在服務所在VM(KS1,KS2)的宿主機所接的一對leaf交換機(leaf01/02)上,配置目標爲vip靜態路由,以ECMP方式設置下一跳爲兩個VM節點;
  4. 在VM的宿主機上配置到vip的路由,並根據VM的健康狀態切換vip的路由;

配置

  1. 在VM上配置proxy服務的vip, 設爲10.10.40.21

    # 在ks1/2上都配置proxy服務的vip
    ip address add 10.10.40.21/32 dev eth0
  2. 在宿主機上配置到vip的路由,由於vip在VM上, 可通過br0直接到達,因此在宿主機上將vip指向br0即可, 下一跳可以設爲VM的業務ip,以devopsr01n01爲例:

    ip route replace 10.10.40.21/32 via 10.10.20.21 dev br0
  3. 試想這樣一種情形, 虛擬節點ks2宕機, devopsr01n01需要連接proxy服務,此時ks2應當向ks1上的proxy服務發起請求,然而,當devopsr01n01查詢自己的路由表,發現proxy的vip指向了br0, 於是將請求發往了br0, 而永遠也無法到達ks1,從而發生故障,因此,在devopsr01n01物理節點上,需要根據位於本物理節點上的proxy服務所在VM(ks2)的健康狀態,來決定proxy vip的路由選擇, 當ks2健康時,將proxy vip路由指向br0, 否則,使prxoy vip使用默認路由,發往leaf交換機,由交換機爲proxy vip選擇路由, 此處使用crontab運行腳本來實現健康檢查及路由選擇,以devopsr01n01爲例,腳本如下:

    # 健康檢查及路由切換腳本 /tmp/toggle_proxy_route.sh, 每3s檢查ks1的狀態,進行相應的路由切換
    #!/bin/bash
    for ((i=1; i<=20; i++))
    do
        ping -c 1 10.10.20.21 -w 1
        if [[ $? == 0 ]];then
            ip route replace 10.10.40.21/32 via 10.10.20.21 dev br0
        else
            ip route del 10.10.40.21/32 via 10.10.20.21 dev br0
        fi
        sleep 3
    done
  4. 在devopsr01n02上,按例進行配置即可。
  5. 在leaf交換機上進行相應配置,與應用場景1相似,在交換機上添加ECMP路由,並加入路由有效性判斷即可

    # 在leaf01/02上配置
    ip route 10.10.40.21/32 10.10.20.21
    ip route 10.10.40.21/32 10.10.20.22
    
    # 加入路由有效性判斷
    # /mnt/flash/pingcheck/failed_3.conf			# 檢查進程爲proxy服務所在物理節點對應的PingCheck進程
    no ip route 10.10.40.21/32 10.10.20.21          # 此處目標地址爲proxy服務vip, 下一跳爲proxy服務所在VM的業務ip地址
    
    # /mnt/flash/pingcheck/failed_4.conf
    no ip route 10.10.40.21/32 10.10.20.22
    
    # /mnt/flash/pingcheck/recover_3.conf
    ip route 10.10.30.41/32 10.10.20.21
    
    # /mnt/flash/pingcheck/recover_4.conf
    ip route 10.10.30.41/32 10.10.20.22

     

7.4 小結

本節介紹了spine leaf網絡下,以多活的方式提供服務的原理及相關配置,並分別討論了服務位於虛擬節點和物理節點上兩種場景。

 

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

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