9b2e472ae9
This option was deprecated since couple of releases already. In Stein we removed 'external_network_bridge' option from L3 agent's config so now it's time to remove also this one. There is also new upgrade check introduced to check and warn users if gateway_external_network_id was used in the deployment. This patch also removes method _check_router_needs_rescheduling() from neutron/db/l3_db.py module as it is not needed anymore. This patch also removes unit tests: test_update_gateway_agent_exists_supporting_network test_update_gateway_agent_exists_supporting_multiple_network test_router_update_gateway_no_eligible_l3_agent from neutron/tests/unit/extensions/test_l3.py module as those tests are not needed when there is no "gateway_external_network_id" config option anymore. Change-Id: Id01571cd42cfe9c5ce91e90159917c7d3c963878
380 lines
17 KiB
ReStructuredText
380 lines
17 KiB
ReStructuredText
.. _config-az:
|
|
|
|
==================
|
|
Availability zones
|
|
==================
|
|
|
|
An availability zone groups network nodes that run services like DHCP, L3, FW,
|
|
and others. It is defined as an agent's attribute on the network node. This
|
|
allows users to associate an availability zone with their resources so that the
|
|
resources get high availability.
|
|
|
|
|
|
Use case
|
|
--------
|
|
|
|
An availability zone is used to make network resources highly available. The
|
|
operators group the nodes that are attached to different power sources under
|
|
separate availability zones and configure scheduling for resources with high
|
|
availability so that they are scheduled on different availability zones.
|
|
|
|
|
|
Required extensions
|
|
-------------------
|
|
|
|
The core plug-in must support the ``availability_zone`` extension. The core
|
|
plug-in also must support the ``network_availability_zone`` extension to
|
|
schedule a network according to availability zones. The ``Ml2Plugin`` supports
|
|
it. The router service plug-in must support the ``router_availability_zone``
|
|
extension to schedule a router according to the availability zones. The
|
|
``L3RouterPlugin`` supports it.
|
|
|
|
.. code-block:: console
|
|
|
|
$ openstack extension list --network -c Alias -c Name
|
|
+---------------------------+---------------------------+
|
|
| Name | Alias |
|
|
+---------------------------+---------------------------+
|
|
...
|
|
| Network Availability Zone | network_availability_zone |
|
|
...
|
|
| Availability Zone | availability_zone |
|
|
...
|
|
| Router Availability Zone | router_availability_zone |
|
|
...
|
|
+---------------------------+---------------------------+
|
|
|
|
|
|
Availability zone of agents
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
The ``availability_zone`` attribute can be defined in ``dhcp-agent`` and
|
|
``l3-agent``. To define an availability zone for each agent, set the
|
|
value into ``[AGENT]`` section of ``/etc/neutron/dhcp_agent.ini`` or
|
|
``/etc/neutron/l3_agent.ini``:
|
|
|
|
.. code-block:: ini
|
|
|
|
[AGENT]
|
|
availability_zone = zone-1
|
|
|
|
To confirm the agent's availability zone:
|
|
|
|
.. code-block:: console
|
|
|
|
$ openstack network agent show 116cc128-4398-49af-a4ed-3e95494cd5fc
|
|
+---------------------+---------------------------------------------------+
|
|
| Field | Value |
|
|
+---------------------+---------------------------------------------------+
|
|
| admin_state_up | UP |
|
|
| agent_type | DHCP agent |
|
|
| alive | True |
|
|
| availability_zone | zone-1 |
|
|
| binary | neutron-dhcp-agent |
|
|
| configurations | dhcp_driver='neutron.agent.linux.dhcp.Dnsmasq', |
|
|
| | dhcp_lease_duration='86400', |
|
|
| | log_agent_heartbeats='False', networks='2', |
|
|
| | notifies_port_ready='True', ports='6', subnets='4 |
|
|
| created_at | 2016-12-14 00:25:54 |
|
|
| description | None |
|
|
| heartbeat_timestamp | 2016-12-14 06:20:24 |
|
|
| host | ankur-desktop |
|
|
| id | 116cc128-4398-49af-a4ed-3e95494cd5fc |
|
|
| started_at | 2016-12-14 00:25:54 |
|
|
| topic | dhcp_agent |
|
|
+---------------------+---------------------------------------------------+
|
|
|
|
$ openstack network agent show 9632309a-2aa4-4304-8603-c4de02c4a55f
|
|
+---------------------+-------------------------------------------------+
|
|
| Field | Value |
|
|
+---------------------+-------------------------------------------------+
|
|
| admin_state_up | UP |
|
|
| agent_type | L3 agent |
|
|
| alive | True |
|
|
| availability_zone | zone-1 |
|
|
| binary | neutron-l3-agent |
|
|
| configurations | agent_mode='legacy', ex_gw_ports='2', |
|
|
| | floating_ips='0', |
|
|
| | handle_internal_only_routers='True', |
|
|
| | interface_driver='openvswitch', interfaces='4', |
|
|
| | log_agent_heartbeats='False', routers='2' |
|
|
| created_at | 2016-12-14 00:25:58 |
|
|
| description | None |
|
|
| heartbeat_timestamp | 2016-12-14 06:20:28 |
|
|
| host | ankur-desktop |
|
|
| id | 9632309a-2aa4-4304-8603-c4de02c4a55f |
|
|
| started_at | 2016-12-14 00:25:58 |
|
|
| topic | l3_agent |
|
|
+---------------------+-------------------------------------------------+
|
|
|
|
|
|
Availability zone related attributes
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
The following attributes are added into network and router:
|
|
|
|
.. list-table::
|
|
:header-rows: 1
|
|
:widths: 25 10 10 10 50
|
|
|
|
* - Attribute name
|
|
- Access
|
|
- Required
|
|
- Input type
|
|
- Description
|
|
|
|
* - availability_zone_hints
|
|
- RW(POST only)
|
|
- No
|
|
- list of string
|
|
- availability zone candidates for the resource
|
|
|
|
* - availability_zones
|
|
- RO
|
|
- N/A
|
|
- list of string
|
|
- availability zones for the resource
|
|
|
|
Use ``availability_zone_hints`` to specify the zone in which the resource is
|
|
hosted:
|
|
|
|
.. code-block:: console
|
|
|
|
$ openstack network create --availability-zone-hint zone-1 \
|
|
--availability-zone-hint zone-2 net1
|
|
+---------------------------+--------------------------------------+
|
|
| Field | Value |
|
|
+---------------------------+--------------------------------------+
|
|
| admin_state_up | UP |
|
|
| availability_zone_hints | zone-1 |
|
|
| | zone-2 |
|
|
| availability_zones | |
|
|
| created_at | 2016-12-14T06:23:36Z |
|
|
| description | |
|
|
| headers | |
|
|
| id | ad88e059-e7fa-4cf7-8857-6731a2a3a554 |
|
|
| ipv4_address_scope | None |
|
|
| ipv6_address_scope | None |
|
|
| mtu | 1450 |
|
|
| name | net1 |
|
|
| port_security_enabled | True |
|
|
| project_id | cfd1889ac7d64ad891d4f20aef9f8d7c |
|
|
| provider:network_type | vxlan |
|
|
| provider:physical_network | None |
|
|
| provider:segmentation_id | 77 |
|
|
| revision_number | 3 |
|
|
| router:external | Internal |
|
|
| shared | False |
|
|
| status | ACTIVE |
|
|
| subnets | |
|
|
| tags | [] |
|
|
| updated_at | 2016-12-14T06:23:37Z |
|
|
+---------------------------+--------------------------------------+
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
$ openstack router create --ha --availability-zone-hint zone-1 \
|
|
--availability-zone-hint zone-2 router1
|
|
+-------------------------+--------------------------------------+
|
|
| Field | Value |
|
|
+-------------------------+--------------------------------------+
|
|
| admin_state_up | UP |
|
|
| availability_zone_hints | zone-1 |
|
|
| | zone-2 |
|
|
| availability_zones | |
|
|
| created_at | 2016-12-14T06:25:40Z |
|
|
| description | |
|
|
| distributed | False |
|
|
| external_gateway_info | null |
|
|
| flavor_id | None |
|
|
| ha | False |
|
|
| headers | |
|
|
| id | ced10262-6cfe-47c1-8847-cd64276a868c |
|
|
| name | router1 |
|
|
| project_id | cfd1889ac7d64ad891d4f20aef9f8d7c |
|
|
| revision_number | 3 |
|
|
| routes | |
|
|
| status | ACTIVE |
|
|
| tags | [] |
|
|
| updated_at | 2016-12-14T06:25:40Z |
|
|
+-------------------------+--------------------------------------+
|
|
|
|
|
|
|
|
Availability zone is selected from ``default_availability_zones`` in
|
|
``/etc/neutron/neutron.conf`` if a resource is created without
|
|
``availability_zone_hints``:
|
|
|
|
.. code-block:: ini
|
|
|
|
default_availability_zones = zone-1,zone-2
|
|
|
|
To confirm the availability zone defined by the system:
|
|
|
|
.. code-block:: console
|
|
|
|
$ openstack availability zone list
|
|
+-----------+-------------+
|
|
| Zone Name | Zone Status |
|
|
+-----------+-------------+
|
|
| zone-1 | available |
|
|
| zone-2 | available |
|
|
| zone-1 | available |
|
|
| zone-2 | available |
|
|
+-----------+-------------+
|
|
|
|
Look at the ``availability_zones`` attribute of each resource to confirm in
|
|
which zone the resource is hosted:
|
|
|
|
.. code-block:: console
|
|
|
|
$ openstack network show net1
|
|
+---------------------------+--------------------------------------+
|
|
| Field | Value |
|
|
+---------------------------+--------------------------------------+
|
|
| admin_state_up | UP |
|
|
| availability_zone_hints | zone-1 |
|
|
| | zone-2 |
|
|
| availability_zones | zone-1 |
|
|
| | zone-2 |
|
|
| created_at | 2016-12-14T06:23:36Z |
|
|
| description | |
|
|
| headers | |
|
|
| id | ad88e059-e7fa-4cf7-8857-6731a2a3a554 |
|
|
| ipv4_address_scope | None |
|
|
| ipv6_address_scope | None |
|
|
| mtu | 1450 |
|
|
| name | net1 |
|
|
| port_security_enabled | True |
|
|
| project_id | cfd1889ac7d64ad891d4f20aef9f8d7c |
|
|
| provider:network_type | vxlan |
|
|
| provider:physical_network | None |
|
|
| provider:segmentation_id | 77 |
|
|
| revision_number | 3 |
|
|
| router:external | Internal |
|
|
| shared | False |
|
|
| status | ACTIVE |
|
|
| subnets | |
|
|
| tags | [] |
|
|
| updated_at | 2016-12-14T06:23:37Z |
|
|
+---------------------------+--------------------------------------+
|
|
|
|
.. code-block:: console
|
|
|
|
$ openstack router show router1
|
|
+-------------------------+--------------------------------------+
|
|
| Field | Value |
|
|
+-------------------------+--------------------------------------+
|
|
| admin_state_up | UP |
|
|
| availability_zone_hints | zone-1 |
|
|
| | zone-2 |
|
|
| availability_zones | zone-1 |
|
|
| | zone-2 |
|
|
| created_at | 2016-12-14T06:25:40Z |
|
|
| description | |
|
|
| distributed | False |
|
|
| external_gateway_info | null |
|
|
| flavor_id | None |
|
|
| ha | False |
|
|
| headers | |
|
|
| id | ced10262-6cfe-47c1-8847-cd64276a868c |
|
|
| name | router1 |
|
|
| project_id | cfd1889ac7d64ad891d4f20aef9f8d7c |
|
|
| revision_number | 3 |
|
|
| routes | |
|
|
| status | ACTIVE |
|
|
| tags | [] |
|
|
| updated_at | 2016-12-14T06:25:40Z |
|
|
+-------------------------+--------------------------------------+
|
|
|
|
.. note::
|
|
|
|
The ``availability_zones`` attribute does not have a value until the
|
|
resource is scheduled. Once the Networking service schedules the resource
|
|
to zones according to ``availability_zone_hints``, ``availability_zones``
|
|
shows in which zone the resource is hosted practically. The
|
|
``availability_zones`` may not match ``availability_zone_hints``. For
|
|
example, even if you specify a zone with ``availability_zone_hints``, all
|
|
agents of the zone may be dead before the resource is scheduled. In
|
|
general, they should match, unless there are failures or there is no
|
|
capacity left in the zone requested.
|
|
|
|
|
|
Availability zone aware scheduler
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Network scheduler
|
|
-----------------
|
|
|
|
Set ``AZAwareWeightScheduler`` to ``network_scheduler_driver`` in
|
|
``/etc/neutron/neutron.conf`` so that the Networking service schedules a
|
|
network according to the availability zone:
|
|
|
|
.. code-block:: ini
|
|
|
|
network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler
|
|
dhcp_load_type = networks
|
|
|
|
The Networking service schedules a network to one of the agents within the
|
|
selected zone as with ``WeightScheduler``. In this case, scheduler refers to
|
|
``dhcp_load_type`` as well.
|
|
|
|
|
|
Router scheduler
|
|
----------------
|
|
|
|
Set ``AZLeastRoutersScheduler`` to ``router_scheduler_driver`` in file
|
|
``/etc/neutron/neutron.conf`` so that the Networking service schedules a router
|
|
according to the availability zone:
|
|
|
|
.. code-block:: ini
|
|
|
|
router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.AZLeastRoutersScheduler
|
|
|
|
The Networking service schedules a router to one of the agents within the
|
|
selected zone as with ``LeastRouterScheduler``.
|
|
|
|
|
|
Achieving high availability with availability zone
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Although, the Networking service provides high availability for routers and
|
|
high availability and fault tolerance for networks' DHCP services, availability
|
|
zones provide an extra layer of protection by segmenting a Networking service
|
|
deployment in isolated failure domains. By deploying HA nodes across different
|
|
availability zones, it is guaranteed that network services remain available in
|
|
face of zone-wide failures that affect the deployment.
|
|
|
|
This section explains how to get high availability with the availability zone
|
|
for L3 and DHCP. You should naturally set above configuration options for the
|
|
availability zone.
|
|
|
|
L3 high availability
|
|
--------------------
|
|
|
|
Set the following configuration options in file ``/etc/neutron/neutron.conf``
|
|
so that you get L3 high availability.
|
|
|
|
.. code-block:: ini
|
|
|
|
l3_ha = True
|
|
max_l3_agents_per_router = 3
|
|
|
|
HA routers are created on availability zones you selected when creating the
|
|
router.
|
|
|
|
DHCP high availability
|
|
----------------------
|
|
|
|
Set the following configuration options in file ``/etc/neutron/neutron.conf``
|
|
so that you get DHCP high availability.
|
|
|
|
.. code-block:: ini
|
|
|
|
dhcp_agents_per_network = 2
|
|
|
|
DHCP services are created on availability zones you selected when creating the
|
|
network.
|