分散仮想ルーティングと VRRP の組み合わせ

分散仮想ルーティングと VRRP の組み合わせ

Open vSwitch: High availability using DVR supports augmentation using Virtual Router Redundancy Protocol (VRRP). Using this configuration, virtual routers support both the --distributed and --ha options.

従来の HA ルーターと同じく、 DVR/SNAT HA ルーターでは SNAT サービスが別のノードで動作する L3 エージェントのバックアップ DVR/SNAT HA ルーターに迅速にフェールオーバーされます。

SNAT high availability is implemented in a manner similar to the Linux bridge: High availability using VRRP and Open vSwitch: High availability using VRRP examples where keepalived uses VRRP to provide quick failover of SNAT services.

通常動作中は、マスタールーターは定期的に heartbeat パケットを、隠しプロジェクトネットワーク経由で送信します。隠しプロジェクトネットワークには、1 つのプロジェクトのすべての HA ルーターが接続されます。

バックアップの DVR/SNAT ルーターがこれらのパケットを受信しなくなると、バックアップのルーターはマスターの DVR/SNAT ルーターの障害とみなし、 自身をマスタールーターに昇格させ、 snat 名前空間のインターフェースに IP アドレスを設定します。バックアップルーターが複数ある環境では、 VRRP のルールに基いて新しいマスタールーターが選択されます。

注釈

実験的な機能で、ドキュメントも不十分です。

設定例

基本的なデプロイメントモデルは、 1 台のコントローラーノード、 2 台以上のネットワークノード、複数台のコンピュートノードから構成されます。

コントローラーノードの設定

  1. /etc/neutron/neutron.conf に以下を追加します。

    [DEFAULT]
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = True
    router_distributed = True
    l3_ha = True
    l3_ha_net_cidr = 169.254.192.0/18
    max_l3_agents_per_router = 3
    min_l3_agents_per_router = 2
    

    router_distributed = True フラグが設定されると、すべてのユーザーが作成するルーターが分散ルーターになります。この設定をしない場合は、特権ユーザーだけが --distributed True を使って分散ルーターを作成できます。

    同様に、 l3_ha = True フラグが設定されると、すべてのユーザーが作成するルーターがデフォルトで HA ルーターになります。

    要するに、設定ファイルでこれら 2 つのフラグを True に設定すると、すべてのユーザーが作成するルーターがデフォルトで分散 HA ルーター (DVR HA) になるということです。

    管理者権限を持つユーザーがこれらのフラグを router-create コマンドで指定して、同じことを明示的に行うこともできます。

    $ neutron router-create name-of-router --distributed=True --ha=True
    

    注釈

    バックアップ DVR/SNAT ルーターが何個用意されるかは、 max_l3_agents_per_routermin_l3_agents_per_router により決定されます。

  2. /etc/neutron/plugins/ml2/ml2_conf.ini に以下を追加します。

    [ml2]
    type_drivers = flat,vxlan
    tenant_network_types = vxlan
    mechanism_drivers = openvswitch,l2population
    extension_drivers = port_security
    
    [ml2_type_flat]
    flat_networks = external
    
    [ml2_type_vxlan]
    vni_ranges = MIN_VXLAN_ID:MAX_VXLAN_ID
    

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

    注釈

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

ネットワークノード

  1. Open vSwitch エージェントを設定します。 /etc/neutron/plugins/ml2/ml2_conf.ini に以下を追加します。

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

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

  2. L3 エージェントを設定します。 /etc/neutron/l3_agent.ini に以下を追加します。

    [DEFAULT]
    ha_vrrp_auth_password = password
    interface_driver = openvswitch
    external_network_bridge =
    agent_mode = dvr_snat
    

    注釈

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

コンピュートノード

  1. Open vSwitch エージェントを設定します。 /etc/neutron/plugins/ml2/ml2_conf.ini に以下を追加します。

    [ovs]
    local_ip = TUNNEL_INTERFACE_IP_ADDRESS
    bridge_mappings = external:br-ex
    
    [agent]
    enable_distributed_routing = True
    tunnel_types = vxlan
    l2_population = True
    
    [securitygroup]
    firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
    
  2. L3 エージェントを設定します。 /etc/neutron/l3_agent.ini に以下を追加します。

    [DEFAULT]
    interface_driver = openvswitch
    external_network_bridge =
    agent_mode = dvr
    

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

既知の制限

  • 現時点では、分散のみ、HA のみ、レガシーモードのルーターから分散 HA ルーターへの移行には対応していません。ルーターは分散 HA モードで作成しなければいけません。逆方向の移行にも対応していません。分散 HA ルーターを、分散のみ、HA のみ、レガシーモードに設定し直すことはできません。

  • L2 population と分散 HA ルーターが期待通りに連携しない場面がいくつかあります。これらの場面は、 HA のみのルーターと L2 population がうまく連携できない場面と同じです。

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.