緒論
openvswitch的原理和常用命令
Neutron中Linux bridge與Open vSwitch兩種plugin優劣勢對比:
目前說到虛擬交換機,通常會想到使用Open vSwitch做虛擬交換機,因為支持Open vSwitch的個人和企業都想要有一個開放的模式把他們的服務集成進OpenStack。 Open vSwitch社區做了大量的工作,希望提升Open vSwitch作為最主要虛擬交換機的地位。社區期望Open vSwitch將在軟件定義網絡(SDN)接管網絡時代到來時,提供所有可能最好的交換服務。但是,Open vSwitch的復雜性使用戶渴望更簡單的網絡解決方案,在這過程中需要Linux Bridge這樣的簡單橋接技術來支持云解決方案。
但是Open vSwitchh支持者會指出Linux Bridge 缺少可擴展性的隧道模型。Linux Bridge支持GRE隧道,但是并不支持更前沿和擴展性更好的VXLAN模型。因此有這些觀點的網絡專家們,他們會比較堅定的認為復雜的解決方案比一個簡單的解決方案要好。
當然,Linux Bridge已經發生了變化,也有助于縮小使用Open vSwitch和Linux Bridge的之間的差距,包括添加VXLAN支持隧道技術。但是在更大的網絡規模中,Linux Bridge的簡單性可能會產生更大的價值。
我們都知道,OpenStack社區官方的安裝文檔的步驟在liberty版本之前都是以OpenvSwitch為例子的。而且從OpenStack 用戶調查來看,使用 Open vSwitch的人比使用 linux bridge 多很多。
Liberty 版本之前社區官方文檔都是使用 neutron-plugin-openvswitch-agent, 但是Liberty 版本轉為使用 neutron-plugin-linuxbridge-agent。社區文檔只留了這么一句話,意思是Linuxbridge更加簡單。
“In comparison to provider networks with Open vSwitch (OVS), thisscenario relies completely on native Linux networking services which makes itthe simplest of all scenarios in this guide.”
以下是Open vSwitch與Linux bridge之間的優劣勢對比:
① Open vSwitch 目前還存在不少穩定性問題,比如:
1.Kernetlpanics 1.10
2.ovs-switchedsegfaults 1.11
3.廣播風暴
4.Datacorruption 2.01
② 于Linux bridge,OpenvSwitch有以下好處:
1.Qos配置,可以為每臺vm配置不同的速度和帶寬
2.流量監控
3.數據包分析
4.將openflow引入到ovs中,實現控制邏輯和物理交換網絡分離
③ 為什么可以使用 Linux bridge?
1.穩定性和可靠性要求:Linux bridge 有十幾年的使用歷史,非常成熟。
2.易于問題診斷 (troubleshooting)
3.社區也支持
4.還是可以使用Overlay 網絡 VxLAN 9需要 Linux 內核 3.9 版本或者以上)
④ 使用 Linux bridge 的局限性
1.Neutron DVR還不支持 Linux bridge
2.不支持 GRE
3.一些 OVS 提供但是 Neutorn 不支持的功能
⑤ 長期來看,隨著穩定性的進一步提高,Open vSwitch 會在生產環境中成為主流。
可以看出:
(1)OVS 將各種功能都原生地實現在其中,這在起始階段不可避免地帶來潛在的穩定性和可調試性問題;
(2)Linux bridge 依賴各種其他模塊來實現各種功能,而這些模塊的發布時間往往都已經很長,穩定性較高;
(3)兩者在核心功能上沒有什么差距,只是在集中管控和性能優化這一塊Open vSwitch有一些新的功能或者優化。但是,從測試結果看,兩者的性能沒有明顯差異;
總之,目前,Open vSwitch與Linux bridge都有各自的適合的場景,對于云用戶來說也提供了更好的兩種優秀的網絡解決方案,除了SDN對集中管控的需求,和更新更多的網絡特性時,Open vSwitch更加有優勢,但是在穩定性,大規模網絡部署等場景中Linux bridge 是個較好的選擇。本文來自九州云技術人員投稿,供大家參考!
之前使用的是官網提供的linuxbridge+vxlan模式;
本篇記錄要將linuxbridge+vxlan
模式改裝成openvswitch+vxlan
模式!
1. 當前集群應用分布情況
由于將網絡節點直接部署在了計算節點上,因此,只需要將compute節點上的 neutron-linuxbridge-agent改成neutron-openvswitch-agent即可;
2. 準備工作
2.1 所有安裝過linuxbridge的節點都刪除-compute01/02/03
刪除已經配置的linuxbridge網絡,可直接在dashboard上面操作;
刪除順序如下:釋放虛擬ip端口–>刪除路由–>刪除網絡;
驗證是否還有未刪除網絡,輸出為空;
[root@controller01 ~]# openstack network list
2.2 查看安裝linuxbridge的節點
[root@controller01 ~]# openstack network agent list |grep linuxbridge
| 386b5467-6e0a-416d-96cb-6ecee5ec2bac | Linux bridge agent | compute03 | None | :-) | UP | neutron-linuxbridge-agent |
| 553a76ba-996b-4840-af0e-ebee74efe852 | Linux bridge agent | compute02 | None | :-) | UP | neutron-linuxbridge-agent |
| 5a2ed9ea-1e8d-4bc2-a317-a70b8b196703 | Linux bridge agent | compute01 | None | :-) | UP | neutron-linuxbridge-agent |
2.3 關閉并卸載neutron-linuxbridge-agent
全部安裝linuxbridge的計算節點上;
systemctl disable neutron-linuxbridge-agent.service
systemctl stop neutron-linuxbridge-agent.service
yum remove -y openstack-neutron-linuxbridge
2.4 安裝openvswitch
全部計算節點上;
yum install -y openstack-neutron-openvswitch
內核配置
echo '
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
'>>/etc/sysctl.conf
[root@compute01 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
3. 全部控制節點配置修改
以controller01為例;
設置開啟route,前面已經設置過的,可不執行
openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins router
3.1 備份ml2配置及修改
[root@controller01 ~]# cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.linuxbridge}
[root@controller01 ~]# cat /etc/neutron/plugins/ml2/ml2_conf.ini
[DEFAULT]
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = openvswitch,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_vxlan]
vni_ranges = 1:1000
[securitygroup]
enable_ipset = true
拷貝到其他控制節點
scp /etc/neutron/plugins/ml2/ml2_conf.ini controller02:/etc/neutron/plugins/ml2/
scp /etc/neutron/plugins/ml2/ml2_conf.ini controller03:/etc/neutron/plugins/ml2/
3.2 全部控制節點重啟服務
systemctl restart neutron-server.service
systemctl status neutron-server.service
4. 全部計算節點配置修改
以compute01為例;全部計算節點執行
4.1 備份文件
cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.linuxbridge}
cp /etc/neutron/l3_agent.ini{,.linuxbridge}
cp /etc/neutron/dhcp_agent.ini{,.linuxbridge}
cp /etc/neutron/plugins/ml2/openvswitch_agent.ini{,.bak}
4.2 修改ml2_conf.ini
[root@compute01 ~]# cat /etc/neutron/plugins/ml2/ml2_conf.ini
[DEFAULT]
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = openvswitch,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_vxlan]
vni_ranges = 1:1000
[securitygroup]
enable_ipset = true
拷貝文件到其他計算節點
scp /etc/neutron/plugins/ml2/ml2_conf.ini controller02:/etc/neutron/plugins/ml2/
scp /etc/neutron/plugins/ml2/ml2_conf.ini controller03:/etc/neutron/plugins/ml2/
4.3 l3_agent.ini
[root@compute01 ~]# cat /etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
external_network_bridge = br-ex
拷貝文件到其他計算節點
scp /etc/neutron/l3_agent.ini controller02:/etc/neutron/
scp /etc/neutron/l3_agent.ini controller03:/etc/neutron/
4.4 修改dhcp_agent.ini
[root@compute01 ~]# cat /etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
拷貝文件到其他計算節點
scp /etc/neutron/dhcp_agent.ini controller02:/etc/neutron/
scp /etc/neutron/dhcp_agent.ini controller03:/etc/neutron/
4.5 修改openvswitch_agent.ini
local_ip
修改為當前計算節點的主機ip
[root@compute01 ~]# cat >/etc/neutron/plugins/ml2/openvswitch_agent.ini <<EOF
[ovs]
integration_bridge = br-int
tunnel_bridge = br-tun
local_ip = 10.15.253.162
#bridge_mappings = br-ex
#bridge_mappings = provider:br-ex
bridge_mappings =
[agent]
tunnel_types = vxlan,gre
l2_population = true
arp_responder = true
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
EOF
4.6 啟動openvswitch服務
systemctl enable openvswitch.service
systemctl restart openvswitch.service
systemctl status openvswitch.service
4.7 創建網橋,將ip轉移到網橋,添加到開機啟動
ip地址修改為當前節點;以compute01為例;
[root@compute01 ~]# echo '#
ovs-vsctl add-br br-ex
ovs-vsctl add-port br-ex ens192
ovs-vsctl show
ifconfig ens192 0.0.0.0
ifconfig br-ex 10.15.253.162/12
route add default gw 10.0.0.1 #可選,添加默認路由
#'>>/etc/rc.d/rc.local
創建并驗證
[root@compute01 ~]# chmod +x /etc/rc.d/rc.local; tail -n 8 /etc/rc.d/rc.local |bash
098ad342-1b96-4a8b-8217-9f048c47ad52
Bridge br-ex
Port br-ex
Interface br-ex
type: internal
Port "ens192"
Interface "ens192"
ovs_version: "2.12.0"
[root@compute01 ~]# ifconfig br-ex
br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.15.253.162 netmask 255.240.0.0 broadcast 10.15.255.255
inet6 fe80::250:56ff:fe82:63f3 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:82:63:f3 txqueuelen 1000 (Ethernet)
RX packets 4049 bytes 2132288 (2.0 MiB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 3528 bytes 869196 (848.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.8 關閉網卡的開機自啟,修改以下項
全部計算節點;關閉的目的是以保證OVS創建的網卡可以安全使用
sed -i 's#ONBOOT=yes#ONBOOT=no#g' /etc/sysconfig/network-scripts/ifcfg-ens192
4.9 全部計算節點重啟服務
systemctl restart neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service neutron-openvswitch-agent.service
systemctl status neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service neutron-openvswitch-agent.service
5. 控制節點驗證
[root@controller01 ~]# openstack network agent list
在控制節點上刪除去除的linuxbridge服務;刪除對應的ID即可
openstack network agent delete 386b5467-6e0a-416d-96cb-6ecee5ec2bac
openstack network agent delete 553a76ba-996b-4840-af0e-ebee74efe852
openstack network agent delete 5a2ed9ea-1e8d-4bc2-a317-a70b8b196703