標籤:介面 server bit 網路 ssis 作業系統 發送資料 ack 模式
基於 VIOS 的虛擬乙太網路適配器的工作原理和配置實現
本文對 Power 系統中基於 VIOS 的虛擬乙太網路適配器(Virtual Ethernet Adapter)的工作原理、基本配置選項和配置步驟進行了講解,並介紹了兩種常用的 High Availability 的配置情境。Power System 的系統工程師可以通過本文瞭解虛擬乙太網路適配器的配置方法,軟體工程師則可以學習到虛擬乙太網路適配器的工作原理。
PowerVM 中相關概念簡介
Power System 通過 PowerVM 軟體體系實現對各種硬體資源,如 CPU,記憶體,I/O 裝置等均實現了虛擬化,其中與乙太網路適配器虛擬相關的概念包括:
LPAR:即 Logical Partation,邏輯分區,Power System 中的虛擬化是通過進行邏輯分區實現的,每個邏輯分區在建立時可以分配到 Power 伺服器的硬體資源,而後安裝作業系統和應用軟體。一個 Lpar 是應用程式執行的資源集合。
Power Hypervisor:Power 系統韌體中提供的基礎軟體,它為 Lpar 之間資源共用以及各自獨立運行提供支援,並為所有資源的虛擬化提供底層支援。
VIOS:即 Virtual I/O Server,為 I/O 裝置如 SCSI,CD 和網路介面卡的虛擬提供支援。它需要以一個 AIX Lpar 為載體運行於 Power 伺服器中,作為 I/O 無力裝置的 Server 為其它 lpar 提供虛擬化支援。
為支援乙太網路適配器的虛擬化,需要在 Power 伺服器中建立 VIOS LPAR,並在其中配置物理乙太網路適配器資源,其他的 LPAR 通過 Power Hypervisor 與 VIOS 通訊,進而實現對物理乙太網路適配器資源的共用使用。
VLAN 簡介
Power System 中使用 VIOS 實現對乙太網路適配器的虛擬依賴和遵循於 IEEE 802.1Q VLAN。IEEE 802.1Q VLAN 是一個工作在 2 層的網路地區協議,一個 VLAN 是一個二層廣播地區。只有處於同一個 VLAN 內部的伺服器可以通訊,這為不同 VLAN 之間提供了安全屏蔽。
一個 VLAN 網路中包括的網元為主機和支援 VLAN 的交換器:
VLAN 中的主機:若支援 802.1Q VLAN 則稱為 VLAN-awared 主機,通過作業系統的設定可以使從主機發送的資料包即帶有 VLAN ID;若不支援 802.1Q,稱為 VLAN-unawared 主機,其發送的資料報不帶有 VLAN ID。
VLAN 中的交換器:必須支援 VLAN,這需要對交換器中的交換連接埠進行配置,首先必須為每個連接埠配置一個 Port Virtual ID(後簡稱 PVID,其次還也可以根據網路拓撲需求為不同連接埠配置各自的附加 Virtual ID(後簡稱 VID)。這樣,交換器中將存在兩種連接埠:只擁有 PVID 的連接埠稱為 tagged 連接埠,同時擁有 PVID 和附加 VID 的連接埠稱為 untagged 連接埠。
當資料報到達交換器,交換器會檢查資料報中是否帶有 VLAN ID,如果沒有則為資料報添加 VLAN ID,其取值即為交換器接收埠的 PVID;如果資料報本身帶有 VLAN ID,則不需要修改資料報;而後,根據資料報中的目的 MAC 位址匹配尋找交換器的轉出連接埠,找到後判斷該連接埠配置的所有 VID( 包括 PVID 和附加的 VID) 中是否存在與資料報中 VLAN ID 相同的值,如果有則確定該連接埠為最終轉出連接埠,沒有則丟棄資料報。在確定了最終轉出連接埠和交換器將資料報轉寄出去之前,會判斷資料包中的 VID 是否為交換器自動添加的 PVID,是則需要去除 VID 後再轉寄,否則直接轉寄。這樣,交換器只會在擁有同樣 VID 的連接埠中轉寄資料報,保證了 VLAN 內部的通訊和 VLAN 之間通訊的安全隔離。
基於 VIOS 的虛擬乙太網路適配器的工作原理
為了支援虛擬乙太網路適配器,Power Hypervisor 實現了一個支援 IEEE 802.1Q VLAN 的虛擬乙太網路交換器 ( 後稱 Hypervisor 虛擬交換器 ) 和一套虛擬乙太網路適配器管理機制。Hypervisor 虛擬交換器通過 VLAN 來實現 LPAR 之間的通訊,它在各個 LPAR 之間虛擬出了一個或多個 VLAN,只有同一 VLAN 中的 LPAR 可以進行內部通訊。每一個 LPAR,包括 VIOS,可以建立一個或多個虛擬以太適配器,通過它們實現與 Hypervisor 虛擬交換器連接埠的串連,以及對該交換器連接埠 VLAN 的設定。
LPAR 之間通訊:通過 Hypervisor 實現。Hypervisor 虛擬交換器實現的是一個虛擬網路,LPAR 之間的通訊不需要物理乙太網路適配器的支援,每個 LPAR 的虛擬乙太網路適配器可以通過 Hypervisor 虛擬交換器直接通訊。
LPAR 與外部網路之間的通訊:需要安裝 VIOS LPAR,由 VIOS 與 Hypervisor 一起實現。在 VIOS 中需要配置連通外部網路的物理乙太網路適配器;需要建立一個或多個虛擬乙太網路適配器,用來串連 Hyperviso 虛擬交換器;需要建立一個 Shared Ethernet Adapter( 後簡稱 SEA),SEA 基於物理乙太網路適配器和虛擬以太適配器建立,用來橋接外部網路和 Hypervisor 虛擬交換器;這樣,可以實現 Client LPAR 對 VIOS 中的物理乙太網路適配器的虛擬使用,實現與外部網路的通訊。
當 Client LPAR 向發送資料報時,首先通過本地的虛擬以太適配器到達 Hypervisor 虛擬交換器,該交換器遵循 IEEE 802.1Q 進行資料報轉寄。若在 LPAR 之間的內部虛擬網中找到匹配的目的網元,虛擬交換器將資料報直接轉寄到目的 LPAR 的虛擬以太適配器。若沒有找到則說明目的網元不在 LPAR 之間的虛擬交換網路中,即該資料報是給外網的,這時虛擬交換器將轉寄資料報到 VIOS 的虛擬以太適配器,並通過 SEA 轉寄到物理乙太網路適配器,進而流向外網。
當 VIOS 從實體網路介面卡收到外網發送給 Client LPAR 的資料報時,對於 untagged 的資料報,SEA 將其轉寄到指定的 default 虛擬乙太網路適配器;對帶有其他 VLAN ID 的資料報,SEA 將其轉寄到設定了相同 VID 的虛擬乙太網路適配器;而後通過 Hypervisor 虛擬交換器流向 Client LPAR 的虛擬以太適配器。對於相關設定參數的講解請參看下一章。
圖 1 為使用 VIOS 實現用來支援 AIX LPAR 的虛擬乙太網路適配器的一個執行個體:
圖 1. 使用 VIOS 實現虛擬乙太網路適配器的執行個體
圖 1 中,Power 伺服器中建立了 4 個作業系統為 AIX 的 Client LPAR 和一個 VIOS LPAR,每一個 Client LPAR 定義了一個虛擬以太適配器,VIOS 中配置了一個 SEA 用來橋接內部虛擬網路和外部網路。
LPAR1 ent0 對應的 Hypervisor 虛擬交換連接埠為 tagged 連接埠,設定了 PVID 1 和 VID 3;LPAR2 ent0 對應的交換連接埠為 untagged 連接埠,只設定了 PVID 1;LPAR3 ent0 對應的交換連接埠為 tagged 連接埠,設定了 PVID 2 和 VID 3;LPAR4 ent0 對應的交換連接埠為 untagged 連接埠,只設定了 PVID 2;VIOS 的 ent1 對應的交換連接埠為 tagged 連接埠,設定了 PVID 1 和 VID 3;LPAR2 和 LPAR4 屬於 VLAN-unawared 主機,LPAR1 和 LPAR3 屬於 VLAN-awared 主機(AIX 中通過使用 smitty vlan 在虛擬以太適配器 ent0 上建立 ent1 並分配 VID 為 10 來實現)。外部網路的交換器串連連接埠為 tagged 連接埠,設定了 PVID 1 和 VID 3。
這種配置在網路中建立了三個 VLAN:
- VLAN1,串連的 LPAR 為 LPAR1/en0,LPAR2/en0,VIOS/en2。使用該 VLAN,LPAR1 en0 和 LPAR2 en0 除了可以實現 LPAR 之間的通訊,還可以與 VIOS 的 ent2 通訊,進而通過 SEA 和 VIOS 的 ent0 和外部網路通訊。
- VLAN2,串連的 LPAR 為 LPAR3/en0,LPAR4/en0。使用該 VLAN,LPAR4 en0 則只能通過 VLAN 2 和 LPAR3 的 en0 通訊,不能訪問外部網路。
- VLAN3:串連的 LPAR 為 LPAR1/en1,LPAR3/en1。使用該 VLAN,LPAR1 en1 和 LPAR3 en1 除了可以實現 LPAR 之間的通訊,還可以和外部乙太網路交換器中處於 VLAN 3 的主機通訊。
LPAR2 和 LPAR3 之間均不存在 VLAN,故不能直接實現內部通訊。
LPAR4 和 LPAR1/2 之間均不存在 VLAN,故不能直接實現內部通訊。
基於 VIOS 的虛擬乙太網路適配器的主要配置選項Hypervisor 虛擬交換器的配置選項
由於 Hypervisor 虛擬交換器並不需要真正的物理連接埠,交換器的虛擬連接埠和最終分配給 LPAR 的虛擬乙太網路適配器之間也並不存在物理網線來串連,Hypervisor 在實現虛擬交換器時,將交換器的虛擬連接埠直接關聯到分配給 LPAR 的虛擬乙太網路適配器上,進而通過對 LPAR 的虛擬乙太網路適配器的配置來實現對關聯的虛擬交換器連接埠的設定。
這些設定可以通過 HMC,在為 LPAR 建立虛擬乙太網路適配器時進行設定或修改,主要包括:
- VLAN ID:實現對底層 Hypervisor 虛擬交換器連接埠的 PVID 的設定,此項必須設定,交換器使用它來實現對 VLAN-unawared LPAR 的 VLAN 支援。
- IEEE 802.1Q Compatible Adapter 選項:用來設定 tagged 交換連接埠,即為虛擬交換器連接埠添加 VID,以支援 tagged 資料報的 VLAN。一般使用 untagged 連接埠的 PVID 即可滿足基本的內外網通行,只有在需要劃分多個 VLAN 的進行進階控制的時候,才需要選擇該選項進行 VID 的設定。
- Access External Network 選項:指定本適配器是否與外部網路相連,在對 VIOS LPAR 中與 SEA 關聯的且用於與外網通訊的虛擬乙太網路適配器配置時,必須開啟改選項,Client LPAR 中的虛擬乙太網路適配器不需要開啟。這樣,當 Client LPAR 發送資料報的時候,Hypervisor 若在關聯的 VLAN 中匹配不到目的 MAC 位址,則會轉寄資料報到啟動“Access External Networks”功能的虛擬乙太網路適配器。
- Trunk Priority 參數:在 VIOS LPAR 中,設定該值指定與 SEA 關聯的虛擬乙太網路適配器的 Priority,主要用於支援 SEA HA 設定,這時存在兩個 SEA,則 Priority 值越優先權越高,成為 Primary SEA。
SEA 的配置參數
SEA 類似一個二層的 Bridge,其設定通過使用“mkvdev”建立 SEA 裝置的時候完成,也可以通過“chdev”進行修改。
SEA 的屬性可以使用“lsdev”查看:
$ lsdev -dev ent4 -attr Attributevaluedescription user_settable ctl_chanent3Control Channel adapter for SEA failover True gvrpnoEnable GARP VLAN Registration Protocol (GVRP) True ha_modeautoHigh Availability Mode True jumbo_framesnoEnable Gigabit Ethernet Jumbo Frames True large_receivenoEnable receive TCP segment aggregation True largesend1Enable Hardware Transmit TCP Resegmentation True netaddr9.3.4.1Address to ping True pvid1PVID to use for the SEA device True pvid_adapterent2Default virtual adapter to use for non-VLAN-tagged packets True real_adapterent0Physical adapter associated with the SEA True thread1Thread mode enabled (1) or disabled (0) True virt_adaptersent2List of virtual adapters associated with the SEA (comma separated) True
- real_adapter:SEA 基於的物理乙太網路適配器。
- virt_adapter:SEA 基於的虛擬乙太網路收配器列表。
- pvid:SEA 的 PVID,SEA 對於從外網收到的 untagged 的資料報,會添加該 PVID 為資料報的 VLAN ID。
- pvid_adapter:預設轉寄的虛擬乙太網路適配器,SEA 對於從外網收到的 untagged 資料報,會將其轉寄到 default 虛擬乙太網路適配器。
- 用來支援 SEA Failover 的一些參數:ctl_chan 用來設定控制通道;ha_mode 用來指定 HA mode;netaddr 用來指定 SEA 將要進行 ping 測試的外網 IP。
基於 VIOS 的虛擬乙太網路適配器的基本配置步驟
本部分將實現一個使用虛擬乙太網路適配器進行網路通訊的最基本的環境:Power 伺服器中建立單一 VIOS 和多個 Client LPAR,它們都作為 VLAN-unwared LPAR 串連在由 Hypervisor 交換器提供的 PVID=1 的 VLAN 中;該環境支援 LPAR 之間和 LPAR 與外網之間的通訊。
具體步驟(主要針對與虛擬以太適配器設定相關的步驟)如下:
- 建立一個 VIOS,為其建立虛擬乙太網路適配器,設定 VLAN ID 並啟動“Access External Network”,這裡不開啟“IEEE 802.1q compatible adapter”選項,利用 PVID VLAN 實現通訊。圖 2. 為 VIOS 建立虛擬以太適配器圖 3. 為 VIOS 的虛擬以太適配器設定參數
其中:
Adapter ID 為根據隨機編號,不能與 LPAR 中以後的虛擬設備重複;
VLAN ID 為 1,用來設定 Hypervisor 虛擬交換器中將為該 LPAR 產生的與之串連的虛擬連接埠的 PVID,該 LPAR 將可以利用 VLAN1 實現通訊;
未開啟“IEEE 802.1q compatible adapter”,則沒有對 Hypervisor 虛擬交換器的對應的虛擬連接埠進行附加的 VID 設定,對於需要多個 VLAN 的網路需求可以開啟該選項並設定多個 VID;
開啟“Access external network”,說明該虛擬乙太網路適配器可以與外網串連,當 Hypervisor 虛擬交換器收到發往外網的資料報的時候,可以選擇轉寄給該適配器;
設定“Trunk priority”為 0,對於存在多個 VIOS 的 HA 的網路拓撲,Trunk 值越小表明 VIOS 的優先順序越高;這裡該 VIOS 將為 Primary。
建立虛擬以太適配器以後,查看虛擬設備,會發現 ent2:
$ lsdev – virtual name status descritption ent2 Available Virtual I/O Ethernet Adapter (l-lan)
- 在 VIOS 中建立 SEA:
察看物理以太適配器:
$ lsdev – type adapter name status descritption ent0 Available 2-Port 10/100/1000 Base-Tx PCI-X Adapter(14108902)
基於物理乙太網路適配器 ent0 和虛擬乙太網路適配器 ent2 建立 SEA:
$ mkvdev – sea ent0 – vadapter ent2 – default ent2 – defaulted 1 ent3 Available en3 en3
其中,-vdapater 指定關聯的虛擬以太適配器,-default 指定 SEA 對於 untagged 資料報的 default 轉送連接埠,-defaultid 指定 SEA 的 default PVID。這樣,當接收到 untagged 資料報時,SEA 會使用 PVID 1 作為 VLAN ID 添加到資料報,並轉寄到 ent2。
- 為每個 Client LPAR 建立虛擬乙太網路適配器,設定 VLAN ID 與 VIOS 的虛擬以太適配器的 VLAN ID 一致:圖 4. 為 Client LPAR 的虛擬以太適配器設定參數
其中的參數意義和步驟 1 中為 VIOS 建立 ent2 時完全相同,需要注意的是:
VLAN ID:必須與 VIOS 的 ent2 設定相同,這樣才能保證該 LPAR 與 VIOS 在同一個 VLAN 中。
未開啟“Access external network”,說明該虛擬乙太網路適配器不與外網串連,當 Hypervisor 虛擬交換器收到發往外網的資料報的時候,不會轉寄給該適配器;只有 VIOS 的虛擬乙太網路適配器需要開啟該選項。
基於 VIOS 的虛擬乙太網路適配器的 HA 配置
由於所有的 LPAR 均通過 VIOS 和外部網路通訊,如果 SEA 或者物理以太磁碟機在通訊中出現故障,LPAR 和外部的通訊將被暫時中斷,直到故障恢複。這樣, 1 所示的配置中存在單點故障的危險,不能滿足對故障率要求較高的使用情境。本章將介紹兩種使用 VIOS 實現的虛擬乙太網路適配器的 HA 配置。
SEA failover
SEA failover 方法在 VIOS 層面提供乙太網路的 HA 支援。首先,需要配置兩個 VIOS/SEA。其次,兩個 SEA 之間通過專門的 VLAN 實現一個控制通道,用來交換 keep-alive 或者 heartbeat 訊息,以檢測對端 SEA 的狀態以及互連情況;控制通道中的訊息無法流向外網,故不能檢測 SEA 和外網之間單純的串連故障,為此 SEA 通過周期性的 ping 檢測來監控與外網連通的情況,這需要為 SEA 配置一個可到達的外網 IP 作為 ping 的目的 IP,同時也為 SEA 上的本地介面設定一個外網 IP。同時,需要為兩個 SEA 設定 Priority,這通過設定關聯的虛擬以太適配器的“Trunk Priority”值實現,Priority 值越小優先順序越高。
以圖 5 為例,VIOS1 的 SEA 為 Primary SEA,VIOS2 的 SEA 為 Standby SEA,Primary SEA 為 Active SEA,它們與 Client LPAR 的 ent0 同時串連於 VLAN 1 中,Client LPAR 通過 Active SEA 與外網通訊。兩個 SEA 通過虛擬以太適配器 ent3 和專門的 VLAN 99 實現控制通道;同時為 SEA 和 en4 分別設定外網 IP,用於 ping 檢測。這樣無論是 Active SEA 本身出現故障與或是其與外網的串連出現故障,Standby SEA 都將檢測到,並將自己置為 Active,繼續為 Client LPAR 提供與外部的通訊。
圖 5. SEA Failover 執行個體
以圖 5 為例,SEA Failover 的配置步驟為 :
- 建立兩個 VIOS 並安裝。
- 為每個 VIOS 建立 2 個虛擬以太適配器:
ent2 設定 VLAN ID=1,即為虛擬交換器 PVID=1,VLAN 1 用於 LPAR 和外網的通訊;開啟“Access external network”功能;設定 VIOS1 的 ent2 的“trunk priority”為 1,設定 VIOS2 的 ent2 的“trunk priority”為 2。
- 為每個 VIOS 建立 SEA:
$mkvdev -sea ent0 -vadapter ent2 -default ent2 – defaulted 1 -attr ha_mode=auto ctl_chan=ent3 netaddr=9.3.4.1
如果 SEA 已經建立,可以通過 chdev 對其修改來代替 mkvdev:
$chdev -dev ent4 -attr ha_mode=auto ctl_chan=ent3
其中,ha_mode 設定 Failover 模式,ctl_chan 設定用於控制通道的虛擬乙太網路適配器 ent3,netaddr 設定周期性 ping 檢測的目的外網 IP 位址。
- 使用 cfgassist 通過 SMIT 或者 mktcpip 命令建立 SEA 本地介面 en4 並為其設定公網 IP
- 建立 Clinet LPAR,設定 VLAN ID 為 1。
Network Interface Backup
Network Interface Backup(後簡稱 NIB)是在 Client LPAR 的作業系統層面提供的 HA,由作業系統本身提供的相關功能實現,這裡以 AIX 為例進行介紹。
Client LPAR 中,AIX 使用兩個虛擬乙太網路適配器建立一個 EtherChannel,其中一個為 Primary 適配器,另一個為 Backup 適配器。在 NIB HA 模式中,EtherChannel 僅使用 Primary 適配器進行網路通訊。LPAR 通過周期性的 ping 指定的外網地址來確定虛擬以太適配器的可用性,如果某一時間檢測到 Primary 適配器不可用,將切換到 Backup 適配器。在網路通訊中同時使用多個適配器以增加頻寬的 Link Aggregation 模式不被支援。同時,Primary 和 Backup 適配器需要被設定到不同的 VLAN 中,並且分別為每個 VLAN 配置一個 VIOS。
以圖 6 中為例,Client LPAR 的虛擬以太適配器 ent0 和 ent1 分別處於 VLAN1 和 VLAN2,VIOS1 和 VIOS2 分別串連於 VLAN1 和 VLAN2。在 Client LPAR 中基於 ent0 和 ent1 建立了 NIB 模式的 EtherChannel ent2,並設定 ent0 為 Primary,ent1 為 Standby。初始時,LPAR 的 ent2 使用底層 ent0 和 VLAN1 與外網進行通訊,同時 LPAR 通過周期性的 ping 指定的外網地址來確定 ent0 和 ent1 的可用性,當 VIOS1 和外網的串連出現問題時,LPAR 的 ent2 將切換到 ent1,使用 VLAN2,VIOS2 和外網通訊。
圖 6. NIB 配置執行個體
以圖 6 為例,NIB 的配置步驟為:
- 建立兩個 VIOS 並安裝。
- 為每個 VIOS 建立 1 個虛擬以太適配器 ent2,指定 VLAN ID 分別為 1 和 2,同時都開啟“Access external network”功能。
- 為每個 VIOS 建立 SEA,分別設定 defaultid 為 1 和 2:
VIOS1: $mkvdev -sea ent0 -vadapter ent2 -default ent2 – defaultid 1 VIOS2: $mkvdev -sea ent0 -vadapter ent2 -default ent2 – defaultid 2
- 建立 Client LPAR,為 LPAR 建立兩個虛擬以太適配器,指定它們的 VLAN ID 分別為 1 和 2,安裝 LPAR。
- 在 LPAR 的 AIX 中配置 EtherChannel,通過 smitty etherchannel 實現:
圖 7. 通過 SMIT 配置 EtherChannel
該操作將會建立新的虛擬乙太網路適配器,即 ent2。
總結
SystemP 通過 VIOS 實現的乙太網路適配器虛擬化依賴於 Hypervisor 對 VLAN 的支援以及 VIOS 對物理網卡虛擬化的支援,本文前面各章對其工作原理,配置步驟和參數進行了詳細的介紹。在實際環境中,採用 HA 的情境更加常見,在本文最後部分有所介紹。讀者如果需要更深入的學習可以查看參考文獻。
本文轉自:https://www.ibm.com/developerworks/cn/aix/library/1011_hanyf_powervioseth/
【轉】Power System 中基於 VIOS 的虛擬乙太網路實現