Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Linux 实例上启用 Elastic Network Adapter (ENA) 增强联网

Amazon EC2 通过 Elastic Network Adapter (ENA) 向 C5, C5d, F1, G3, H1, I3, m4.16xlarge, M5, M5d, P2, P3, R4, R5, R5d, X1, X1e, and z1d 实例提供增强联网功能。

要求

要使用 ENA 准备增强联网,请按如下方式设置您的实例:

  • 从使用 Linux 内核版本 3.2 或更高版本的 HVM AMI 启动实例。最新的 Amazon Linux HVM AMI 安装有增强联网所需的模块,并已设置所需的属性。因此,如果使用最新的 Amazon Linux HVM AMI 启动由 Amazon EBS 提供支持且支持增强联网的实例,则已为您的实例启用 ENA 增强联网。

  • 在 VPC 中启动实例。(如果实例在 EC2-Classic 中,则您不能启用增强联网功能。)

  • AWS CLI适用于 Windows PowerShell 的 AWS 工具 安装到您选择的任意计算机上 (最好是您的本地台式计算机或笔记本电脑) 并进行配置。有关更多信息,请参阅 访问 Amazon EC2。不能从 Amazon EC2 控制台管理增强联网。

  • 如果您的实例上有重要的数据需要保留,则应立即从您的实例创建 AMI,来备份这些数据。更新内核和内核模块以及启用 enaSupport 属性可能会导致实例不兼容或操作系统无法访问;如果您有最新备份,则可在发生这种情况时保留数据。

测试是否启用了增强联网功能

若要测试是否已启用了增强联网,请确认实例上已安装 ena 模块且设置了 enaSupport 属性如果实例满足这两个条件,则 ethtool -i ethn 命令应显示该模块已在网络接口上使用。

内核模块 (ena)

要确认已安装 ena 模块,请使用 modinfo 命令,如下所示:

[ec2-user ~]$ modinfo ena filename: /lib/modules/4.14.33-59.37.amzn2.x86_64/kernel/drivers/amazon/net/ena/ena.ko version: 1.5.0g license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 692C7C68B8A9001CB3F31D0 alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i* alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i* alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i* alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i* depends: retpoline: Y intree: Y name: ena ...

在上述 Amazon Linux 情况中,ena 模块已安装。

ubuntu:~$ modinfo ena ERROR: modinfo: could not find module ena

在上述 Ubuntu 实例中,此模块未安装,因此您必须首先安装它。有关更多信息,请参阅 在 Ubuntu 上启用增强联网

实例属性 (enaSupport)

要检查实例是否设置了增强联网 enaSupport 属性,请使用以下任一命令。如果该属性已设置,则响应为 true。

  • describe-instances (AWS CLI)

    aws ec2 describe-instances --instance-ids instance_id --query "Reservations[].Instances[].EnaSupport"
  • Get-EC2Instance (Windows PowerShell 工具)

    (Get-EC2Instance -InstanceId instance-id).Instances.EnaSupport

映像属性 (enaSupport)

要检查 AMI 是否设置了增强联网 enaSupport 属性,请使用以下任一命令。如果该属性已设置,则响应为 true。

  • describe-images (AWS CLI)

    aws ec2 describe-images --image-id ami_id --query "Images[].EnaSupport"
  • Get-EC2Image (Windows PowerShell 工具)

    (Get-EC2Image -ImageId ami_id).EnaSupport

网络接口驱动程序

使用以下命令验证 ena 模块是否在特定接口上使用 (替换为要检查的接口的名称)。如果您使用单个接口 (默认设置),则它是 eth0

[ec2-user ~]$ ethtool -i eth0 driver: vif version: firmware-version: bus-info: vif-0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no

在上例中,ena 模块未加载,因为列出的驱动程序是 vif

[ec2-user ~]$ ethtool -i eth0 driver: ena version: 1.5.0g firmware-version: expansion-rom-version: bus-info: 0000:00:05.0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no

在此例中,ena 模块进行加载并具有推荐的最低版本。此实例正确配置了增强联网。

在 Amazon Linux AMI 上启用增强联网

Amazon Linux 2 和最新版本的 Amazon Linux AMI 安装有增强联网所需的模块,并已设置所需的 enaSupport 属性。因此,如果使用 HVM 版本的 Amazon Linux 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅 测试是否启用了增强联网功能

如果您使用较旧的 Amazon Linux AMI 启动了实例,并且实例尚未启用增强联网,请通过以下步骤启用增强联网。

