没有 Availability Zone 的 Neutron
首先看一下没有 AZ 时,Neutron 是怎么管理一个多机房的虚拟网络环境。
可以说是没有任何基于多机房的考虑,各个作为网络节点的主机,都有着相同的地位,网络服务(DHCP,L3)随机的由 Neutron分发至各个网络节点。这就可能出现,一个 Neutron Network 下的虚机被部署在一个机房里,而这个 Neutron Network 的 DHCP 服务被部署在另一个机房。如果这两个机场的数据网络不通,那么将导致 Neutron Network 的 DHCP 服务不可用,最直观的结果就是被部署的虚机不能获得 IP 地址分配。
Availability Zone 为 Neutron 提供的功能
有了 AZ 之后,Neutron 可以管理一个多机房的虚拟网络环境。首先可以将每个机房中看成一个 AZ,而将机房中的网络节点都配置成对应的 AZ。在创建 Neutron Network 和 Neutron Router 的时候,根据需要指定相应的 AZ。最后 Neutron 会把相应的DHCP 服务和 Neutron Router 分发到所指定的AZ 对应的机房中的网络节点上。这样,不需要额外的操作,就能确保 DHCP 服务和 Neutron L3 服务出现在所期望的网络节点上。
AZ的使用
N版neutron只支持network和router的az。
使用如下命令查询az支持的网络功能,可以看出test域支持router和Network功能。
$ neutronavailability-zone-list
+------+----------+-----------+
| name |resource | state |
+------+----------+-----------+
| test |router | available |
| test |network | available |
+------+----------+-----------+
Agent 在 OpenStack Neutron 中有相应的数据类型,即在 Database 中有对应的表,用来表示当前 Agent 的基本信息和状态。在 Neutron 引入AZ 之后,每个 Agent 中会新增一个属性 availability_zone,但是由于 AZ 只对 Neutron Network 和 Neutron Router 进行支持,所以只有 neutron-dhcp-agent 和 neutron-l3-agent 中这个属性才会有值。通过修改/etc/neutron/dhcp_agent.ini或/etc/neutron/l3_agent.ini,可以指定agent所属的域。
[AGENT]
availability_zone = zone_name
可以使用如下指令指定网络所属的域,网络创建后,会有属于zone1或zone2的dhcp-agent为网络中的虚机提供dhcp服务。
$ neutron net-create --availability-zone-hint zone1 \
--availability-zone-hint zone2 net1
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| availability_zone_hints | zone-1 |
| &n