具有 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 或更高版本。
配置示例¶
基本的部署模型包括一个控制器节点、两个或多个网络节点和多个计算节点。
控制器节点配置¶
将以下内容添加到
/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 路由器的数量。
将以下内容添加到
/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/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 地址。配置 L3 代理。将以下内容添加到
/etc/neutron/l3_agent.ini[DEFAULT] ha_vrrp_auth_password = password agent_mode = dvr_snat
计算节点¶
配置 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
配置 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 产生的影响相同。