在 Amazon Linux AMI 上启用增强联网

  1. 连接到您的实例。

  2. 从实例运行以下命令以使用最新内核和内核模块 (包括 ena) 更新实例:

    [ec2-user ~]$ sudo yum update
  3. 使用 Amazon EC2 控制台或以下任一命令从本地计算机重新启动实例:reboot-instances (AWS CLI),Restart-EC2Instance (适用于 Windows PowerShell 的 AWS 工具)。

  4. 再次连接到您的实例,并使用 测试是否启用了增强联网功能 中的 modinfo ena 命令验证 ena 模块是否已安装并具有推荐的最低版本。

  5. [EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances (AWS CLI)、Stop-EC2Instance (适用于 Windows PowerShell 的 AWS 工具)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中停止该实例,以便使实例状态保持同步。

    [实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Amazon Linux AMI 上启用增强联网(实例存储支持的实例)

  6. 使用以下任一命令从本地计算机启用增强联网属性:

  7. (可选) 从实例创建 AMI,如创建 Amazon EBS 支持的 Linux AMI中所述。该 AMI 从实例继承增强联网 enaSupport 属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。

  8. 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances (AWS CLI),Start-EC2Instance (适用于 Windows PowerShell 的 AWS 工具)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中启动该实例,以便使实例状态保持同步。

  9. 连接到您的实例,并使用 测试是否启用了增强联网功能 中的 ethtool -i ethn 命令验证是否在网络接口上安装并加载了 ena 模块。

    如果您在启用增强联网之后无法连接到实例,请参阅对 Elastic Network Adapter (ENA) 进行故障排除

在 Amazon Linux AMI 上启用增强联网(实例存储支持的实例)

按照上述过程操作,直到您停止实例的步骤。按照创建由实例存储支持的 Linux AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (适用于 Windows PowerShell 的 AWS 工具)

    Register-EC2Image -EnaSupport $true ...

在 Ubuntu 上启用增强联网

最新的 Ubuntu HVM AMI 安装有 ENA 增强联网所需的模块,并已设置所需的 enaSupport 属性。因此,如果使用最新的 Ubuntu HVM AMI 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅 测试是否启用了增强联网功能

如果您使用较旧的 AMI 启动了实例,并且实例尚未启用增强联网,则可以安装 linux-aws 内核程序包以获取最新的增强联网功能驱动程序。

安装 linux-aws 内核程序包

  1. 连接到您的实例。

  2. 更新包缓存和包。

    ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws

    重要

    如果在更新过程中系统提示您安装 grub,请使用 /dev/xvda 安装 grub,然后选择保留当前版本的 /boot/grub/menu.lst

在 Linux 上启用增强联网

下面的过程提供了在 Amazon Linux AMI 或 Ubuntu 之外的 Linux 发行版(如 SUSE Linux Enterprise Server、Red Hat Enterprise Linux 或 CentOS)上启用增强联网的一般步骤。在开始之前,请参阅测试是否启用了增强联网功能以检查是否已对您的实例启用增强联网。有关更多信息 (如命令的详细语法、文件位置或包和工具支持),请参阅您的 Linux 分发版的特定文档。

对 Linux 启用增强联网

  1. 连接到您的实例。

  2. 从 GitHub 克隆您的实例上的 ena 模块的源代码,网址为:https://github.com/amzn/amzn-drivers

    git clone https://github.com/amzn/amzn-drivers
  3. 在实例上编译并安装 ena 模块。

  4. 运行 sudo depmod 命令以更新模块依赖项。

  5. 在实例上更新 initramfs 以确保在启动时加载新模块。例如,如果您的分发版支持 dracut,则可使用以下命令:

    dracut -f -v
  6. 确定您的系统是否默认使用可预测的网络接口名称。使用 systemdudev 版本 197 或更高版本的系统可以重命名以太网设备,它们不保证单个网络接口将命名为 eth0。此行为可能导致连接到实例时出现问题。要获取更多信息并查看其他配置选项,请参阅 freedesktop.org 网站上的可预测的网络接口名称

    1. 您可以使用以下命令在基于 RPM 的系统上检查 systemdudev 版本:

      rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+' systemd-208-11.el7_0.2.x86_64

      在以上 Red Hat Enterprise Linux 7 示例中,systemd 版本是 208,因此必须禁用可预测的网络接口名称。

    2. 通过将 net.ifnames=0 选项添加到 /etc/default/grub 中的 GRUB_CMDLINE_LINUX 行,可禁用可预测的网络接口名称。

      sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
    3. 重新构建 grub 配置文件。

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  7. [EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances (AWS CLI)、Stop-EC2Instance (适用于 Windows PowerShell 的 AWS 工具)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中停止该实例,以便使实例状态保持同步。

    [实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Linux 上启用增强联网(实例存储支持的实例)

  8. 使用以下任一命令从本地计算机启用增强联网 enaSupport 属性:

  9. (可选) 从实例创建 AMI,如 创建 Amazon EBS 支持的 Linux AMI 中所述。该 AMI 从实例继承增强联网 enaSupport 属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。

    重要

    如果您操作系统的实例包含 /etc/udev/rules.d/70-persistent-net.rules 文件,则必须在创建 AMI 之前将其删除。此文件包含原始实例的以太网适配器 MAC 地址。如果其他实例使用此文件启动,操作系统将找不到设备,eth0 会失败,从而导致启动问题。此文件将在下次启动过程中重新生成,从 AMI 启动的任意实例都会创建这个文件的自有版本。

  10. 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances (AWS CLI),Start-EC2Instance (适用于 Windows PowerShell 的 AWS 工具)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中启动该实例,以便使实例状态保持同步。

  11. (可选) 连接到实例并确认已安装模块。

    如果您在启用增强联网之后无法连接到实例,请参阅对 Elastic Network Adapter (ENA) 进行故障排除

在 Linux 上启用增强联网(实例存储支持的实例)

按照上述过程操作,直到您停止实例的步骤。按照创建由实例存储支持的 Linux AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (适用于 Windows PowerShell 的 AWS 工具)

    Register-EC2Image -EnaSupport ...

故障排除

有关对 ENA 适配器进行故障排除的其他信息,请参阅对 Elastic Network Adapter (ENA) 进行故障排除