このセクションでは、エージェント管理 API 拡張 (別名 agent) とスケジューラー API 拡張 (別名 agent_scheduler) を使って DHCP エージェントのスケーラビリティーと HA (高可用性) を行う方法を説明します。
注釈
これらの API 拡張が有効になっているかを確認するには neutron ext-list コマンドを使用します。出力に agent
と agent_scheduler
が含まれていることを確認します。
$ openstack extension list --network -c Name -c Alias
+-------------------------------------------------------------+---------------------------+
| Name | Alias |
+-------------------------------------------------------------+---------------------------+
| Default Subnetpools | default-subnetpools |
| Network IP Availability | network-ip-availability |
| Network Availability Zone | network_availability_zone |
| Auto Allocated Topology Services | auto-allocated-topology |
| Neutron L3 Configurable external gateway mode | ext-gw-mode |
| Port Binding | binding |
| Neutron Metering | metering |
| agent | agent |
| Subnet Allocation | subnet_allocation |
| L3 Agent Scheduler | l3_agent_scheduler |
| Tag support | tag |
| Neutron external network | external-net |
| Neutron Service Flavors | flavors |
| Network MTU | net-mtu |
| Availability Zone | availability_zone |
| Quota management support | quotas |
| HA Router extension | l3-ha |
| Provider Network | provider |
| Multi Provider Network | multi-provider |
| Address scope | address-scope |
| Neutron Extra Route | extraroute |
| Subnet service types | subnet-service-types |
| Resource timestamps | standard-attr-timestamp |
| Neutron Service Type Management | service-type |
| Router Flavor Extension | l3-flavors |
| Tag support for resources: subnet, subnetpool, port, router | tag-ext |
| Neutron Extra DHCP opts | extra_dhcp_opt |
| Resource revision numbers | standard-attr-revisions |
| Pagination support | pagination |
| Sorting support | sorting |
| security-group | security-group |
| DHCP Agent Scheduler | dhcp_agent_scheduler |
| Router Availability Zone | router_availability_zone |
| RBAC Policies | rbac-policies |
| standard-attr-description | standard-attr-description |
| Neutron L3 Router | router |
| Allowed Address Pairs | allowed-address-pairs |
| project_id field enabled | project-id |
| Distributed Virtual Router | dvr |
+-------------------------------------------------------------+---------------------------+
この構成では 3 つのホストがあります。
ホスト | 説明 |
---|---|
OpenStack コントローラーホスト - controlnode | VM をデプロイするのに必要な Networking, Identity, Compute サービスが動作します。このノードにはネットワークインターフェースが 少なくとも 1 つ必要で、管理ネットワークに接続します。 nova-network は Neutron で置き換えられるので、このノードで nova-network は動作させないでください。 |
HostA | nova-compute と Neutron L2 エージェント、 DHCP エージェントが動作します。 |
HostB | HostA と同じ。 |
controlnode: neutron サーバー
neutron 設定ファイル /etc/neutron/neutron.conf
:
[DEFAULT]
core_plugin = linuxbridge
rabbit_host = controlnode
allow_overlapping_ips = True
host = controlnode
agent_down_time = 5
dhcp_agents_per_network = 1
注釈
上記の設定では、デモ用に dhcp_agents_per_network = 1
を使用しています。通常の環境では、 dhcp_agents_per_network
をお使いの環境の DHCP エージェント数に合うように複数に設定することをお薦めします。 デフォルトで DHCP の高可用性を有効にする を参照してください。
プラグイン設定ファイル /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini
を更新します。
[vlans]
tenant_network_type = vlan
network_vlan_ranges = physnet1:1000:2999
[database]
connection = mysql://root:root@127.0.0.1:3306/neutron_linux_bridge
retry_interval = 2
[linux_bridge]
physical_interface_mappings = physnet1:eth0
HostA、HostB: L2 エージェント
neutron 設定ファイル /etc/neutron/neutron.conf
:
[DEFAULT]
rabbit_host = controlnode
rabbit_password = openstack
# host = HostB on hostb
host = HostA
プラグイン設定ファイル /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini
を更新します。
[vlans]
tenant_network_type = vlan
network_vlan_ranges = physnet1:1000:2999
[database]
connection = mysql://root:root@127.0.0.1:3306/neutron_linux_bridge
retry_interval = 2
[linux_bridge]
physical_interface_mappings = physnet1:eth0
nova 設定ファイル /etc/nova/nova.conf
を更新します。
[DEFAULT]
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
[neutron]
admin_username=neutron
admin_password=servicepassword
admin_auth_url=http://controlnode:35357/v2.0/
auth_strategy=keystone
admin_tenant_name=servicetenant
url=http://203.0.113.10:9696/
HostA、HostB: DHCP エージェント
DHCP 設定ファイル /etc/neutron/dhcp_agent.ini
を更新します。
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
エージェント管理およびスケジューラー拡張機能を使用するには管理ロールが必要です。以下のコマンドは管理ロールを持つプロジェクトで実行してください。
以下を試すには、VM と neutron ネットワークが必要です。
$ openstack server list
+--------------------------------------+-----------+--------+----------------+------------+
| ID | Name | Status | Networks | Image Name |
+--------------------------------------+-----------+--------+----------------+------------+
| c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=192.0.2.3 | cirros |
| 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=192.0.2.4 | ubuntu |
| c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=192.0.2.5 | centos |
+--------------------------------------+-----------+--------+----------------+------------+
$ openstack network list
+--------------------------------------+------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+------+--------------------------------------+
| 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 |
+--------------------------------------+------+--------------------------------------+
全エージェントを一覧表示します。
$ openstack network agent list
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| 22467163-01ea-4231-ba45-3bd316f425e6 | Linux bridge agent | HostA | None | True | UP | neutron-metering-agent |
| 2444c54d-0d28-460c-ab0f-cd1e6b5d3c7b | DHCP agent | HostA | None | True | UP | neutron-openvswitch-agent |
| 3066d20c-9f8f-440c-ae7c-a40ffb4256b6 | Linux bridge agent | HostB | nova | True | UP | neutron-l3-agent |
| 55569f4e-6f31-41a6-be9d-526efce1f7fe | DHCP agent | HostB | nova | True | UP | neutron-l3-agent |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
これらの拡張機能に対応した全エージェントは、開始時に neutron サーバーに自身を登録します。
この出力では 4 つのエージェントの情報が表示されています。 neutron.conf
ファイルの agent_down_time
オプションで定義された時間内にエージェントが自分の状態を報告した場合に、 alive
フィールドに :-)
が表示されます。そうでない場合 alive
が xxx
になります。
特定のネットワークを扱っている DHCP エージェントの一覧を表示します。
$ neutron dhcp-agent-list-hosting-net net1
+--------------------------------------+-------+----------------+-------+
| id | host | admin_state_up | alive |
+--------------------------------------+-------+----------------+-------+
| a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True | :-) |
+--------------------------------------+-------+----------------+-------+
指定した DHCP エージェントが扱っているネットワークの一覧を表示します。
このコマンドは、指定した DHCP エージェントが管理しているネットワーク一覧を表示します。
$ neutron net-list-on-dhcp-agent a0c1c21c-d4f4-4577-9ec7-908f2d48622d
+--------------------------------------+------+---------------------------------------------------+
| id | name | subnets |
+--------------------------------------+------+---------------------------------------------------+
| 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 192.0.2.0/24 |
+--------------------------------------+------+---------------------------------------------------+
エージェントの詳細を表示します。
neutron agent-show コマンドは、指定したエージェントの詳細を表示します。
$ openstack network agent show 22467163-01ea-4231-ba45-3bd316f425e6
+---------------------+-------------------------------------------------------------------------+
| Field | Value |
+---------------------+-------------------------------------------------------------------------+
| admin_state_up | UP |
| agent_type | Metering agent |
| alive | False |
| availability_zone | None |
| binary | neutron-metering-agent |
| configurations | measure_interval='30', metering_driver='neutron.services.metering.drive |
| | rs.noop.noop_driver.NoopMeteringDriver', report_interval='300' |
| created_at | 2016-10-08 15:17:14 |
| description | None |
| heartbeat_timestamp | 2016-10-24 13:53:35 |
| host | HostA |
| id | 22467163-01ea-4231-ba45-3bd316f425e6 |
| started_at | 2016-10-08 15:17:14 |
| topic | dhcp_agent |
+---------------------+-------------------------------------------------------------------------+
この出力で、 heartbeat_timestamp
は neutron サーバーにおける時刻です。この拡張機能を正しく動作させるためには、すべてのエージェントが neutron サーバーに時刻が同期できている必要は特にありません。 configurations
には、エージェントの静的な設定や実行時のデータが入ります。このエージェントは DHCP エージェントで、ネットワークを 1 つ、サブネットを 1 つ、ポートを 3 つ扱っています。
別の種類のエージェントでは別の詳細が表示されます。以下は Linux ブリッジエージェントの情報を表示したものです。
$ openstack network agent show 22467163-01ea-4231-ba45-3bd316f425e6
+---------------------+-------------------------------------------------------------------------+
| Field | Value |
+---------------------+-------------------------------------------------------------------------+
| admin_state_up | UP |
| agent_type | Metering agent |
| alive | False |
| availability_zone | None |
| binary | neutron-linuxbridge-agent |
| configurations | measure_interval='30', metering_driver='neutron.services.metering.drive |
| | rs.noop.noop_driver.NoopMeteringDriver', report_interval='300' |
| created_at | 2016-10-08 15:17:14 |
| description | None |
| heartbeat_timestamp | 2016-10-24 13:53:35 |
| host | HostB |
| id | 22467163-01ea-4231-ba45-3bd316f425e6 |
| started_at | 2016-10-08 15:17:14 |
| topic | dhcp_agent |
+---------------------+-------------------------------------------------------------------------+
出力には bridge-mapping
とこの L2 エージェント上の仮想ネットワークデバイス数が表示されています。
1 つのネットワークを複数の DHCP エージェントに割り当てることもできますし、 1 つの DHCP エージェントで複数のネットワークを担当することもできます。ネットワークを DHCP エージェントに追加したり、DHCP エージェントから削除したりできます。
デフォルトのスケジューリング。
ネットワークにポートを 1 つ作成すると、そのネットワークは稼働中の DHCP エージェントに割り当てられます。複数の稼働中のエージェントがある場合は、 1 つがランダムに選択されます。 nova-scheduler と同様、もっと洗練されたスケジューリングアルゴリズムを設計することもできるでしょう。
$ neutron net-create net2
$ neutron subnet-create net2 198.51.100.0/24 --name subnet2
$ neutron port-create net2
$ openstack network agent list --agent-type dhcp --host qiaomin-free
+--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
| e838ef5c-75b1-4b12-84da-7bdbd62f1040 | DHCP agent | HostA | nova | True | UP | neutron-dhcp-agent |
+--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
ネットワークは HostA の DHCP エージェントに割り当てられています。 dnsmasq コマンドにより動作を検証する場合、そのネットワークにサブネットを作成しなければいけません。 DHCP エージェントは DHCP が有効な場合にのみ dnsmasq サービスを開始するからです。
ネットワークを指定した DHCP エージェントに割り当てます。
ネットワークを別の DHCP エージェントに追加するには、以下のコマンドを実行します。
$ neutron dhcp-agent-network-add f28aa126-6edb-4ea5-a81e-8850876bc0a8 net2
Added network net2 to dhcp agent
$ openstack network agent list --agent-type dhcp --host qiaomin-free
+--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
| e838ef5c-75b1-4b12-84da-7bdbd62f1040 | DHCP agent | HostA | nova | True | UP | neutron-dhcp-agent |
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | nova | True | UP | neutron-dhcp-agent |
+--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
両方の DHCP エージェントが net2
ネットワークを担当しています。
ネットワークを指定した DHCP エージェントから削除します。
このコマンドは上記のコマンドの対となるコマンドです。 HostA の DHCP から net2
を削除します。
$ neutron dhcp-agent-network-remove a0c1c21c-d4f4-4577-9ec7-908f2d48622d \
net2
Removed network net2 to dhcp agent
$ neutron dhcp-agent-list-hosting-net net2
+--------------------------------------+-------+----------------+-------+
| id | host | admin_state_up | alive |
+--------------------------------------+-------+----------------+-------+
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True | :-) |
+--------------------------------------+-------+----------------+-------+
HostB の DHCP エージェントだけが net2
ネットワークを担当していることが分かります。
net2
に VM を起動して、両方の DHCP エージェントに net2
を担当させます。これらのエージェントを順番に故障させて、 エージェントが故障した場合でも VM が所望の IP アドレスを取得できることを確認します。
VM を net2
上に起動します。
$ openstack network list
+--------------------------------------+------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+------+--------------------------------------+
| 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 |
| 9b96b14f-71b8-4918-90aa-c5d705606b1a | net2 | 6979b71a-0ae8-448c-aa87-65f68eedcaaa |
+--------------------------------------+------+--------------------------------------+
$ openstack server create --image tty --flavor 1 myserver4 \
--nic net-id=9b96b14f-71b8-4918-90aa-c5d705606b1a
...
$ openstack server list
+--------------------------------------+-----------+--------+-------------------+------------+
| ID | Name | Status | Networks | Image Name |
+--------------------------------------+-----------+--------+-------------------+------------+
| c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=192.0.2.3 | cirros |
| 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=192.0.2.4 | ubuntu |
| c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=192.0.2.5 | centos |
| f62f4731-5591-46b1-9d74-f0c901de567f | myserver4 | ACTIVE | net2=198.51.100.2 | cirros1 |
+--------------------------------------+-----------+--------+-------------------+------------+
両方の DHCP エージェントが net2
を担当するようにします。
上述のコマンドを使って、ネットワークをエージェントに割り当てます。
$ neutron dhcp-agent-list-hosting-net net2
+--------------------------------------+-------+----------------+-------+
| id | host | admin_state_up | alive |
+--------------------------------------+-------+----------------+-------+
| a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True | :-) |
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True | :-) |
+--------------------------------------+-------+----------------+-------+
DHCP エージェントの HA を試験するには以下のようにします。
myserver4
VM にログインして、 udhcpc
、 dhclient
もしくはその他の DHCP クライアントを実行します。neutron-dhcp-agent
バイナリーを停止するだけでなく、 dnsmasq
プロセスも停止する必要があります。udhcpc
を実行します。 VM は所望の IP を取得できません。管理者は、システムのハードウェアやソフトウェアのアップグレードを計画している場合、エージェントを無効化したいことでしょう。 L3 エージェントや DHCP エージェントなど、スケジューリングに対応しているエージェントのいくつかでは、エージェントの有効化、無効化ができます。エージェントを無効にすると、スケジューラーはそれ以降はそのエージェントに新たにリソースをスケジューリングしません。
エージェントを無効にした後、そのエージェントは安全に削除できます。エージェントを無効化した後も、そのエージェント上のリソースは割り当てられたままです。エージェントを削除する前に、エージェント上のリソースを削除してください。
HostA のエージェントを停止する前に無効化します。
$ neutron agent-update a0c1c21c-d4f4-4577-9ec7-908f2d48622d --admin-state-up False
$ neutron agent-list
$ openstack network agent list
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| 22467163-01ea-4231-ba45-3bd316f425e6 | Linux bridge agent | HostA | None | True | UP | neutron-metering-agent |
| 2444c54d-0d28-460c-ab0f-cd1e6b5d3c7b | DHCP agent | HostA | None | True | UP | neutron-openvswitch-agent |
| 3066d20c-9f8f-440c-ae7c-a40ffb4256b6 | Linux bridge agent | HostB | nova | True | UP | neutron-l3-agent |
| 55569f4e-6f31-41a6-be9d-526efce1f7fe | DHCP agent | HostB | nova | True | UP | neutron-l3-agent |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
HostA の DHCP エージェントを停止した後で、以下のコマンドでエージェントを削除できます。
$ openstack network agent delete 2444c54d-0d28-460c-ab0f-cd1e6b5d3c7b
$ openstack network agent list
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| 22467163-01ea-4231-ba45-3bd316f425e6 | Linux bridge agent | HostA | None | True | UP | neutron-metering-agent |
| 3066d20c-9f8f-440c-ae7c-a40ffb4256b6 | Linux bridge agent | HostB | nova | True | UP | neutron-l3-agent |
| 55569f4e-6f31-41a6-be9d-526efce1f7fe | DHCP agent | HostB | nova | True | UP | neutron-l3-agent |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
削除した後で、 DHCP エージェントを再起動すると、そのエージェントは再びエージェント一覧に登場します。
/etc/neutron/neutron.conf
ファイルの以下の設定オプションで、1 つのネットワークに割り当てるデフォルトの DHCP エージェント数を制御できます。
dhcp_agents_per_network = 3
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.