理解 OpenStack 高可用(HA):Neutron 分布式虚拟路由(下)

本文详细分析了OpenStack Neutron中的DVR(分布式虚拟路由)技术,探讨了DVR如何实现高可用性,包括DVR Router的namespace创建与删除、MAC地址处理、OVS flows配置、ARP表的维护以及ip rule和route操作。同时,讨论了DVR与其他服务如FWaas、VPNaas和LBaas的交互,并展望了Kilo和Liberty版本中DVR的进一步发展,如对VLAN的支持和HA解决方案。
摘要由CSDN通过智能技术生成

1. 代码分析

DVR 代码修改包括几部分:

  1. DVR Router network namespace 的创建和删除
  2. DVR Router 相关的 flows
  3. DVR Router 的 ARP 表

1.1 DVR Router 相关 network namespace 的创建和删除

1.1.1 qrouter 在计算和网络节点上的删除和创建

  1. 对于每一个 DVR Router,在每个分布了和 router 连接的网段内的虚机的计算节点上,都会有一个 qrouter 实例。两种情况下会将一个 DVR Router 部署到一个 L3 Agent 上:

    • 当一个子网 subnet 被加入到一个 DVR Router 时,DVR Router 会被分布到所有包含在该子网内的虚机的计算节点上。
    • 计算节点上的 L3 Agent 会收到一个通知,它会配置 router
      OVS Agent 会将 router 的端口 plug 到 OVS Bridge 上,并且配置 flows
  2. 当一个虚机被创建,而且虚机所在的计算节点上不存在该虚机所在 subnet 连接的 DVR Router 时。

  3. 当与 DVR Router 相关的最后一个虚机被删除时,router namespace 会被从虚机所在的计算节点上删除。

1.1.2 snat 在网络节点上的创建和删除

创建:当设置 router 的 external gateway 时

删除:当删除 router 的 external gateway 时

1.1.3 fip 在 计算节点上的创建和删除

创建:当一个浮动 IP 被分配给一个虚机的时候,如果虚机所在的计算节点上 fip namespace 不存在,则创建它

删除:(1)当计算节点上最后一个使用浮动 IP 的虚机被删除后 (2)所有虚机的浮动 IP 被删除后

1.2 DVR MAC 地址

前面提到过,分布到多个计算节点上的 qrouter 的interface 的 MAC 地址都相同。这在传统的网络中是不允许的,在 neutron 网络中某些时候也会导致一些问题。Neutron的做法是会向每个计算节点分配一个唯一的 DVR Host MAC 地址。当使用了 DVR 的 OVS Agent 启动的时候,它通过 RPC 去从 neutron server 上申请该 MAC 地址。该 MAC 地址会被保存在 DB 中,与该计算节点强绑定。比如:

MariaDB [neutron]> select * from dvr_host_macs;
+----------+-------------------+
| host     | mac_address       |
+----------+-------------------+
| network  | fa:16:3f:12:a3:38 |
| compute1 | fa:16:3f:b2:34:82 |
| compute2 | fa:16:3f:db:6f:73 |
+----------+-------------------+

当数据包离开 DVR Router 经过 br-tun 时,OVS flows 会将 DVR Router interface 的源 MAC 地址替换成该 MAC 地址。

root@compute1:/home/s1# ovs-ofctl dump-flows br-tun | grep mod_dl_src
 cookie=0x0, duration=6989.394s, table=1, n_packets=6405, n_bytes=627690, idle_age=510, priority=1,dl_vlan=1,dl_src=fa:16:3e:ec:f3:dd actions=mod_dl_src:fa:16:3f:b2:34:82,resubmit(,2)
 cookie=0x0, duration=8055.165s, table=1, n_packets=10, n_bytes=980, idle_age=4814, priority=1,dl_vlan=2,dl_src=fa:16:3e:63:3b:4c actions=mod_dl_src:fa:16:3f:b2:34:82,resubmit(,2)
 cookie=0x0, duration=8059.947s, table=1, n_packets=635, n_bytes=26950, idle_age=4843, priority=1,dl_vlan=1,dl_src=fa:16:3e:a9:da:b5 actions=mod_dl_src:fa:16:3f:b2:34:82,resubmit(,2)

而 src mac 地址分别是 qrouter 上的作为默认各网段的默认网关的 mac 地址:

s1@controller:~$ neutron port-list | grep fa:16:3e:ec:f3:dd
| f849ae46-4819-45f5-a805-5970d4e31951 |      | fa:16:3e:ec:f3:dd | {
  "subnet_id": "f8841500-b392-4053-bda1-acf419f4a86e", "ip_address": "90.1.180.1"} 
s1@controller:~$ neutron port-list | grep fa:16:3e:63:3b:4c
| 517bdba3-b117-43ce-851b-bb1d039879dc |      | fa:16:3e:63:3b:4c | {
  "subnet_id": "4ec65731-35a5-4637-a59b-a9f2932099f1", &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值