创建 ULL Compute Engine 实例
本页介绍了如何使用 U4 机器家族中的 U4P 或 U4C 机器类型创建超低延迟 (ULL) Compute Engine 实例。
如需大致了解 ULL 基础架构配置流程,请参阅 ULL 解决方案的配置概览。
准备工作
在创建 ULL 计算实例之前,请参阅以下部分。
创建 VPC 网络
如果尚未创建,请为每个实例的网络接口创建 VPC 网络,如 ULL Solution 的配置概览中所述。
创建布置政策
您可以选择性地为 ULL 实例应用分散布置政策,以提高恢复能力。如需了解详情,请参阅 Compute Engine 文档中的创建分散布置政策并加以应用。
设置项目
设置 gcloud CLI 以使用您的项目。或者,您也可以在后续过程中为每个命令添加 --project=PROJECT_ID 标志。
gcloud config set project PROJECT_ID
将 PROJECT_ID 替换为您的项目的 ID。
所需的角色
如需获得创建 Compute Engine 实例所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
创建和管理计算实例:项目的 Compute Instance Admin (
compute.instanceAdmin) 角色
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
ULL 实例配置概览
如需创建 ULL 计算实例并将该实例配置为发送或接收 ULL 单播和多播流量,请执行以下操作:
| 步骤 | 说明 |
|---|---|
| 创建 ULL 实例 | 使用 U4P 或 U4C 机器类型创建实例,并将其网络接口连接到通用 VPC 网络和 ULL VPC 网络。如果您打算将实例用作多播使用方,请将 igmp-query 标志设置为 IGMP_QUERY_V2。 |
为 ULL 单播流量的非 nic0 接口配置路由 |
在 guest 操作系统中配置基于来源的政策路由,以确保出站数据包通过正确的接口离开,并防止非对称路由。 |
| 将实例配置为 ULL 多播使用方 |
完成以下各项操作,以便在 ULL 网络接口上接收多播流量: 为了进一步优化性能,我们建议您还启用繁忙轮询,如使用 Onload 中所述。 |
此外,您还可以使用本页面上的示例命令来测试多播连接。
创建 ULL 实例
本部分介绍如何创建新实例以用于 ULL 单播和多播。
如需大致了解如何创建计算实例(包括其他配置选项),请参阅创建和启动 Compute Engine 实例。
gcloud
如需创建 ULL 实例,请使用 compute instances create 命令。
ULL 实例支持的网络接口类型为 GVNIC。
您必须添加 queue-count 字段,并为 XDP 支持指定 32 值。
对于连接到 ULL VPC 网络的网络接口,必须指定 no-address。
此外,以下命令还包含 igmp-query 标志,用于使实例成为多播使用方。如果实例仅为多播提供方,或者实例仅发送和接收单播,则不需要此标志。
gcloud compute instances create INSTANCE_NAME \
--zone=ZONE \
--machine-type=MACHINE_TYPE \
--image-project=IMAGE_PROJECT \
--image-family=IMAGE_FAMILY \
--maintenance-policy=TERMINATE \
--network-interface=nic-type=GVNIC,queue-count=32,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
--network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
--network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2
替换以下值:
ZONE:要在其中创建实例的可用区INSTANCE_NAME:实例的名称MACHINE_TYPE:实例的 U4P 或 U4C 机器类型IMAGE_PROJECT:映像项目,例如rhel-cloud。请参阅U4 机器类型的操作系统支持。IMAGE_FAMILY:映像系列,例如rhel-10-2-eus-gvnic-baremetal。 请参阅U4 机器类型的操作系统支持。指定映像系列时,系统会根据该映像系列中最新的未弃用操作系统映像版本创建实例。 或者,您也可以改用
--image标志并指定映像版本。GENERAL_PURPOSE_VPC_NETWORK、GENERAL_PURPOSE_SUBNET:要将实例的nic0接口附加到的 VPC 网络和子网ULL_VPC_NETWORK:要将非nic0接口附加到的 ULL VPC 网络ULL_SUBNET_1:ULL VPC 网络中要将nic1接口连接到的子网ULL_SUBNET_2:ULL VPC 网络中要将nic2接口连接到的子网
为非 nic0 接口配置 ULL 单播流量的路由
默认情况下,实例使用与其 nic0 接口关联的默认路由将流量发送到直接连接的子网之外的任何目的地。如需了解详情,请参阅多个网络接口概览。
为了使实例的 nic1 和 nic2 接口能够成功发送和接收 ULL 单播流量,您必须在客机操作系统中配置基于来源的政策路由。此配置可确保出站数据包通过正确的接口离开,并防止非对称路由,即流量通过一个接口进入,但尝试通过 nic0 退出。
如需查看有关如何配置政策路由的示例,请参阅为其他网络接口配置路由教程中的配置政策路由。
将实例配置为 ULL 多播使用方
本部分介绍如何将现有 ULL 实例配置为多播使用方。
在现有 ULL 实例上启用 IGMP 查询
如果您在创建实例时未启用 IGMP,则可以按照本部分中的说明在现有实例上启用 IGMP。
gcloud
如需对现有 ULL 实例启用 IGMP 查询,请使用 compute instances network-interfaces update 命令。
针对要接收多播流量的每个网络接口,重复执行以下命令。
gcloud compute instances network-interfaces update INSTANCE_NAME \
--zone=ZONE \
--network-interface=NETWORK_INTERFACE_NAME \
--igmp-query=IGMP_QUERY_V2
替换以下值:
INSTANCE_NAME:实例的名称ZONE:实例的可用区NETWORK_INTERFACE_NAME:要启用 IGMP 查询的网络接口的名称。在 Google Cloud中,格式为nicNUMBER,例如nic0、nic1或nic2。
在客机操作系统中设置 IGMPv2
如需在实例的客机操作系统中设置 IGMPv2,请执行以下操作:
使用 SSH 连接到实例。
运行以下命令,并确定要接收多播流量的网络接口的设备名称。
sudo ifconfig
针对每个适用的网络接口,运行以下命令以强制使用 IGMPv2。
sudo -i echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
将
NETWORK_INTERFACE_DEVICE_NAME替换为网络接口的设备名称,例如eth0、eth1或eth2。
配置反向路径过滤 (rp_filter)
在某些情况下(例如使用多 NIC 实例时),通过反向路径过滤 (rp-filter) 进行严格的来源验证可能会导致丢弃合法的多播数据包。为防止出现这种情况,您可以配置反向路径过滤,以放宽或停用接收多播流量的非 nic0 网络接口上的来源验证。例如,以下命令通过将 rp_filter 设置为 0,将反向路径过滤配置为在 eth1 和 eth2 上停用来源验证。
sudo sysctl -w net.ipv4.conf.all.rp_filter=0 sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0 sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0
如需详细了解 rp_filter,请参阅 Linux 内核文档中的 IP Sysctl。
增加网络驱动程序的环形缓冲区空间
本部分介绍了如何增加实例上网络驱动程序的环形缓冲区空间。
对于接收大量流量的多播消费者,请将网络驱动程序的环形缓冲区空间增加到 2048,以帮助避免丟包。针对接收多播流量的每个网络接口执行此操作。
请参阅以下示例命令,这些命令用于配置 nic1 和 nic2:
sudo ethtool -G eth1 rx 2048 tx 2048 sudo ethtool -G eth2 rx 2048 tx 2048
用于测试 ULL 多播连接性的示例命令
本部分提供了使用 iperf 工具在不启动应用工作负载的情况下测试多播流量的示例命令。本部分中的步骤要求完成超低延迟解决方案的配置概览中所述的多播配置。
从多播提供方发送 ULL 多播流量
使用 SSH 连接到实例。
如果您尚未安装
iperf,请进行安装。iperf3不支持多播。 以下命令使用iperf,该命令会安装iperf2。sudo yum install iperf
如需将多播流量发送到多播群组 IP 地址,请运行以下命令:
iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
替换以下值:
MULTICAST_GROUP_ADDRESS:多播群组 IP 地址NIC网络接口设备名称,例如eth1或eth2NIC_IP_ADDRESS分配给您指定的 NIC 的 IP 地址
加入组并接收来自多播使用方的 ULL 多播流量
使用 SSH 连接到实例。
如果您尚未安装
iperf,请进行安装。sudo yum install iperf
如需加入多播群组并记录收到的流量,请运行以下命令:
iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
替换以下值:
MULTICAST_GROUP_ADDRESS多播群组 IP 地址NIC网络接口设备名称,例如eth1或eth2
例如,以下命令会加入一个 IP 地址为
224.1.0.176的组,以接收最多 512 字节的数据包,并记录收到的流量:iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
验证 ULL 链接状态和速度
在实例的 ULL 网络接口上,ethtool 会显示实际的物理端口链路状态 (up/down) 和物理链路速度。
如需检查 ULL 网络接口的物理链路状态和速度,请运行以下命令:
sudo ethtool NIC
将 NIC 替换为客机操作系统分配的网络接口的名称,例如 ens8f0 或 ens48f0。