ovs總結與常用命令
http://blog.csdn.net/tantexian/article/details/46707175
1 虛擬交換機
利用軟體的方式形成交換部件,所以也叫軟體交換機,跟傳統的物理交換機相比,虛擬交換機有很多優點:1.配置靈活,因為是軟體實現的,一臺物理伺服器上可以配置數十臺或者數百臺虛擬交換機,而且埠數目可以靈活選擇。2. 成本低廉,通過軟體的方式可輕易達到10Gbps的交換速度。
2 openVswitch設計目的
openVswitch是一種虛擬交換機。它的設計是為了解決物理交換機存在的一些侷限性:openVswitch較物理交換機而言有著更低的成本和更高的工作效率;一個虛擬交換機可以有幾十個埠來連線虛擬機器,而
3OVS工作原理
雖然是虛擬交換機,但是其工作原理與物理交換機類似。在虛擬交換機的實現中,其兩端分別連線著物理網絡卡和多塊虛擬網絡卡。,當資料包從虛擬機發出後,首先將通過虛擬機器上配置的虛擬網絡卡。虛擬網絡卡會根據一些既定的規則決定如何處理資料包,例如放行、阻隔或者修改。資料包在被網絡卡放行後將轉發至虛擬交換機,與其他虛擬交換機不同的是,提供了OpenFlow支援能力的OVS將根據自身儲存的流表對資料包進行匹配,如果匹配成功則按照相應的指令進行資料包操作,如果匹配未成功則將資料包發給控制器等待相關流表的指定和下發。當資料包需要通過物理網絡卡轉發時,它將會被髮送到與虛擬交換機相連的物理網絡卡上,進而被轉發給外部網路裝置。
4OVS主要構件
有了全域性的概念後,我們來詳細瞭解OVS的內部元件。簡單來看,OVS由這三大部分構成:
其中這三部分構件的作用分別如下:
ovsdb-sever:OVS的資料庫伺服器,用於管理ovsdb,通過與ovs-vswitchd之間的UNIXsocket機制進行通訊,來儲存虛擬交換機的配置資訊。
ovs-vswitchd:OVS的核心部件,它和上層controller通訊遵從OPENFLOW協議,它與ovsdb-server通訊使用OVSDB協議,它和核心模組通過netlink通訊。
ovs kernel module:OVS的核心模組,如果在核心的快取中找到轉發規則就轉發,否則發向使用者空間去處理。
5OVS功能實現
OVS在實現中分為使用者空間和核心空間兩個部分。其中,OVS在使用者空間程式擁有多個元件,它們主要負責用於實現資料交換和OpenFlow流表功能,是OVS的核心。同時,OVS還提供了一些工具用於交換機管理、資料庫搭建,以及和核心元件的互動。OVS的核心元件及其關聯關係如下圖5.1所示。
如圖5-1所示,OVS中最重要的元件是ovs-vswitchd,它實現了OpenFlow交換機的核心功能,並且通過netlink協議直接和OVS的核心模組進行通訊。交換機執行過程中,ovs-vswitchd還會將交換機的配置、資料流資訊及其變化儲存到資料庫ovsdb中,因為這個資料庫由ovsdb-server直接管理,所以ovs-vswitchd需要和ovsdb-server通過UNIXsocket機制進行通訊以獲得或者儲存配置資訊。資料庫ovsdb的存在,使得OVS交換機的配置能夠被持久化儲存,即便裝置被重啟後相關的OVS配置仍舊能夠存在。
ovs-vsctl元件是一個用於交換機管理的基本工具,它需要直接和ovs-vswitchd通訊,能夠支援很多管理操作,使用者可以登入到交換機部署的伺服器上通過ovs-vsctl管理OVS交換機。同時,ovs-appctl元件也是一個管理工具,通過傳送一些內部命令給ovs-vswitchd元件以改變其配置。另外,在一些情況下,使用者可能會需要自行管理執行在核心中的資料通路,那麼也可以通過呼叫ovs-dpctl驅使ovs-vswitchd在不依賴於資料庫的情況下去管理核心空間中的資料通路。
當用戶需要和ovsdb-server通訊以進行一些資料庫操作時,可以通過執行ovsdb-client元件訪問ovsdb-server,或者直接使用ovsdb-tool而不經ovsdb-server就對ovsdb資料庫進行操作。
對於支援OpenFlow的OVS而言,支援集中部署的控制器對其進行遠端管理和監控,才是它所體現出的軟體定義網路的核心。在OVS實現中,OpenFlow是用於管理交換機流表的協議。通過使用ovs-ofctl,使用者可以使用OpenFlow去連線交換機並在遠端開展監控和管理。另外,OVS還提供了sFlow協議用於資料包的取樣和監控,可以通過額外的sFlowTrend等軟體(未包含在OVS軟體包中)驅動該協議。
OVS在資料包的轉發中擁有一條基於核心模組的快速通道,這主要是依賴了netlink協議(Linux系統中使用者空間與核心空間進行資料交換的一種方式,OVS使用的是genericnetlink)。OVS在其核心空間中定義了幾組genl命令,用於get/set/add/delete相應的datapath/flow/vport以及針對特定的資料包執行一些動作。其中,datapath/flow/vport都是OVS對網路資源進行的抽象描述。
6 OVS資料流傳送流程
OVS交換機負責資料流傳送的相關流程如下。
1 OVS定義的port結構在核心態觀察到從OVS上鍊接的某塊虛擬網絡卡上有資料包發來時,將其傳遞給一個名為internal_dev_xmit()的函式,該函式會依次接收資料包。
2 OVS在核心狀態下檢視流表結構,觀察是否有快取的資訊可用於轉發這個資料包,這項工作主要是由ovs_flow_tbl_lookup()函式完成。該函式的執行需要一個key值,key值將從ovs_flow_extract()函式通過收集資料包的L2~L4層的細節資訊中得到,然後為相應的流構建一個獨一無二的key值。
(3)假設資料包是從虛擬網絡卡上發出的第一個包,那麼在OVS核心中將不會有相應的流表快取存在,那麼核心將不會知道如何處置這個資料包。這時,核心就會通過genl(generic netlink)傳送一個upcall給使用者空間。
(4)位於OVS使用者空間的ovs-vswitchd程序在接收到upcall後,將檢查資料庫以檢視資料包的目的埠是哪裡,然後通過OVS_ACTION_ATTR_OUTPUT告訴核心應該將資料包轉發到哪個埠,例如eth0。
(5)最終,OVS_PACKET_CMD_EXECUTE命令將使得核心執行使用者此前設定的動作。即核心將在do_execute_actions()函式中執行這條genl命令,並將資料包通過do_output()函式轉發給埠eth0,進而資料包將被髮出。
OVS在接收資料包時與上述流程類似,OVS會利用netdev_frame_hook()函式為每個與外部相連的設備註冊一個rx_handler。因此,一旦這些裝置在線上接收到了資料包,那麼OVS將把它轉發到使用者空間並檢查它應該發往何處及應該對其採用何種動作。例如,如果這是一個VLAN資料包,那麼VLANtag就需要首先從資料包中被去除,然後再將其轉發到正確的埠。
7常用OVS指令
一些常用的OVS指令如下所示:
sudoovs-vsctl show
sudoovs-vsctl add-br mybridge
sudoovs-vsctl del-br mybridge
sudoovs-vsctl add-port mybridge port-name
sudoovs-vsctl del-port mybridge port-name
sudoovs-vsctl list Bridge/Port/Interface/...
sudoovs-appctl fdb/show mybridge
sudoovs-ofctl show mybridge
sudoovs-ofctl dump-flows mybridge
sudoovs-ofctl add-flow mybridgedl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2,in_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2,actions=output:6
sudoovs-ofctl del-flows mybridge dl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2,in_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2
sudoovs-ofctl add-flow dp0 in_port=2,actions=output:6
#This will delete all the flow entries in the flow table
sudoovs-ofctl del-flows mybridge
8佈置OVS時的問題與解決
8.1建立一個bridge,並繫結物理網絡卡eth0,eth0上的網路無法正常連線:
ovs-vsctl add-br br0
ovs-vsctl add-port br0eth0
問題解決:一塊物理乙太網卡如果作為 OpenvSwitch bridge 的一部分,則它不能擁有 IP 地址,如果有,也會完全不起作用。可以將 IP 地址繫結至 OpenvSwitch“internal” 裝置來恢復網路訪問功能。
例如,假設eth0 IP 地址為 192.168.128.5,在執行上文問題中的命令後,可以使用如下方法來將 IP 地址繫結至br0上:
ifconfig eth0 0.0.0.0
ifconfig br0 192.168.128.5
8.2建立一個 bridge,把兩塊物理網絡卡繫結到網橋,產生了網路風暴:
ovs-vsctl add-br br0
ovs-vsctl add-port br0eth0
ovs-vsctl add-port br0eth1
問題解決:在上面的設定下,OpenvSwitch 在 eth0 上收到一個廣播包後會將其發給 eth1,然後 eth1 上的物理交換機又將這個廣播包發還給 eth0,如此往復產生網路風暴。當有多個 switch 時產生更復雜的情況。
解決方案1:
將 eth0 與 eth1 都繫結至同一個 bridge 從而獲得更大的頻寬、更高的可靠性:
ovs-vsctl add-br br0
ovs-vsctl add-bond br0bond0 eth0 eth1
解決方案2:
建立兩個bridge:
ovs-vsctl add-br br0
ovs-vsctl add-port br0eth0
ovs-vsctl add-br br1
ovs-vsctl add-port br1eth1
解決方案3:
開啟生成樹協議(spanning tree protocol, STP):
ovs-vsctl add-br br0
ovs-vsctl set bridge br0stp_enable=true
ovs-vsctl add-port br0eth0
ovs-vsctl add-port br0eth1
相關推薦
ovs總結與常用命令
http://blog.csdn.net/tantexian/article/details/46707175 1 虛擬交換機 利用軟體的方式形成交換部件,所以也叫軟體交換機,跟傳統的物理交換機相比,虛擬交換機有很多優點:1.配置靈活,因為是軟體實現的,一臺物理
composer 基本概念與常用命令總結
總結 date psr n) 依賴包 file bar tab strong 目錄 composer 基本概念與常用命令總結 基本概念 軟件安裝 linux/mac安裝
docker虛擬化安裝配置與常用命令
sta 80端口 ubuntu map 虛擬化 導出 6.5 關系 版本 一、Docker安裝配置 docker只有在centos6.5以上機器才能使用yum直接安裝,如果其他版本需要安裝centos擴展源epel。 docker官方文檔說要求Linux kernel至
lvm基本知識與常用命令
pv vg lv linux lvm lvm基礎知識: lvm是Logical Volume Manager(邏輯卷管理)的縮寫,可以理解為一種硬盤分區管理工具,有以下幾個重要的基礎術語:物理卷(Pyhsical Volume,PV):是由系統的基礎存儲設備,如/dev/sda,/d
Fedora 安裝與常用命令
org 地址 安裝 tps 下載 stage2 gpo 編輯 6.2 fedora下載地址: https://getfedora.org/ 原來裝的26,現在裝27 用的是server版網絡安裝500多M 現在都是U盤安裝了,fedora的寫優盤說明 https://f
Anaconda 的安裝與常用命令
x86 channels logs channel 安裝包 管理命令 tap ive onf Anaconda 自帶 Python 解釋器以及數據處理常用的第三方庫,可以非常方便地搭建 Python 環境。同時還自帶了 Conda 用來管理第三方庫,類似 Pip ,但是比
docker compose安裝與常用命令介紹 及使用docker-compose執行一個進銷存管理系統
使用微服務架構的應用系統一般包含若干個微服務,每個微服務一般都會部署多個例項。如果每個微服務都要手動啟停,那麼效率之低,維護量之大可想而知 docker compose 是一個用於定義和執行多容器docker應用程式的工具 安裝: 下在並安裝適應系統版本的compose
uboot基礎與常用命令
1. bootloader 與 uboot的區別 BootLoader是嵌入式裝置中用來啟動作業系統核心的一段程式。 uboot(universal bootloader)是一種可以用於多種嵌入式CPU的BootLoader程式,換言之,uboot是bootloader的一個子集。
Oracle 中 SQL Plus 設定與常用命令
顯示設定 -- 設定每行顯示的最長字元數 set linesize 120 -- 設定一頁顯示的行數 set pagesize 20 -- 設定是否顯示一頁的記錄數 set feedback o
總結docker常用命令
docker 1docker pull 映象 2docker ps -a 檢視所有容器docker image 檢視映象 3docker rm 容器id 刪除容器 docker rm 一次可以指定多個容器,如果希望批量刪除所有已經退出的容器,可以執行如下命令:docker rm -v $(docker
redis總結(四)--常用命令
說明: 本文內容來自尚矽谷 本文只是介紹了常用命令介紹,所有命令在官網上可查詢http://redisdoc.com/ 目錄 1任務9:Redis_啟動後雜項基礎知識 1.1select命令 1.2Dbsiz
windows 下 RabbitMQ 安裝與常用命令
轉載自https://www.cnblogs.com/ericli-ericli/p/5902270.html 最近學習 rabbitMQ 的配置,這裡只是做一個記錄。 注意 rabbitMQ 的版本 和 erlang 的版本的相容性。詳情見 https:/
linux安裝與常用命令
一 從認識作業系統開始 1.1 作業系統簡介 我通過以下四點介紹什麼是作業系統: 作業系統(Operation System,簡稱OS)是管理計算機硬體與軟體資源的程式,是計算機系統的核心與基石; 作業系統本質上是執行在計算機上的軟體程式 ; 為使用者提供一個與系統互動
SQL * PLUS 概述與常用命令
簡介 SQL * PLUS 是使用者與oracle進行互動的客戶端工具。在SQL*PLUS 中,使用者可以執行輸入的SQL語句、PL/SQL 語句,以及各種sql *plus命令,還可以格式化SQL,PL/SQL語句的輸出結果等。 SQL*PLUS的命令
MongoDB基礎知識與常用命令
SQL術語/概念 MongoDB術語/概念 解釋/說明 database database 資料庫 table collection 資料庫表/集合 row docu
大資料之hdfs詳解之三:put許可權剖析與常用命令
–無論是對於hdfs的讀和寫,對於使用者來說都是無感知的、透明的操作,使用者並不關心資料如何讀出來如何寫進去的,只要返回一個結果告訴使用者資料讀出來了或寫進去了,至於怎麼讀怎麼寫,使用者並不關心 補充: 讀:hdfs dfs -ls / = hdfs dfs
hadoop安裝流程總結以及常用命令
hadoop安裝流程 主要步驟 1.java環境配置 因為hadoop底層是java寫的,所以必須配置java環境 2.配置SSH免密登入 3.hadoop環境配置 hadoop-env.sh中引入java 4.hadoop元件配置資訊 HDFS配置 core-
開發環境之git:團隊協作git工作流與常用命令
此篇文章只是一篇傻瓜式的,記錄工作中比較規範且常見的一個git工作流需要用到的命令,讓你可以快速的開始工作。而不是一些長篇大論的理論知識,如果你有用過sourcetree或者其它圖形化工具,結合你正在使用的工具,敲這些命令,看圖形化工具中的變化,對比思考這些命令可能會更容易吸收。 1.基本配置 剛入職公司
極簡NPM指南與常用命令
準備 npm 全稱是 Node Package Manager,是前端開發必備的開發工具之一,也是當前世界上流行的包管理和分發工具,能夠讓開發者輕鬆的下載、安裝、上傳和管理已經安裝的外掛。 值得一提的是,在安裝 NodeJS 時會預設帶有 npm,使用 npm -v 就可以檢視當前使用的
Windows PowerShell開啟方法與常用命令
Windows PowerShell 是一種命令列外殼程式和指令碼環境,使命令列使用者和指令碼編寫者可以利用 .NET Framework 的強大功能。本文來介紹一下它的開啟方法和常用的命令啟動