第 9 章 配置 MTU 设置

9.1. MTU 概述

在 Red Hat OpenStack Platform 9 (Mitaka) 中,OpenStack Networking 可以计算出可以被安全应用到实例中的最大 MTU 的大小。MTU 的值设定了可以被传播的一个网络数据包的最大数据量,它需要根据应用程序的实际情况进行适当设置。例如,NFS 共享和 VoIP 应用的 MTU 的值就可能不一样。

注意

在 Red Hat OpenStack Platform 9 (Mitaka) 中,OpenStack Networking 可以计算出可以被安全应用到实例中的最大 MTU 的大小,然后用户可以通过 neutron net-show 命令检查这个值。如果被实例支持,所需的 MTU 值可以被广告到 DHCPv4 客户端以实现自动配置。

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

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

MTU settings

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

9.1.1. 配置 MTU 广告

MTU 广告(MTU advertisement)可以简化 MTU 配置的过程。它使用 DHCP 配置来设置 MTU,这样最佳的 MTU 的值就可以通过 DHCPv4 广告给所有实例。在 /etc/neutron/neutron.conf 中启用 MTU 广告功能:

advertise_mtu = True

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

注意

不是所有的 DHCPv4 客户端都可以自动配置 MTU 的值。

9.1.2. 配置租户网络

Red Hat OpenStack Platform 9 director 中,您可以在网络环境文件中使用一个参数来为所有租户网络设置默认的 MTU 值。这将可以方便地使您的配置与物理 MTU 相一致:

  • NeutronTenantMtu - 虚拟以太网设备的 MTU 值。如果使用 VXLAN/GRE 隧道,它的值需要最少比物理网络中的 MTU 值小 50 个字节。在默认情况下,它的值是 1400
9.1.3. 在 Director 中配置 MTU 的设置

这个示例展示了如何使用 NIC config 模板设置 MTU 的方法。MTU 需要在网桥、绑定(如果使用)、接口和 VLAN 中设置:

            -
              type: ovs_bridge
              name: br-isolated
              use_dhcp: false
              mtu: 9000    # <--- Set MTU
              members:
                -
                  type: ovs_bond
                  name: bond1
                  mtu: 9000    # <--- Set MTU
                  ovs_options: {get_param: BondInterfaceOvsOptions}
                  members:
                    -
                      type: interface
                      name: ens15f0
                      mtu: 9000    # <--- Set MTU
                      primary: true
                    -
                      type: interface
                      name: enp131s0f0
                      mtu: 9000    # <--- Set MTU
                -
                  type: vlan
                  device: bond1
                  vlan_id: {get_param: InternalApiNetworkVlanID}
                  mtu: 9000    # <--- Set MTU
                  addresses:
                  -
                    ip_netmask: {get_param: InternalApiIpSubnet}
                -
                  type: vlan
                  device: bond1
                  mtu: 9000    # <--- Set MTU
                  vlan_id: {get_param: TenantNetworkVlanID}
                  addresses:
                  -
                    ip_netmask: {get_param: TenantIpSubnet}
9.1.4. 检查 MTU 的计算结果

查看计算出的 MTU 值。它代表了计算出的,可以被实例使用的 MTU 的最大值。然后,您可以在网络数据经过的所有接口中配置这个值。

# neutron net-show <network>
注意

在目前,推荐把实例内的 MTU 值设置为一个小于 1500 字节的值(如 1450 字节)。这个较小的值代表了 Open vSwitch 用于路由目的所要添加的额外的头数据。