具有 VRRP 的分布式虚拟路由

Open vSwitch:使用 DVR 的高可用性支持使用虚拟路由器冗余协议 (VRRP) 进行增强。使用此配置,虚拟路由器同时支持 --distributed--ha 选项。

与传统的高可用性路由器类似,DVR/SNAT 高可用性路由器会在不同节点上运行的 l3-agent 上,将 SNAT 服务快速故障转移到备份 DVR/SNAT 路由器。

SNAT 高可用性以类似于 Open vSwitch:使用 VRRP 的高可用性 示例的方式实现,其中 keepalived 使用 VRRP 来提供 SNAT 服务的快速故障转移。

在正常操作期间,主路由器会通过隐藏项目网络定期传输心跳数据包,该网络连接特定项目的全部高可用性路由器。

如果 DVR/SNAT 备份路由器停止接收这些数据包,它会假定主 DVR/SNAT 路由器发生故障,并通过在 snat 命名空间中配置 IP 地址来提升自身为主要路由器。在具有多个备份路由器的环境中,将遵循 VRRP 规则来选择新的主路由器。

警告

keepalived v1.2.15 及更早版本中存在一个已知错误,该错误可能导致在 max_l3_agents_per_router 设置为 3 或更多时发生数据包丢失。因此,我们建议在使用此功能时升级到 keepalived v1.2.16 或更高版本。

配置示例

基本的部署模型包括一个控制器节点、两个或多个网络节点和多个计算节点。

控制器节点配置

  1. 将以下内容添加到 /etc/neutron/neutron.conf

    [DEFAULT]
    core_plugin = ml2
    service_plugins = router
    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 标志时,所有用户创建的路由器默认设置为高可用性。

    因此,如果在配置文件中将这两个标志设置为 True,则所有用户创建的路由器将默认设置为分布式高可用性路由器 (DVR HA)。

    具有管理权限的用户可以通过在 openstack router create 命令中设置标志来显式地完成此操作

    $ openstack router create name-of-router --distributed --ha
    

    注意

    max_l3_agents_per_router 确定将要实例化的备份 DVR/SNAT 路由器的数量。

  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_IDMAX_VXLAN_ID 替换为适合您环境的 VXLAN ID 最小值和最大值。

    注意

    tenant_network_types 选项中的第一个值将成为普通用户创建网络时默认的项目网络类型。

网络节点

  1. 配置 Open vSwitch 代理。将以下内容添加到 /etc/neutron/plugins/ml2/openvswitch_agent.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 地址。

  2. 配置 L3 代理。将以下内容添加到 /etc/neutron/l3_agent.ini

    [DEFAULT]
    ha_vrrp_auth_password = password
    agent_mode = dvr_snat
    

计算节点

  1. 配置 Open vSwitch 代理。将以下内容添加到 /etc/neutron/plugins/ml2/openvswitch_agent.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 = iptables_hybrid
    
  2. 配置 L3 代理。将以下内容添加到 /etc/neutron/l3_agent.ini

    [DEFAULT]
    agent_mode = dvr
    

    TUNNEL_INTERFACE_IP_ADDRESS 替换为处理 VXLAN 项目网络的接口的 IP 地址。

Keepalived VRRP 健康检查

可以通过一个 bash 脚本自动监控 keepalived 实例的运行状况,该脚本会验证与所有可用和配置的网关地址的连接。如果连接丢失,则主路由器将被重新安排到另一个节点。

如果所有路由器同时失去连接,则会以轮询方式重复选择新主路由器的过程,直到一个或多个路由器的连接恢复为止。

要启用此功能,请编辑 l3_agent.ini 文件

ha_vrrp_health_check_interval = 30

其中 ha_vrrp_health_check_interval 指示健康检查应该以秒为单位运行的频率。默认值为 0,表示不应运行检查。

已知限制

  • 在某些情况下,l2pop 和分布式高可用性路由器不会以预期的方式交互。这些情况与仅高可用性路由器和 l2pop 产生的影响相同。