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 のルールに基いて新しいマスタールーターが選択されます。
警告
There is a known bug with keepalived
v1.2.15 and earlier which can
cause packet loss when max_l3_agents_per_router
is set to 3 or more.
Therefore, we recommend that you upgrade to keepalived
v1.2.16
or greater when using this feature.
注釈
実験的な機能で、ドキュメントも不十分です。
基本的なデプロイメントモデルは、 1 台のコントローラーノード、 2 台以上のネットワークノード、複数台のコンピュートノードから構成されます。
/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
router_distributed = True
フラグが設定されると、すべてのユーザーが作成するルーターが分散ルーターになります。この設定をしない場合は、特権ユーザーだけが --distributed True
を使って分散ルーターを作成できます。
同様に、 l3_ha = True
フラグが設定されると、すべてのユーザーが作成するルーターがデフォルトで HA ルーターになります。
要するに、設定ファイルでこれら 2 つのフラグを True
に設定すると、すべてのユーザーが作成するルーターがデフォルトで分散 HA ルーター (DVR HA) になるということです。
管理者権限を持つユーザーがこれらのフラグを neutron router-create コマンドで指定して、同じことを明示的に行うこともできます。
$ neutron router-create name-of-router --distributed=True --ha=True
注釈
バックアップ DVR/SNAT ルーターが何個用意されるかは、 max_l3_agents_per_router により決定されます。
/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` オプションの最初の値は、一般ユーザーがネットワークを作成した際のデフォルトのプロジェクトネットワーク種別になります。
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
TUNNEL_INTERFACE_IP_ADDRESS
は、VXLAN プロジェクトネットワークを扱うインターフェースの IP アドレスに置き換えます。
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
オプションには意図的に値を指定していません。
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
L3 エージェントを設定します。 /etc/neutron/l3_agent.ini
に以下を追加します。
[DEFAULT]
interface_driver = openvswitch
external_network_bridge =
agent_mode = dvr
TUNNEL_INTERFACE_IP_ADDRESS
は、VXLAN プロジェクトネットワークを扱うインターフェースの IP アドレスに置き換えます。
The health of your keepalived
instances can be automatically monitored via
a bash script that verifies connectivity to all available and configured
gateway addresses. In the event that connectivity is lost, the master router
is rescheduled to another node.
If all routers lose connectivity simultaneously, the process of selecting a new master router will be repeated in a round-robin fashion until one or more routers have their connectivity restored.
To enable this feature, edit the l3_agent.ini
file:
ha_vrrp_health_check_interval = 30
Where ha_vrrp_health_check_interval
indicates how often in seconds the
health check should run. The default value is 0
, which indicates that the
check should not run at all.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.