在一些场景下,为了进行VMware相关实验,我们往往是选择使用嵌套ESXi(Nested ESXi)环境,即在ESXi上部署ESXi系统,这样就可以实现在Home Lab环境只有1台物理服务器的情况下,部署vSphere集群环境。
但由于vSphere的交换机(VSS/VDS)不具备Mac地址学习的功能,需要在ESXi(物理)的虚拟交换机(VSS/VDS)上开启“混杂模式,Nested ESXi中虚拟机才能使用网络,但混杂模式带来一个性能问题(CPU和网络),每个数据包都会发给所有接口。
很高兴伴随vSphere 6.7的发布,原生的Mac地址学习功能已经集成到分布式交换机(VDS)中,嵌套ESXi环境将不再需要开启“混杂模式”。
免责声明:VMware仍不正式支持嵌套ESXi,请您自己承担风险使用。
此内容参考William Lam'blog
要使用新的MAC Learning功能,您当然需要升级到vSphere 6.7(vCenter和ESXi),还需要升级到最新的VDS版本6.6。 可以在每个分布式虚拟端口组上启用MAC学习,目前仅支持使用vSphere API配置。
- 对于那些使用VDS API来管理其VDS的用户,您只需使用现有的ReconfigureDVPortgroup_Task()方法,然后在6.7中,现在有了一个新的macManagementPolicy属性,该属性使您可以启用和定义MAC学习设置。 此新的MAC管理策略也将成为管理用于DV端口组的安全策略的新的首选方法,并且不应再使用以前的安全策略设置。
- William Lam创建PowerCLI脚本,包含Get-MacLearn和Set-MacLearn两个函数,可以从此处下载。 请确保下载最新的PowerCLI 11.5.0版本,该版本增加了对vSphere 6.7的支持。
安装MacLearn.ps1脚本
Import-Module .\MacLearn.ps1
使用Get-MacLearn查看当前VDS配置
Get-MacLearn功能可用于检索DV端口组的当前MAC学习配置,填写分布式端口组(PortGroup)名字:
Get-MacLearn -DVPortgroupName @("Ext-Network")
从输出的内容可以看到,目前“Ext-Network”端口组尚未启用MAC学习。我们还看到新的属性,例如,Limit定义可以学的的最大MAC地址数量(最大4096)和LimitPolicy定义超过学习到MAC地址限制时的策略(丢弃和接受)。
对于嵌套环境使用,您需要设置以下内容:
- MacLearning: True
- Promiscuous: False
- ForgedTransmit: True
- MacChange: False
- Limit: 4096(可选,脚本中提供了默认值)
- LimitPolicy: Drop(可选,函数中提供了默认值)
使用Set-MacLearn功能用于打开MAC学习配置。
Set-MacLearn -DVPortgroupName @("Ext-Network") -EnableMacLearn $true -EnablePromiscuous $false -EnableForgedTransmit $true -EnableMacChange $false
完成配置后,再次查看分布式端口组“Ext-Network”配置
此时我们已经打开了嵌套ESXi所需网络端口组的MAC地址学习功能,您现在可以在嵌套环境中运行VM了,此时网络速度更快,CPU占用更少。