⑪ OpenStack高可用集群部署方案(train版)—修改Linuxbridge为Openvswitch

绪论

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

你可能感兴趣的:(⑪ OpenStack高可用集群部署方案(train版)—修改Linuxbridge为Openvswitch)