您好,登錄后才能下訂單哦!
ovs-vsctl emer-reset命令需要慎用的原因是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
在重置OVS時,會用到以下命令
1、ovs-vsctl emer-reset
2、ovs-vsctl init
3、rm -rf /etc/openvswitch/*
但這個ovs-vsctl emer-reset命令會觸發一個BUG,導致無法恢復流表信息,甚至引起網絡回環。
這個BUG在ocata版本中出現,到現在的queens版本也還有,但在之前的mitaka版本卻沒有。
下面來看下示例
在ocata版本中
[root@test01 neutron]# ovs-ofctl dump-flows br-tun
NXST_FLOW reply (xid=0x4):
cookie=0x9aec1bf161d6039e, duration=59133.523s, table=0, n_packets=3, n_bytes=416, idle_age=37761, priority=1,in_port=1 actions=resubmit(,2)
cookie=0x9aec1bf161d6039e, duration=59125.488s, table=0, n_packets=2, n_bytes=433, idle_age=37761, priority=1,in_port=2 actions=resubmit(,4)
cookie=0x9aec1bf161d6039e, duration=59125.463s, table=0, n_packets=0, n_bytes=0, idle_age=59125, priority=1,in_port=3 actions=resubmit(,4)
cookie=0x9aec1bf161d6039e, duration=59133.521s, table=0, n_packets=0, n_bytes=0, idle_age=59133, priority=0 actions=drop
cookie=0x9aec1bf161d6039e, duration=59133.518s, table=2, n_packets=1, n_bytes=42, idle_age=37766, priority=1,arp,dl_dst=ff:ff:ff:ff:ff:ff actions=resubmit(,21)
cookie=0x9aec1bf161d6039e, duration=59133.515s, table=2, n_packets=2, n_bytes=374, idle_age=37761, priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)
然后執行ovs-vsctl emer-reset 命令
再看流表,發現已清空
[root@test01 neutron]# ovs-ofctl dump-flows br-tun
cookie=0x0, duration=9.061s, table=0, n_packets=0, n_bytes=0, idle_age=9, priority=0 actions=NORMAL
查看 openvswitch-agent.log,則認為OVS is Dead,但是OVS還是正常運行的
這個會引發網絡故障甚至在復雜網絡環境中影響到物理交換機所透傳的部分生產與測試VLAN相關業務,造成事故。
解決:重啟 neutron-openvswitch-agent 后,流表恢復正常。(但不一定)
再看M版
在計算節點查看 br-tun 的流表
root@test1:~# ovs-ofctl dump-flows br-tun
NXST_FLOW reply (xid=0x4):
cookie=0x8452729fc5c996cb, duration=16.012s, table=0, n_packets=0, n_bytes=0, idle_age=16, priority=1,in_port=1 actions=resubmit(,2)
cookie=0x8452729fc5c996cb, duration=12.923s, table=0, n_packets=0, n_bytes=0, idle_age=12, priority=1,in_port=4 actions=resubmit(,4)
cookie=0x8452729fc5c996cb, duration=12.230s, table=0, n_packets=0, n_bytes=0, idle_age=12, priority=1,in_port=3 actions=resubmit(,4)
cookie=0x8452729fc5c996cb, duration=16.012s, table=0, n_packets=0, n_bytes=0, idle_age=16, priority=0 actions=drop
......
執行 ovs-vsctl emer-reset
再查看流表,又恢復了
查看 openvswitch-agent.log,openvswitch-agent 認為 OVS is restarted. OVSNeutronAgent will reset bridges
同樣的操作,在M版能自動恢復流表,而在O版卻報錯,應該算是neutron-openvswitch-agent的一個bug,這是一個需要慎用的命令。
補充:openvSwitch工作原理
openvSwitch是一個高質量的、多層虛擬交換機,使用開源Apache2.0許可協議,由 Nicira Networks開發,主要實現代碼為可移植的C代碼。它的目的是讓大規模網絡自動化可以通過編程擴展,同時仍然支持標準的管理接口和協議(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。此外,它被設計位支持跨越多個物理服務器的分布式環境,類似于VMware的vNetwork分布式vswitch或Cisco Nexus 1000 V。Open vSwitch支持多種linux 虛擬化技術,包括Xen/XenServer, KVM和VirtualBox。
openvswitch是一個虛擬交換軟件,主要用于虛擬機VM環境,作為一個虛擬交換機,支持Xen/XenServer,KVM以及virtualBox多種虛擬化技術。在這種虛擬化的環境中,一個虛擬交換機主要有兩個作用:傳遞虛擬機之間的流量,以及實現虛擬機和外界網絡的通信。
內核模塊實現了多個“數據路徑”(類似于網橋),每個都可以有多個“vports”(類似于橋內的端口)。每個數據路徑也通過關聯一下流表(flow table)來設置操作,而這些流表中的流都是用戶空間在報文頭和元數據的基礎上映射的關鍵信息,一般的操作都是將數據包轉發到另一個vport。當一個數據包到達一個vport,內核模塊所做的處理是提取其流的關鍵信息并在流表中查找這些關鍵信息。當有一個匹配的流時它執行對應的操作。如果沒有匹配,它會將數據包送到用戶空間的處理隊列中(作為處理的一部分,用戶空間可能會設置一個流用于以后碰到相同類型的數據包可以在內核中執行操作)。
備注:
新建一個橋(交換機),命名為s1:
ovs-vsctl add-br s1
注意:在進行OVS設置時很容易造成虛擬交換機與物理交換機構成二層環路(比如虛擬交換機包含兩塊網卡,而這兩塊網卡都連接到物理交換機上,就是一個環路),一旦有廣播報文,比如ARP請求,就會引發廣播風暴,使網絡癱瘓。因此,應該把虛擬交換機開啟STP支持,避免廣播風暴:
ovs?vsctl set bridge 交換機名 stp_enable=true
附常用OVS操作
1.添加網橋:ovs-vsctl add-br 交換機名
2.刪除網橋:ovs-vsctl del-br 交換機名
3.添加端口:ovs-vsctl add-port 交換機名 端口名(網卡名)
4.刪除端口:ovs-vsctl del-port 交換機名 端口名(網卡名)
5.連接控制器:ovs-vsctl set-controller 交換機名 tcp:IP地址:端口號
6.斷開控制器:ovs-vsctl del-controller 交換機名
7.列出所有網橋:ovs-vsctl list-br
8.列出網橋中的所有端口:ovs-vsctl list-ports 交換機名
9.列出所有掛接到網卡的網橋:ovs-vsctl port-to-br 端口名(網卡名)
10.查看open vswitch的網絡狀態:ovs-vsctl show
11.查看 Open vSwitch 中的端口信息(交換機對應的 dpid,以及每個端口的 OpenFlow 端口編號,端口名稱,當前狀態等等):ovs-ofctl show 交換機名
12.修改dpid:ovs-vsctl set bridge 交換機名 other_config:datapath-id=新DPID
13.修改端口號:ovs-vsctl set Interface 端口名 ofport_request=新端口號
14.查看交換機中的所有 Table:ovs-ofctl dump-tables ovs-switch
15.查看交換機中的所有流表項:ovs?ofctl dump?flows ovs-switch
16.刪除編號為 100 的端口上的所有流表項:ovs-ofctl del-flows ovs-switch “in_port=100”
17.添加流表項(以“添加新的 OpenFlow 條目,修改從端口 p0 收到的數據包的源地址為 9.181.137.1”為例):
ovs-ofctl add-flow ovs-switch “priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal”
18.查看 OVS 的版本信息:ovs-appctl –version
19.查看 OVS 支持的 OpenFlow 協議的版本:ovs-ofctl –version
關于ovs-vsctl emer-reset命令需要慎用的原因是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。