シナリオ: Open vSwitch で VRRP (L3HA) を使った高可用構成

シナリオ: Open vSwitch で VRRP (L3HA) を使った高可用構成

このシナリオでは、 OpenStack Networking サービスの ML2 プラグインと Open vSwitch (OVS) を使った高可用性を持った実装について説明します。

高可用性シナリオは、シナリオ: Open vSwitch を使った基本構成 architecture に keepalived を使った Virtual Router Redundancy Protocol (VRRP) を組み合わせて、レイヤー 3 サービスの迅速なフェールオーバーをできるようにしたものです。 VRRP の動作については パケットフロー を参照してください。基本構成と同様、ルーターに HA を提供するネットワークノードの数に関わらず、ルーティングが必要なプロジェクトネットワークのすべてのネットワークトラフィックは 1 台のネットワークノードを通ります。したがって、この高可用性シナリオは、主として、性能限界となる帯域制約ではなく、障害状況への対策になります。しかしながら、別のネットワークノードにルーターをランダムに分散させることができるので、帯域制約が発生する可能性は減少し、スケーラビリティーが向上することでしょう。また、このシナリオでは、 1 つ以上のレイヤー 3 エージェントが故障しているが、仮想ネットワーク自体は正常に動作し続けているという状況には対応できません。性能だけでなく冗長性も向上させるには シナリオ: 分散仮想ルーター (DVR) を使った高可用構成 をデプロイすることを検討してください。 Liberty 時点では、 DVR と L3HA の両方を組み合わせることはできません。

注釈

フェールオーバー処理では、 Floating IP アドレスを持つインスタンスのネットワークコネクションの状態だけが維持されます。

設定例では、フラット外部ネットワーク 1 つと VXLAN のプロジェクト (テナント) ネットワーク 1 つを作成しますが、この設定は VLAN 外部ネットワーク、VLAN プロジェクトネットワーク、GRE プロジェクトネットワークにも対応しています。

前提

この前提は、このシナリオをデプロイするのに必要な最低限の物理インフラと直接の OpenStack サービスの依存関係を記載しています。例えば、Networking サービスは Identity サービスに直接依存しており、Compute サービスは Networking サービスに直接依存しています。 Networking サービスは Image サービスに直接は依存していないので、これらの依存関係には Image サービスなどのサービスは含まれていません。 しかしながら、 Compute サービスはインスタンスを起動するために Image サービスに依存しています。このシナリオの設定例では、 Networking サービスコンポーネントの基本的な設定に関する知識を前提にしています。 Networking サービスの基本的な設定については、インストールガイドを参照してください。

インフラストラクチャー

  1. 1 台のコントローラーノード。ネットワークインターフェースは management の 1 つ。

  2. 2 台のコンピュートノード。ネットワークインターフェースは 4 つ: 管理ネットワーク, プロジェクトトンネルネットワーク、 VLAN プロジェクトネットワーク、外部ネットワーク (通常はインターネット)。Open vSwitch ブリッジ br-vlan は VLAN インターフェースのポートを持ち、 Open vSwitch ブリッジ br-ex は外部インターフェースのポートを持っている必要があります。

  3. 最低 1 台のコンピュートノード。ネットワークインターフェースは 3 つ: 管理ネットワーク, プロジェクトトンネルネットワーク、 VLAN プロジェクトネットワーク。Open vSwitch ブリッジ br-vlan は VLAN インターフェースのポートを持っている必要があります。

ネットワークトラフィックの流れを理解しやすくため、ネットワークノードとコンピュートノードは VLAN プロジェクトネットワーク用に別のネットワークインターフェースを使っています。本番環境では、VLAN プロジェクトネットワークは、ネットワークインターフェースにアクセスするのに任意の Open vSwitch ブリッジを使用できます。例えば、 br-tun ブリッジなど。

設定例では、管理ネットワークは 10.0.0.0/24、トンネルネットワークは 10.0.1.0/24、 VRRP ネットワークは 169.254.192.0/18、外部ネットワークは 203.0.113.0/24 を使用します。 VLAN ネットワークはレイヤー 2 の接続性のみを扱うので IP アドレス範囲は必要ありません。

Hardware layout
Network layout
Service layout

注釈

VLAN 外部ネットワークと VLAN プロジェクトネットワークでは、ネットワーク基盤は VLAN タグに対応していなければいけません。 VXLAN や GRE プロジェクトネットワークで最大限の性能を得るには、ネットワーク基盤はジャンボフレームをサポートしている必要があるでしょう。

警告

