第 16 章 配置 MTU 设置

16.1. MTU 概述

在 Red Hat Enterprise Linux OpenStack Platform 7(kilo),OpenStack Networking 可以为实例广告(advertise) MTU 的大小,这和使用 DHCP 分配设置相似。MTU 的值设定了可以被传播的一个网络数据包的最大数据量,它需要根据应用程序的实际情况进行适当设置。例如,NFS 共享和 VoIP 应用的 MTU 的值就可能不一样。

注意

在 Red Hat Enterprise Linux OpenStack Platform 7(kilo)中支持的功能是通过 DHCP 广告 MTU 的设置。您也可以使用 ‘neutron net-show’ 命令查看 MTU 的计算结果。

为了可以正常工作,MTU 的设置在端点到端点间应该保持一致。这意味着,在数据包要经过的所有端点中(包括虚拟机本身、虚拟网络基础架构、物理网络和目标服务器本身),MTU 的设置都需要相同。

例如,下图中的红线代表了,为了在一个实例和物理服务器间传输数据包,需要调整 MTU 值的端点。每个需要处理网络数据的接口都需要修改 MTU 值来支持特定的 MTU 大小。如果数据需要从实例 192.168.200.15 传送到物理服务器 10.20.15.25,则需要这个设置:

MTU settings

不统一的 MTU 值可能会导致多种网络问题,其中最常见的问题就是网络性能的降低。这些问题不太容易被排除,这需要检查每个可能的网络端点是否设置了正确的 MTU 值。

16.2. 配置 MTU 广告

MTU 广告(MTU advertisement)可以简化 MTU 配置的过程。它使用 DHCP 配置来设置 MTU,这样就可以为 DHCP 客户端指定 MTU 的值,然后广告到使用 DHCPv4 或 IPv6 RA 的实例,实例就会自动应用这个 MTU 设置。

/etc/neutron/neutron.conf 中启用 MTU advertisement:

advertise_mtu = True

租户网络配置的 MTU 选项会被广告到使用 DHCP 和 RA 的实例中。

16.3. 配置租户网络

指定的 MTU 值可以被分配到租户网络,然后再使用 DHCP 分配给实例。在 /etc/neutron/plugins/ml2/ml2_conf.ini 中为独立的租户网络调整 MTU 设置:

请注意: 当前,MTU 设置不能在单个 VXLAN/GRE 网络中应用。

  • path_mtu - 这个选项应用于第 3 层(路由的)网络流量,并配置一个网络数据包的最大数据量。OpenStack Networking 会参考这个值来为租户网络计算出最大可能的 MTU 值。这些值会根据网络类型进行计算:

    • Flat/VLAN:最小的 segment_mtu 或 physical_network_mtus 值
    • GRE:segment_mtu 和 path_mtu 中最小的值减去 GRE_ENCAP_OVERHEAD(42 字节)
    • VXLAN:segment_mtu 和 path_mtu 中最小的值减去 VXLAN_ENCAP_OVERHEAD(50 字节)

path_mtu 的值是一个应用到 L3 机制驱动的整数值。例如:

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 path_mtu 1450
  • segment_mtu - 应用于第 2 层(交换的)网络数据。它指定了在进行网络分隔前,一个 2 层网络数据包(也被称为帧)的最大数据量。

segment_mtu 的值是一个应用到 L3 机制驱动的整数值。例如:

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 segment_mtu 1475
  • physical_network_mtus - 这个值把物理网络映射到它们配置的 MTU 值。使用这个设置来为外部供应商网络应用一个自定义 MTU 值。例如:
physical_network_mtus = physnet1:1550, physnet2:1500

16.4. 检查更新的设置

使用 neutron 命令检查存在的网络 mtu 值:

# neutron net-show <network>