在 ESXi 中,如何将现有端口组移动到不同的 vSwitch?
这似乎是一种人们经常期望的做法,但却没有现成的解决方案:
因此,我有一个大型 vSwitch,其中有大约 8 个不同的端口组(每个端口组分配有 4-6 个虚拟机)。由于网络变化,我需要将此 vSwitch 拆分为多个 vSwitch(每个 vSwitch 都有自己的物理适配器)。我只想将现有端口组(包括 VLAN ID)移动到正确的(新)vSwitch。
有没有一种简单的方法可以做到这一点,而无需重新配置整个系统?如果有一些 XML 文件存储了这些信息,那么只需 5 秒钟即可完成剪切和粘贴操作。
答案1
免责声明:这当然不是受支持/推荐的做法。不要在生产环境中这样做。为了安全起见,我关闭了所有虚拟机,并断开了 vSphere 连接。
首先,你需要访问 ESXi 控制台。然后,通过编辑就可以轻松完成此操作/etc/vmware/esx.conf
。
对于每个虚拟交换机,有如下条目:
/net/vswitch/child[0000]/name = "vSwitch0"
/net/vswitch/child[0000]/...
/net/vswitch/child[0001]/name = "vSwitch1"
/net/vswitch/child[0001]/...
...
顺便说一下,您可以在那里重命名 vSwitches。
这端口组是节点下的虚拟交换机:
/net/vswitch/child[0000]/portgroup/child[0000]/name = "Management Network"
/net/vswitch/child[0000]/portgroup/child[0000]/...
...
/net/vswitch/child[0000]/portgroup/child[0001]/name = "VM Network"
/net/vswitch/child[0000]/portgroup/child[0001]/...
...
要移动端口组从一个虚拟交换机到另一个,你只需改变它所/net/vswitch/child[XXXX]/
在的节点,确保尊重portgroup
孩子们现有的一切。换句话说,一旦你移动一个端口组到另一虚拟交换机,您可能需要更改其子编号。
笔记:你必须重新编号全部相关行(与该端口组相对应的所有行)。
笔记2:如果teamPolicy
端口组存在条目,则可能需要确保相关设置与要将其移动到的 vswitch 的uplinks[nnnn]/pnic =
实际设置相匹配。vmnicN
编辑文件后,我只需重新启动 ESXi 服务器:$ reboot
。可能有一些服务或进程需要重新启动,但我认为重新启动是最简单、最安全的方法。
例子
假设我们有两个 vSwitch,每个 vSwitch 都有一个vmnic
上行链路和两个端口组:
vSwitch0 --> vmnic0
|--portGroupA
|--portGroupB
vSwitch1 --> vmnic1
|--portGroupC
|--portGroupD
相关条目esx.conf
可能看起来像这样:
# vSwitch0
/net/vswitch/child[0000]/...
/net/vswitch/child[0000]/name = "vSwitch0"
/net/vswitch/child[0000]/numPorts = "128"
# vSwitch0->portGroupA
/net/vswitch/child[0000]/portgroup/child[0000]/name = "portGroupA"
/net/vswitch/child[0000]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
# vSwitch0->portGroupB
/net/vswitch/child[0000]/portgroup/child[0001]/name = "portGroupB"
/net/vswitch/child[0000]/portgroup/child[0001]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
/net/vswitch/child[0000]/uplinks/child[0000]/pnic = "vmnic0"
# vSwitch1
/net/vswitch/child[0001]/...
/net/vswitch/child[0001]/name = "vSwitch1"
/net/vswitch/child[0001]/numPorts = "128"
# vSwitch1->portGroupC
/net/vswitch/child[0001]/portgroup/child[0000]/name = "portGroupC"
/net/vswitch/child[0001]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic1"
# vSwitch1->portGroupD
/net/vswitch/child[0001]/portgroup/child[0001]/name = "portGroupD"
/net/vswitch/child[0001]/portgroup/child[0001]/teamPolicy/uplinks[0000]/pnic = "vmnic1"
/net/vswitch/child[0001]/uplinks/child[0000]/pnic = "vmnic1"
现在,我们要从 移动portGroupC
到vSwitch1
,vSwitch0
因此配置如下:
vSwitch0 --> vmnic0
|--portGroupA
|--portGroupB
|--portGroupC
vSwitch1 --> vmnic1
|--portGroupD
为此,我们:
- 识别所有
portGroupC
以 开头的行/net/vswitch/child[0001]/portgroup/child[0000]
。将这些条目随vSwitch0
配置一起上移(不是必需的,但可以使编辑时更清晰)。 - 在每一行上更改
/net/vswitch/child[0001]
为/net/vswitch/child[0000]
(因为我们将其移动到该开关)。 - 发现已经有
/net/vswitch/child[0000]/portgroup/child[0000]
(portGroupA
),则portGroupC
改为/portgroup/child[0002]
。 - 意识到该端口组的上行链路现在不正确(如果指定),并
uplinks[0000]/pnic =
从更改vmnic1
为vmnic0
(因为这是为该 vSwitch 提供服务的 vmnic。)
最终配置应如下所示:
# vSwitch0
/net/vswitch/child[0000]/...
/net/vswitch/child[0000]/name = "vSwitch0"
/net/vswitch/child[0000]/numPorts = "128"
# vSwitch0->portGroupA
/net/vswitch/child[0000]/portgroup/child[0000]/name = "portGroupA"
/net/vswitch/child[0000]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
# vSwitch0->portGroupB
/net/vswitch/child[0000]/portgroup/child[0001]/name = "portGroupB"
/net/vswitch/child[0000]/portgroup/child[0001]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
# vSwitch1->portGroupC
/net/vswitch/child[0000]/portgroup/child[0002]/name = "portGroupC"
/net/vswitch/child[0000]/portgroup/child[0002]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
/net/vswitch/child[0000]/uplinks/child[0000]/pnic = "vmnic0"
# vSwitch1
/net/vswitch/child[0001]/...
/net/vswitch/child[0001]/name = "vSwitch1"
/net/vswitch/child[0001]/numPorts = "128"
# vSwitch1->portGroupD
/net/vswitch/child[0001]/portgroup/child[0000]/name = "portGroupD"
/net/vswitch/child[0001]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic1"
/net/vswitch/child[0001]/uplinks/child[0000]/pnic = "vmnic1"
请注意,我还从 更改portGroupD
为portgroup/child[0001]
([0000]
因为不再有 0 条目。)
1 –#
这里的评论仅用于解释;我不知道它们是否在真实文件中起作用,而且无论如何在下一次配置时都会被震惊。