このセクションでは、エージェント管理 API 拡張 (別名 agent) とスケジューラー API 拡張 (別名 agent_scheduler) を使って DHCP エージェントのスケーラビリティーと HA (高可用性) を行う方法を説明します。
注釈
これらの API 拡張が有効になっているかを確認するには neutron ext-list コマンドを使用します。出力に agent と agent_scheduler が含まれていることを確認します。
$ neutron ext-list -c name -c alias
+-----------------+--------------------------+
| alias | name |
+-----------------+--------------------------+
| agent_scheduler | Agent Schedulers |
| binding | Port Binding |
| quotas | Quota management support |
| agent | agent |
| provider | Provider Network |
| router | Neutron L3 Router |
| lbaas | Load Balancing service |
| extraroute | Neutron Extra Route |
+-----------------+--------------------------+
この構成では 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://100.1.1.10:9696/
HostA、HostB: DHCP エージェント
DHCP 設定ファイル /etc/neutron/dhcp_agent.ini を更新します。
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
エージェント管理およびスケジューラー拡張機能を使用するには管理ロールが必要です。以下のコマンドは管理ロールを持つプロジェクトで実行してください。
以下を試すには、VM と neutron ネットワークが必要です。
$ nova list
+--------------------------------------+-----------+--------+---------------+
| ID | Name | Status | Networks |
+--------------------------------------+-----------+--------+---------------+
| c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=10.0.1.3 |
| 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=10.0.1.4 |
| c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=10.0.1.5 |
+--------------------------------------+-----------+--------+---------------+
$ neutron net-list
+--------------------------------------+------+--------------------------------------+
| id | name | subnets |
+--------------------------------------+------+--------------------------------------+
| 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 |
+--------------------------------------+------+--------------------------------------+
全エージェントを一覧表示します。
$ neutron agent-list
+--------------------------------------+--------------------+-------+-------+----------------+
| id | agent_type | host | alive | admin_state_up |
+--------------------------------------+--------------------+-------+-------+----------------+
| 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-) | True |
| a0c1c21c-d4f4-4577-9ec7-908f2d48622d | DHCP agent | HostA | :-) | True |
| ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-) | True |
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | :-) | True |
+--------------------------------------+--------------------+-------+-------+----------------+
これらの拡張機能に対応した全エージェントは、開始時に 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 10.0.1.0/24 |
+--------------------------------------+------+--------------------------------------------------+
エージェントの詳細を表示します。
agent-show コマンドは、指定したエージェントの詳細を表示します。
$ neutron agent-show a0c1c21c-d4f4-4577-9ec7-908f2d48622d
+---------------------+--------------------------------------------------------+
| Field | Value |
+---------------------+--------------------------------------------------------+
| admin_state_up | True |
| agent_type | DHCP agent |
| alive | False |
| binary | neutron-dhcp-agent |
| configurations | { |
| | "subnets": 1, |
| | "dhcp_driver": "neutron.agent.linux.dhcp.Dnsmasq", |
| | "networks": 1, |
| | "dhcp_lease_time": 120, |
| | "ports": 3 |
| | } |
| created_at | 2013-03-16T01:16:18.000000 |
| description | |
| heartbeat_timestamp | 2013-03-17T01:37:22.000000 |
| host | HostA |
| id | 58f4ce07-6789-4bb3-aa42-ed3779db2b03 |
| started_at | 2013-03-16T06:48:39.000000 |
| topic | dhcp_agent |
+---------------------+--------------------------------------------------------+
この出力で、 heartbeat_timestamp は neutron サーバーにおける時刻です。この拡張機能を正しく動作させるためには、すべてのエージェントが neutron サーバーに時刻が同期できている必要は特にありません。 configurations には、エージェントの静的な設定や実行時のデータが入ります。このエージェントは DHCP エージェントで、ネットワークを 1 つ、サブネットを 1 つ、ポートを 3 つ扱っています。
別の種類のエージェントでは別の詳細が表示されます。以下は Linux ブリッジエージェントの情報を表示したものです。
$ neutron agent-show ed96b856-ae0f-4d75-bb28-40a47ffd7695
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| admin_state_up | True |
| binary | neutron-linuxbridge-agent |
| configurations | { |
| | "physnet1": "eth0", |
| | "devices": "4" |
| | } |
| created_at | 2013-03-16T01:49:52.000000 |
| description | |
| disabled | False |
| group | agent |
| heartbeat_timestamp | 2013-03-16T01:59:45.000000 |
| host | HostB |
| id | ed96b856-ae0f-4d75-bb28-40a47ffd7695 |
| topic | N/A |
| started_at | 2013-03-16T06:48:39.000000 |
| type | Linux bridge agent |
+---------------------+--------------------------------------+
出力には bridge-mapping とこの L2 エージェント上の仮想ネットワークデバイス数が表示されています。
1 つのネットワークを複数の DHCP エージェントに割り当てることもできますし、 1 つの DHCP エージェントで複数のネットワークを担当することもできます。ネットワークを DHCP エージェントに追加したり、DHCP エージェントから削除したりできます。
デフォルトのスケジューリング。
ネットワークにポートを 1 つ作成すると、そのネットワークは稼働中の DHCP エージェントに割り当てられます。複数の稼働中のエージェントがある場合は、 1 つがランダムに選択されます。 nova-scheduler と同様、もっと洗練されたスケジューリングアルゴリズムを設計することもできるでしょう。
$ neutron net-create net2
$ neutron subnet-create net2 9.0.1.0/24 --name subnet2
$ neutron port-create net2
$ neutron dhcp-agent-list-hosting-net net2
+--------------------------------------+-------+----------------+-------+
| id | host | admin_state_up | alive |
+--------------------------------------+-------+----------------+-------+
| a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True | :-) |
+--------------------------------------+-------+----------------+-------+
ネットワークは 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
$ 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 エージェントが 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 上に起動します。
$ neutron net-list
+--------------------------------------+------+--------------------------------------------------+
| id | name | subnets |
+--------------------------------------+------+--------------------------------------------------+
| 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 10.0.1.0/24 |
| 9b96b14f-71b8-4918-90aa-c5d705606b1a | net2 | 6979b71a-0ae8-448c-aa87-65f68eedcaaa 9.0.1.0/24 |
+--------------------------------------+------+--------------------------------------------------+
$ nova boot --image tty --flavor 1 myserver4 \
--nic net-id=9b96b14f-71b8-4918-90aa-c5d705606b1a
...
$ nova list
+--------------------------------------+-----------+--------+---------------+
| ID | Name | Status | Networks |
+--------------------------------------+-----------+--------+---------------+
| c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=10.0.1.3 |
| 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=10.0.1.4 |
| c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=10.0.1.5 |
| f62f4731-5591-46b1-9d74-f0c901de567f | myserver4 | ACTIVE | net2=9.0.1.2 |
+--------------------------------------+-----------+--------+---------------+
両方の 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 クライアントを実行します。
HostA の DHCP エージェントを停止します。 neutron-dhcp-agent バイナリーを停止するだけでなく、 dnsmasq プロセスも停止する必要があります。
VM で DHCP クライアントを実行し、所望の IP が取得できるかを確認します。
HostB の DHCP エージェントも停止します。
VM 内で udhcpc を実行します。 VM は所望の IP を取得できません。
HostB で DHCP エージェントを開始します。 VM は所望の IP アドレスを再び取得できます。
管理者は、システムのハードウェアやソフトウェアのアップグレードを計画している場合、エージェントを無効化したいことでしょう。 L3 エージェントや DHCP エージェントなど、スケジューリングに対応しているエージェントのいくつかでは、エージェントの有効化、無効化ができます。エージェントを無効にすると、スケジューラーはそれ以降はそのエージェントに新たにリソースをスケジューリングしません。
エージェントを無効にした後、そのエージェントは安全に削除できます。エージェントを無効化した後も、そのエージェント上のリソースは割り当てられたままです。エージェントを削除する前に、エージェント上のリソースを削除してください。
HostA のエージェントを停止する前に無効化します。
$ neutron agent-update a0c1c21c-d4f4-4577-9ec7-908f2d48622d --admin-state-up False
$ neutron agent-list
+--------------------------------------+--------------------+-------+-------+----------------+
| id | agent_type | host | alive | admin_state_up |
+--------------------------------------+--------------------+-------+-------+----------------+
| 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-) | True |
| a0c1c21c-d4f4-4577-9ec7-908f2d48622d | DHCP agent | HostA | :-) | False |
| ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-) | True |
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | :-) | True |
+--------------------------------------+--------------------+-------+-------+----------------+
HostA の DHCP エージェントを停止した後で、以下のコマンドでエージェントを削除できます。
$ neutron agent-delete a0c1c21c-d4f4-4577-9ec7-908f2d48622d
Deleted agent: a0c1c21c-d4f4-4577-9ec7-908f2d48622d
$ neutron agent-list
+--------------------------------------+--------------------+-------+-------+----------------+
| id | agent_type | host | alive | admin_state_up |
+--------------------------------------+--------------------+-------+-------+----------------+
| 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-) | True |
| ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-) | True |
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | :-) | True |
+--------------------------------------+--------------------+-------+-------+----------------+
削除した後で、 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.