Linux ディストリビューションではしばしば古いリリースの Open vSwitch がパッケージ化されており、 Networking サービスと組み合わせて動作させた際に問題が起こることがあります。最良の性能が得られ、かつ Open vSwitch のサポートが得られるよう、最新の LTS (長期間サポート) の安定版の Open vSwitch を使用することをお薦めします。利用可能なリリースについては http://www.openvswitch.org を参照してください。様々なディストリビューションで、新しいリリースをソースからビルドする方法については インストール手順 <https://github.com/openvswitch/ovs/blob/master/INSTALL.md> を参照してください。

VXLAN ネットワークを作成するには Linux カーネル 3.13 以降が必要です。

OpenStack サービス - コントローラーノード

  1. neutron データベースがある SQL サーバーと neutron.conf ファイルの適切な設定。

  2. メッセージキューサービスと neutron.conf ファイルの適切な設定。

  3. OpenStack Identity サービスと neutron.conf ファイルの適切な設定。

  4. OpenStack Compute コントローラー/管理サービスと nova.conf ファイルの OpenStack Networking を使う適切な設定。

  5. Neutron サーバーサービス、ML2 プラグインと依存サービス。

OpenStack サービス - ネットワークノード

  1. OpenStack Identity サービスと neutron.conf ファイルの適切な設定。

  2. Open vSwitch サービス、 Open vSwitch エージェント、L3 エージェント、 DHCP エージェント、メタデータエージェントと依存サービス。

OpenStack サービス - コンピュートノード

  1. OpenStack Identity サービスと neutron.conf ファイルの適切な設定。

  2. OpenStack Compute コントローラー/管理サービスと neutron.conf ファイルの OpenStack Networking を使う適切な設定。

  3. Open vSwitch サービス、 Open vSwitch エージェントと依存サービス。

アーキテクチャー

Architecture overview

ネットワークノードは、以下のコンポーネントを持ちます。

  1. Open vSwitch エージェント。仮想スイッチ、仮想スイッチ間の接続性、および仮想ポート経由での名前空間、 Linux ブリッジ、物理インターフェースなどの他のネットワークコンポーネントとのやり取りを管理します。

  2. DHCP エージェント。qdhcp 名前空間を管理します。 qdhcp 名前空間はプロジェクトネットワークを使用するインスタンスに対して DHCP サービスを提供します。

  3. L3 エージェント。 qrouter 名前空間と keepalived を使った VRRP を管理します。 qrouter 名前空間は、プロジェクトネットワークと外部ネットワーク間、プロジェクトネットワーク同士のルーティングを提供します。 qrouter 名前空間は、インスタンスとメタデータエージェント間のメタデータトラフィックのルーティングも行います。

  4. メタデータエージェント。インスタンスに対してメタデータ操作を扱います。

Network node components - overview
Network node components - connectivity

コンピュートノードは、以下のコンポーネントを持ちます。

  1. Open vSwitch エージェント。仮想スイッチ、仮想スイッチ間の接続性、および仮想ポート経由での名前空間、 Linux ブリッジ、物理インターフェースなどの他のネットワークコンポーネントとのやり取りを管理します。

  2. Linux ブリッジ。セキュリティーグループを扱います。

    注釈

    Open vSwitch と iptables に関する制限のため、Networking サービスは Linux ブリッジを使ってインスタンスのセキュリティーグループの管理を行います。

Compute node components - overview
Compute node components - connectivity

パケットフロー

L3HA 機構は、 シナリオ: Open vSwitch を使った基本構成 に、マスターが故障した場合にレイヤー 3 サービスを別のルーターに迅速にフェールオーバーする仕組みを組み合わせたものです。

通常動作中は、マスタールーターは定期的に heartbeat パケットを、隠しプロジェクトネットワーク経由で送信します。隠しプロジェクトネットワークには、1 つのプロジェクトのすべての HA ルーターが接続されます。デフォルトでは、このネットワークの種別として /etc/neutron/plugins/ml2_conf.ini ファイルの tenant_network_types オプションの最初の値で指定されたネットワーク種別が使用されます。

バックアップルーターで heartbeat パケットを受信しなくなると、マスタールーターの障害とみなし、 qrouter 名前空間のインターフェースの IP アドレスを設定し、自身をマスタールーターに昇格させます。バックアップルーターが複数ある環境では、2 番めに高い優先度を持つルーターがマスタールーターになります。

注釈

L3HA 機構ではすべてのルーターに同じ優先度を使います。したがって、 VRRP は最も大きい IP アドレスを持つバックアップルーターをマスタールーターに昇格させます。

