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