绪论
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 <
4.6 启动openvswitch服务
systemctl enable openvswitch.service
systemctl restart openvswitch.service
systemctl status openvswitch.service
4.7 创建网桥,将ip转移到网桥,添加到开机启动
openvswitch的原理和常用命令
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 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
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