設定例

以下の設定例を、お使いの環境でこのシナリオをデプロイする際の雛形として使ってください。

コントローラーノード

  1. 共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。

    [DEFAULT]
    verbose = True
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = True
    router_distributed = False
    l3_ha = True
    l3_ha_net_cidr = 169.254.192.0/18
    max_l3_agents_per_router = 3
    min_l3_agents_per_router = 2
    dhcp_agents_per_network = 2
    
  2. ML2 プラグインを設定します。/etc/neutron/plugins/ml2/ml2_conf.ini ファイルを編集します。

    [ml2]
    type_drivers = flat,vlan,gre,vxlan
    tenant_network_types = vlan,gre,vxlan
    mechanism_drivers = openvswitch,l2population
    extension_drivers = port_security
    
    [ml2_type_flat]
    flat_networks = external
    
    [ml2_type_vlan]
    network_vlan_ranges = external,vlan:MIN_VLAN_ID:MAX_VLAN_ID
    
    [ml2_type_gre]
    tunnel_id_ranges = MIN_GRE_ID:MAX_GRE_ID
    
    [ml2_type_vxlan]
    vni_ranges = MIN_VXLAN_ID:MAX_VXLAN_ID
    
    [securitygroup]
    enable_ipset = True
    

    MIN_VLAN_ID, MAX_VLAN_ID, MIN_GRE_ID, MAX_GRE_ID, MIN_VXLAN_ID, MAX_VXLAN_ID は、お使いの環境に応じた VLAN, GRE, VXLAN ID の最小値、最大値に置き換えてください。

    注釈

    tenant_network_types` オプションの最初の値は、一般ユーザーがネットワークを作成した際のデフォルトのプロジェクトネットワーク種別になります。

    注釈

    network_vlan_ranges オプションの external 値に VLAN ID を指定しなければ、管理ユーザーは任意の VLAN ID を使用できます。

  3. 以下のサービスを実行します。

    • Server

ネットワークノード

  1. 共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。

    [DEFAULT]
    verbose = True
    
  2. Open vSwitch エージェントを設定します。 /etc/neutron/plugins/ml2/openvswitch_agent.ini ファイルを編集します。

    [ovs]
    local_ip = TUNNEL_INTERFACE_IP_ADDRESS
    bridge_mappings = vlan:br-vlan,external:br-ex
    
    [agent]
    tunnel_types = gre,vxlan
    l2_population = True
    prevent_arp_spoofing = True
    
    [securitygroup]
    firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
    enable_security_group = True
    

    TUNNEL_INTERFACE_IP_ADDRESS は、GRE/VXLAN プロジェクトネットワークを扱うインターフェースの IP アドレスに置き換えます。

  3. L3 エージェントを設定します。/etc/neutron/l3_agent.ini ファイルを編集します。

    [DEFAULT]
    verbose = True
    interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
    use_namespaces = True
    external_network_bridge =
    agent_mode = legacy
    

    注釈

    external_network_bridge オプションには意図的に値を指定していません。

  4. DHCP エージェントを設定します。/etc/neutron/dhcp_agent.ini ファイルを編集します。

    [DEFAULT]
    verbose = True
    interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
    enable_isolated_metadata = True
    
  5. (オプション) VXLAN/GRE プロジェクトネットワークの MTU の縮小

    1. /etc/neutron/dhcp_agent.ini ファイルを編集します。

      [DEFAULT]
      dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf
      
    2. /etc/neutron/dnsmasq-neutron.conf ファイルを編集します。

      dhcp-option-force=26,1450
      
  6. メタデータエージェントを設定します。 /etc/neutron/metadata_agent.ini ファイルを編集します。

    [DEFAULT]
    verbose = True
    nova_metadata_ip = controller
    metadata_proxy_shared_secret = METADATA_SECRET
    

    METADATA_SECRET を適切な値に置き換えます。

  7. 以下のサービスを実行します。

    • Open vSwitch
    • Open vSwitch エージェント

    • L3 エージェント

    • DHCP エージェント

    • メタデータエージェント

コンピュートノード

  1. 共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。

    [DEFAULT]
    verbose = True
    
  2. Open vSwitch エージェントを設定します。 /etc/neutron/plugins/ml2/openvswitch_agent.ini ファイルを編集します。

    [ovs]
    local_ip = TUNNEL_INTERFACE_IP_ADDRESS
    bridge_mappings = vlan:br-vlan
    
    [agent]
    tunnel_types = gre,vxlan
    l2_population = False
    prevent_arp_spoofing = True
    
    [securitygroup]
    firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
    enable_security_group = True
    

    TUNNEL_INTERFACE_IP_ADDRESS は、GRE/VXLAN プロジェクトネットワークを扱うインターフェースの IP アドレスに置き換えます。

  3. 以下のサービスを実行します。

    • Open vSwitch
    • Open vSwitch エージェント

サービスの動作検証

  1. 管理プロジェクトのクレデンシャルを読み込みます。

  2. エージェントの存在と動作を検証します。

    $ neutron agent-list
    +--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
    | id                                   | agent_type         | host     | alive | admin_state_up | binary                    |
    +--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
    | 0bfe5b5d-0b82-434e-b8a0-524cc18da3a4 | DHCP agent         | network1 | :-)   | True           | neutron-dhcp-agent        |
    | 25224bd5-0905-4ec9-9f2d-3b17cdaf5650 | Open vSwitch agent | compute2 | :-)   | True           | neutron-openvswitch-agent |
    | 29afe014-273d-42f3-ad71-8a226e40dea6 | L3 agent           | network1 | :-)   | True           | neutron-l3-agent          |
    | 3bed5093-e46c-4b0f-9460-3309c62254a3 | DHCP agent         | network2 | :-)   | True           | neutron-dhcp-agent        |
    | 54aefb1c-35f7-4ebf-a848-3bb4fe81dcf7 | Open vSwitch agent | network1 | :-)   | True           | neutron-openvswitch-agent |
    | 91c9cc03-1678-4d7a-b0a7-fa1ac24e5516 | Open vSwitch agent | compute1 | :-)   | True           | neutron-openvswitch-agent |
    | ac7b3f77-7e4d-47a6-9dbd-3358cfb67b61 | Open vSwitch agent | network2 | :-)   | True           | neutron-openvswitch-agent |
    | ceef5c49-3148-4c39-9e15-4985fc995113 | Metadata agent     | network1 | :-)   | True           | neutron-metadata-agent    |
    | d27ac19b-fb4d-4fec-b81d-e8c65557b6ec | L3 agent           | network2 | :-)   | True           | neutron-l3-agent          |
    | f072a1ec-f842-4223-a6b6-ec725419be85 | Metadata agent     | network2 | :-)   | True           | neutron-metadata-agent    |
    +--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
    

初期ネットワークの作成

この例は、フラット外部ネットワーク、VXLAN プロジェクトネットワークを作成します。

  1. 管理プロジェクトのクレデンシャルを読み込みます。

  2. 外部ネットワークを作成します。

    $ neutron net-create ext-net --router:external True \
      --provider:physical_network external --provider:network_type flat
    Created a new network:
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | True                                 |
    | id                        | 5266fcbc-d429-4b21-8544-6170d1691826 |
    | name                      | ext-net                              |
    | provider:network_type     | flat                                 |
    | provider:physical_network | external                             |
    | provider:segmentation_id  |                                      |
    | router:external           | True                                 |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | tenant_id                 | 96393622940e47728b6dcdb2ef405f50     |
    +---------------------------+--------------------------------------+
    
  3. 外部ネットワークにサブネットを作成します。

    $ neutron subnet-create ext-net 203.0.113.0/24 --name ext-subnet \
      --allocation-pool start=203.0.113.101,end=203.0.113.200 \
      --disable-dhcp --gateway 203.0.113.1
    Created a new subnet:
    +-------------------+----------------------------------------------------+
    | Field             | Value                                              |
    +-------------------+----------------------------------------------------+
    | allocation_pools  | {"start": "203.0.113.101", "end": "203.0.113.200"} |
    | cidr              | 203.0.113.0/24                                     |
    | dns_nameservers   |                                                    |
    | enable_dhcp       | False                                              |
    | gateway_ip        | 203.0.113.1                                        |
    | host_routes       |                                                    |
    | id                | b32e0efc-8cc3-43ff-9899-873b94df0db1               |
    | ip_version        | 4                                                  |
    | ipv6_address_mode |                                                    |
    | ipv6_ra_mode      |                                                    |
    | name              | ext-subnet                                         |
    | network_id        | 5266fcbc-d429-4b21-8544-6170d1691826               |
    | tenant_id         | 96393622940e47728b6dcdb2ef405f50                   |
    +-------------------+----------------------------------------------------+
    

注釈

設定例では、先頭のプロジェクトネットワーク種別は vlan です。管理ユーザーだけが GRE や VXLAN などの他の種別のネットワークを作成できます。以下のコマンドでは、 VXLAN プロジェクトネットワークを作成するのに admin プロジェクトのクレデンシャルを使用しています。

  1. 一般プロジェクトの ID を取得します。この例では、 demo プロジェクトを使用しています。

    $ openstack project show demo
    +-------------+----------------------------------+
    |   Field     |              Value               |
    +-------------+----------------------------------+
    | description |           Demo Tenant            |
    |   enabled   |               True               |
    |      id     | 443cd1596b2e46d49965750771ebbfe1 |
    |     name    |               demo               |
    +-------------+----------------------------------+
    
  2. プロジェクトネットワークを作成します。

    $ neutron net-create demo-net \
      --tenant-id 443cd1596b2e46d49965750771ebbfe1 \
      --provider:network_type vxlan
    Created a new network:
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | True                                 |
    | id                        | 7ac9a268-1ddd-453f-857b-0fd9552b645f |
    | name                      | demo-net                             |
    | provider:network_type     | vxlan                                |
    | provider:physical_network |                                      |
    | provider:segmentation_id  | 1                                    |
    | router:external           | False                                |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | tenant_id                 | 443cd1596b2e46d49965750771ebbfe1     |
    +---------------------------+--------------------------------------+
    
  3. demo プロジェクトの認証情報を読み込みます。 以下の手順では demo プロジェクトを使用します。

  4. プロジェクトネットワークにサブネットを作成します。

    $ neutron subnet-create demo-net 192.168.1.0/24 --name demo-subnet \
      --gateway 192.168.1.1
    Created a new subnet:
    +-------------------+--------------------------------------------------+
    | Field             | Value                                            |
    +-------------------+--------------------------------------------------+
    | allocation_pools  | {"start": "192.168.1.2", "end": "192.168.1.254"} |
    | cidr              | 192.168.1.0/24                                   |
    | dns_nameservers   |                                                  |
    | enable_dhcp       | True                                             |
    | gateway_ip        | 192.168.1.1                                      |
    | host_routes       |                                                  |
    | id                | 2945790c-5999-4693-b8e7-50a9fc7f46f5             |
    | ip_version        | 4                                                |
    | ipv6_address_mode |                                                  |
    | ipv6_ra_mode      |                                                  |
    | name              | demo-subnet                                      |
    | network_id        | 7ac9a268-1ddd-453f-857b-0fd9552b645f             |
    | tenant_id         | 443cd1596b2e46d49965750771ebbfe1                 |
    +-------------------+--------------------------------------------------+
    
  5. プロジェクトルーターを作成します。

    $ neutron router-create demo-router
    Created a new router:
    +-----------------------+--------------------------------------+
    | Field                 | Value                                |
    +-----------------------+--------------------------------------+
    | admin_state_up        | True                                 |
    | distributed           | False                                |
    | external_gateway_info |                                      |
    | ha                    | True                                 |
    | id                    | 7a46dba8-8846-498c-9e10-588664558473 |
    | name                  | demo-router                          |
    | routes                |                                      |
    | status                | ACTIVE                               |
    | tenant_id             | 443cd1596b2e46d49965750771ebbfe1     |
    +-----------------------+--------------------------------------+
    

    注釈

    デフォルトの policy.json ファイルでは、管理ユーザーだけが、ルーター作成時に HA の有効/無効を指定でき、ルーターの ha フラグを参照できます。

  6. プロジェクトサブネットをルーターにインターフェースとして接続します。

    $ neutron router-interface-add demo-router demo-subnet
    Added interface 8de3e172-5317-4c87-bdc1-f69e359de92e to router demo-router.
    
  7. ルーターに外部ネットワークへのゲートウェイを追加します。

    $ neutron router-gateway-set demo-router ext-net
    Set gateway for router demo-router
    

ネットワーク動作の検証

  1. 管理プロジェクトのクレデンシャルを読み込みます。

  2. コントローラーノードで、 HA ネットワークが作成されているかを確認します。

    $ neutron net-list
    +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
    | id                                   | name                                               | subnets                                               |
    +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
    | 5266fcbc-d429-4b21-8544-6170d1691826 | ext-net                                            | b32e0efc-8cc3-43ff-9899-873b94df0db1 203.0.113.0/24   |
    | e029b568-0fd7-4d10-bb16-f9e014811d10 | HA network tenant 443cd1596b2e46d49965750771ebbfe1 | ee30083f-eb4c-41ea-8937-1bae65740af4 169.254.192.0/18 |
    | 7ac9a268-1ddd-453f-857b-0fd9552b645f | demo-net                                           | 2945790c-5999-4693-b8e7-50a9fc7f46f5 192.168.1.0/24   |
    +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
    
  3. コントローラーノードで、複数のネットワークノードにルーターが作成されていることを確認します。

    $ neutron l3-agent-list-hosting-router demo-router
    +--------------------------------------+----------+----------------+-------+----------+
    | id                                   | host     | admin_state_up | alive | ha_state |
    +--------------------------------------+----------+----------------+-------+----------+
    | 29afe014-273d-42f3-ad71-8a226e40dea6 | network1 | True           | :-)   | active   |
    | d27ac19b-fb4d-4fec-b81d-e8c65557b6ec | network2 | True           | :-)   | standby  |
    +--------------------------------------+----------+----------------+-------+----------+
    

    注釈

    古いバージョンの python-neutronclientha_state フィールドに対応していません。

  4. コントローラーノードにおいて、demo-router ルーターに HA ポートの作成を検証します。

    $ neutron router-port-list demo-router
    +--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+
    | id                                   | name                                            | mac_address       | fixed_ips                                                                              |
    +--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+
    | 255d2e4b-33ba-4166-a13f-6531122641fe | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:25:05:d7 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.1"}   |
    | 374587d7-2acd-4156-8993-4294f788b55e |                                                 | fa:16:3e:82:a0:59 | {"subnet_id": "b32e0efc-8cc3-43ff-9899-873b94df0db1", "ip_address": "203.0.113.101"}   |
    | 8de3e172-5317-4c87-bdc1-f69e359de92e |                                                 | fa:16:3e:10:9f:f6 | {"subnet_id": "2945790c-5999-4693-b8e7-50a9fc7f46f5", "ip_address": "192.168.1.1"}     |
    | 90d1a59f-b122-459d-a94a-162a104de629 | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:ae:3b:22 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.2"}   |
    +--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+
    
  5. ネットワークノードにおいて、qrouterqdhcp 名前空間の作成を検証します。

    ネットワークノード 1:

    $ ip netns
    qrouter-7a46dba8-8846-498c-9e10-588664558473
    

    ネットワークノード 2:

    $ ip netns
    qrouter-7a46dba8-8846-498c-9e10-588664558473
    

    両方の qrouter 名前空間で同じ UUID が使われているはずです。

    注釈

    インスタンスを起動するまでは qdhcp 名前空間は存在しない場合があります。

  6. ネットワークノードにおいて、HA 動作を検証します。

    ネットワークノード 1:

    $ ip netns exec qrouter-7a46dba8-8846-498c-9e10-588664558473 ip addr show
    11: ha-255d2e4b-33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether fa:16:3e:25:05:d7 brd ff:ff:ff:ff:ff:ff
        inet 169.254.192.1/18 brd 169.254.255.255 scope global ha-255d2e4b-33
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe25:5d7/64 scope link
           valid_lft forever preferred_lft forever
    12: qr-8de3e172-53: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether fa:16:3e:10:9f:f6 brd ff:ff:ff:ff:ff:ff
        inet 192.168.1.1/24 scope global qr-8de3e172-53
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe10:9ff6/64 scope link
           valid_lft forever preferred_lft forever
    13: qg-374587d7-2a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether fa:16:3e:82:a0:59 brd ff:ff:ff:ff:ff:ff
        inet 203.0.113.101/24 scope global qg-374587d7-2a
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe82:a059/64 scope link
           valid_lft forever preferred_lft forever
    

    ネットワークノード 2:

    $ ip netns exec qrouter-7a46dba8-8846-498c-9e10-588664558473 ip addr show
    11: ha-90d1a59f-b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether fa:16:3e:ae:3b:22 brd ff:ff:ff:ff:ff:ff
        inet 169.254.192.2/18 brd 169.254.255.255 scope global ha-90d1a59f-b1
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:feae:3b22/64 scope link
           valid_lft forever preferred_lft forever
    12: qr-8de3e172-53: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether fa:16:3e:10:9f:f6 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::f816:3eff:fe10:9ff6/64 scope link
           valid_lft forever preferred_lft forever
    13: qg-374587d7-2a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether fa:16:3e:82:a0:59 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::f816:3eff:fe82:a059/64 scope link
           valid_lft forever preferred_lft forever
    

    各ネットワークノードで、 qrouter 名前空間には ha, qr, qg インターフェースがあります。マスターノードでは、 qr インターフェースはプロジェクトネットワークのゲートウェイ IP アドレスを持ち、 qg インターフェースは外部ネットワーク上のプロジェクトルーターの IP アドレスを持ちます。バックアップノードでは、 qrqg インターフェースは IP アドレスを持ちません。両方のノードで、 ha インターフェースは 169.254.192.0/18 の範囲の一意な IP アドレスを持ちます。

  7. ネットワークノードにおいて、マスターノードの HA インターフェースの IP アドレスから VRRP 広告が行われていることを、適切なネットワークインターフェースで確認します。

    ネットワークノード 1:

    $ tcpdump -lnpi eth1
    16:50:16.857294 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20
    16:50:18.858436 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20
    16:50:20.859677 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20
    

    ネットワークノード 2:

    $ tcpdump -lnpi eth1
    16:51:44.911640 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20
    16:51:46.912591 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20
    16:51:48.913900 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20
    

    注釈

    出力例ではネットワークインターフェース eth1 を使用しています。

  8. プロジェクトネットワークのルーターの外部ネットワーク側のゲートウェイ IP アドレスを調べます。通常は、外部ネットワークのサブネット IP 割り当て範囲の中で最小の IP アドレスです。

    $ neutron router-port-list demo-router
    +--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+
    | id                                   | name                                            | mac_address       | fixed_ips                                                                              |
    +--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+
    | 255d2e4b-33ba-4166-a13f-6531122641fe | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:25:05:d7 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.1"}   |
    | 374587d7-2acd-4156-8993-4294f788b55e |                                                 | fa:16:3e:82:a0:59 | {"subnet_id": "b32e0efc-8cc3-43ff-9899-873b94df0db1", "ip_address": "203.0.113.101"}   |
    | 8de3e172-5317-4c87-bdc1-f69e359de92e |                                                 | fa:16:3e:10:9f:f6 | {"subnet_id": "2945790c-5999-4693-b8e7-50a9fc7f46f5", "ip_address": "192.168.1.1"}     |
    | 90d1a59f-b122-459d-a94a-162a104de629 | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:ae:3b:22 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.2"}   |
    +--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+
    
  9. コントローラーノードか外部ネットワークにアクセスできるホストから、プロジェクトルーターの外部ネットワーク側のゲートウェイ IP アドレスに ping を行います。

    $ ping -c 4 203.0.113.101
    PING 203.0.113.101 (203.0.113.101) 56(84) bytes of data.
    64 bytes from 203.0.113.101: icmp_req=1 ttl=64 time=0.619 ms
    64 bytes from 203.0.113.101: icmp_req=2 ttl=64 time=0.189 ms
    64 bytes from 203.0.113.101: icmp_req=3 ttl=64 time=0.165 ms
    64 bytes from 203.0.113.101: icmp_req=4 ttl=64 time=0.216 ms
    
    --- 203.0.113.101 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 2999ms
    rtt min/avg/max/mdev = 0.165/0.297/0.619/0.187 ms
    
  10. 通常のプロジェクトの認証情報を読み込みます。 以下の手順では demo プロジェクトを使用します。

  11. 適切なセキュリティーグループを作成し、インスタンスへの ping と SSH を許可します。例えば以下のようにします。

    $ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
    +-------------+-----------+---------+-----------+--------------+
    | IP Protocol | From Port | To Port | IP Range  | Source Group |
    +-------------+-----------+---------+-----------+--------------+
    | icmp        | -1        | -1      | 0.0.0.0/0 |              |
    +-------------+-----------+---------+-----------+--------------+
    
    $ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
    +-------------+-----------+---------+-----------+--------------+
    | IP Protocol | From Port | To Port | IP Range  | Source Group |
    +-------------+-----------+---------+-----------+--------------+
    | tcp         | 22        | 22      | 0.0.0.0/0 |              |
    +-------------+-----------+---------+-----------+--------------+
    
  12. プロジェクトネットワークに接続されたインタフェースを持つインスタンスを起動します。例えば、すでに存在する CirrOS イメージを使用します。

    $ nova boot --flavor m1.tiny --image cirros \
      --nic net-id=7ac9a268-1ddd-453f-857b-0fd9552b645f demo-instance1
    +--------------------------------------+-----------------------------------------------+
    | Property                             | Value                                         |
    +--------------------------------------+-----------------------------------------------+
    | OS-DCF:diskConfig                    | MANUAL                                        |
    | OS-EXT-AZ:availability_zone          | nova                                          |
    | OS-EXT-STS:power_state               | 0                                             |
    | OS-EXT-STS:task_state                | scheduling                                    |
    | OS-EXT-STS:vm_state                  | building                                      |
    | OS-SRV-USG:launched_at               | -                                             |
    | OS-SRV-USG:terminated_at             | -                                             |
    | accessIPv4                           |                                               |
    | accessIPv6                           |                                               |
    | adminPass                            | Z3uAd2utPUNu                                  |
    | config_drive                         |                                               |
    | created                              | 2015-08-10T15:06:24Z                          |
    | flavor                               | m1.tiny (1)                                   |
    | hostId                               |                                               |
    | id                                   | 77149598-c839-400f-b948-db6993f0b40b          |
    | image                                | cirros (125733d9-8d37-4d70-9a64-1c989cfa8e9c) |
    | key_name                             |                                               |
    | metadata                             | {}                                            |
    | name                                 | demo-instance1                                |
    | os-extended-volumes:volumes_attached | []                                            |
    | progress                             | 0                                             |
    | security_groups                      | default                                       |
    | status                               | BUILD                                         |
    | tenant_id                            | 443cd1596b2e46d49965750771ebbfe1              |
    | updated                              | 2015-08-10T15:06:25Z                          |
    | user_id                              | bdd4e165bdf94b258ddd4856340ed01c              |
    +--------------------------------------+-----------------------------------------------+
    
  13. インスタンスへのコンソールアクセスを取得します。

    1. プロジェクトルーターへの接続性を確認します。

      $ ping -c 4 192.168.1.1
      PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
      64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.357 ms
      64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.473 ms
      64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=0.504 ms
      64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=0.470 ms
      
      --- 192.168.1.1 ping statistics ---
      4 packets transmitted, 4 received, 0% packet loss, time 2998ms
      rtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms
      
    2. インターネットへの接続性を確認します。

      $ ping -c 4 openstack.org
      PING openstack.org (174.143.194.225) 56(84) bytes of data.
      64 bytes from 174.143.194.225: icmp_req=1 ttl=53 time=17.4 ms
      64 bytes from 174.143.194.225: icmp_req=2 ttl=53 time=17.5 ms
      64 bytes from 174.143.194.225: icmp_req=3 ttl=53 time=17.7 ms
      64 bytes from 174.143.194.225: icmp_req=4 ttl=53 time=17.5 ms
      
      --- openstack.org ping statistics ---
      4 packets transmitted, 4 received, 0% packet loss, time 3003ms
      rtt min/avg/max/mdev = 17.431/17.575/17.734/0.143 ms
      
  14. 外部ネットワークに Floating IP アドレスを作成します。

    $ neutron floatingip-create ext-net
    Created a new floatingip:
    +---------------------+--------------------------------------+
    | Field               | Value                                |
    +---------------------+--------------------------------------+
    | fixed_ip_address    |                                      |
    | floating_ip_address | 203.0.113.102                        |
    | floating_network_id | 5266fcbc-d429-4b21-8544-6170d1691826 |
    | id                  | 20a6b5dd-1c5c-460e-8a81-8b5cf1739307 |
    | port_id             |                                      |
    | router_id           |                                      |
    | status              | DOWN                                 |
    | tenant_id           | 443cd1596b2e46d49965750771ebbfe1     |
    +---------------------+--------------------------------------+
    
  15. Floating IP アドレスをインスタンスに関連付けます。

    $ nova floating-ip-associate demo-instance1 203.0.113.102
    
  16. インスタンスに Floating IP アドレスが追加されていることを確認します。

    $ nova list
    +--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
    | ID                                   | Name           | Status | Task State | Power State | Networks                                |
    +--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
    | 77149598-c839-400f-b948-db6993f0b40b | demo-instance1 | ACTIVE | -          | Running     | demo-net=192.168.1.3, 203.0.113.102     |
    +--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
    
  17. コントローラーノードか外部ネットワークにアクセスできるホストから、インスタンスに関連付けられた Floating IP アドレスに ping を行います。

    $ ping -c 4 203.0.113.102
    PING 203.0.113.102 (203.0.113.112) 56(84) bytes of data.
    64 bytes from 203.0.113.102: icmp_req=1 ttl=63 time=3.18 ms
    64 bytes from 203.0.113.102: icmp_req=2 ttl=63 time=0.981 ms
    64 bytes from 203.0.113.102: icmp_req=3 ttl=63 time=1.06 ms
    64 bytes from 203.0.113.102: icmp_req=4 ttl=63 time=0.929 ms
    
    --- 203.0.113.102 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3002ms
    rtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms
    
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.